提交 7a6666b8 编写于 作者: S sunag

energy-preservation flag

上级 d1f94e36
......@@ -20,6 +20,8 @@ function StandardNode() {
this.roughness = new FloatNode( 0.5 );
this.metalness = new FloatNode( 0.5 );
this.energyPreservation = true;
}
StandardNode.prototype = Object.create( Node.prototype );
......@@ -32,6 +34,8 @@ StandardNode.prototype.build = function ( builder ) {
builder.define( this.clearCoat || this.clearCoatRoughness ? 'PHYSICAL' : 'STANDARD' );
if ( this.energyPreservation ) builder.define( 'ENERGY_PRESERVATION' );
builder.requires.lights = true;
builder.extensions.shaderTextureLOD = true;
......
......@@ -29,6 +29,7 @@ export interface MeshStandardMaterialParameters extends MaterialParameters {
alphaMap?: Texture;
envMap?: Texture;
envMapIntensity?: number;
energyPreservation: boolean;
refractionRatio?: number;
wireframe?: boolean;
wireframeLinewidth?: number;
......@@ -66,6 +67,7 @@ export class MeshStandardMaterial extends Material {
alphaMap: Texture | null;
envMap: Texture | null;
envMapIntensity: number;
energyPreservation: boolean;
refractionRatio: number;
wireframe: boolean;
wireframeLinewidth: number;
......
......@@ -44,6 +44,8 @@ import { Color } from '../math/Color.js';
* envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),
* envMapIntensity: <float>
*
* energyPreservation: <bool>,
*
* refractionRatio: <float>,
*
* wireframe: <boolean>,
......@@ -99,6 +101,8 @@ function MeshStandardMaterial( parameters ) {
this.envMap = null;
this.envMapIntensity = 1.0;
this.energyPreservation = true;
this.refractionRatio = 0.98;
this.wireframe = false;
......@@ -161,6 +165,8 @@ MeshStandardMaterial.prototype.copy = function ( source ) {
this.envMap = source.envMap;
this.envMapIntensity = source.envMapIntensity;
this.energyPreservation = source.energyPreservation;
this.refractionRatio = source.refractionRatio;
this.wireframe = source.wireframe;
......
......@@ -98,7 +98,7 @@ void RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricCo
// Defer to the IndirectSpecular function to compute
// the indirectDiffuse if energy preservation is enabled.
#ifndef ENVMAP_TYPE_CUBE_UV
#ifndef ENERGY_PRESERVATION
reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );
......@@ -120,7 +120,7 @@ void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradia
// Both indirect specular and diffuse light accumulate here
// if energy preservation enabled, and PMREM provided.
#if defined( ENVMAP_TYPE_CUBE_UV )
#if defined( ENERGY_PRESERVATION )
vec3 singleScattering = vec3( 0.0 );
vec3 multiScattering = vec3( 0.0 );
......
......@@ -522,6 +522,8 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
parameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '',
parameters.energyPreservation ? '#define ENERGY_PRESERVATION' : '',
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
parameters.logarithmicDepthBuffer && ( capabilities.isWebGL2 || extensions.get( 'EXT_frag_depth' ) ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
......
......@@ -201,6 +201,8 @@ function WebGLPrograms( renderer, extensions, capabilities ) {
toneMapping: renderer.toneMapping,
physicallyCorrectLights: renderer.physicallyCorrectLights,
energyPreservation: material.energyPreservation,
premultipliedAlpha: material.premultipliedAlpha,
alphaTest: material.alphaTest,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册