Skip to content

Commit

Permalink
Merge pull request #17163 from sunag/dev-energy-preservation
Browse files Browse the repository at this point in the history
NodeMaterial: Added energy preservation flag
  • Loading branch information
mrdoob authored Aug 5, 2019
2 parents 5902347 + 7a6666b commit d4a7c78
Show file tree
Hide file tree
Showing 6 changed files with 18 additions and 2 deletions.
4 changes: 4 additions & 0 deletions examples/jsm/nodes/materials/nodes/StandardNode.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 );
Expand All @@ -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;
Expand Down
2 changes: 2 additions & 0 deletions src/materials/MeshStandardMaterial.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ export interface MeshStandardMaterialParameters extends MaterialParameters {
alphaMap?: Texture;
envMap?: Texture;
envMapIntensity?: number;
energyPreservation: boolean;
refractionRatio?: number;
wireframe?: boolean;
wireframeLinewidth?: number;
Expand Down Expand Up @@ -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;
Expand Down
6 changes: 6 additions & 0 deletions src/materials/MeshStandardMaterial.js
Original file line number Diff line number Diff line change
Expand Up @@ -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>,
Expand Down Expand Up @@ -99,6 +101,8 @@ function MeshStandardMaterial( parameters ) {
this.envMap = null;
this.envMapIntensity = 1.0;

this.energyPreservation = true;

this.refractionRatio = 0.98;

this.wireframe = false;
Expand Down Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 );
Expand All @@ -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 );
Expand Down
2 changes: 2 additions & 0 deletions src/renderers/webgl/WebGLProgram.js
Original file line number Diff line number Diff line change
Expand Up @@ -527,6 +527,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' : '',

Expand Down
2 changes: 2 additions & 0 deletions src/renderers/webgl/WebGLPrograms.js
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,8 @@ function WebGLPrograms( renderer, extensions, capabilities ) {
toneMapping: renderer.toneMapping,
physicallyCorrectLights: renderer.physicallyCorrectLights,

energyPreservation: material.energyPreservation,

premultipliedAlpha: material.premultipliedAlpha,

alphaTest: material.alphaTest,
Expand Down

0 comments on commit d4a7c78

Please sign in to comment.