From 576c6950322ec761cb947c67bc6297a704e3e53b Mon Sep 17 00:00:00 2001 From: WestLangley Date: Tue, 27 Oct 2015 19:19:55 -0400 Subject: [PATCH] Modified struct ReflectedLight --- .../shaders/ShaderChunk/aomap_fragment.glsl | 2 +- src/renderers/shaders/ShaderChunk/common.glsl | 10 ++++--- .../lights_phong_pars_fragment.glsl | 12 ++++---- .../lights_physical_pars_fragment.glsl | 18 +++++------- .../shaders/ShaderChunk/lights_template.glsl | 10 +++---- src/renderers/shaders/ShaderLib.js | 29 +++++++++---------- 6 files changed, 38 insertions(+), 43 deletions(-) diff --git a/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl b/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl index fa3d189c6b..7dbd53bd75 100644 --- a/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl +++ b/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl @@ -1,5 +1,5 @@ #ifdef USE_AOMAP - indirectReflectedLight.diffuse *= ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0; + reflectedLight.indirectDiffuse *= ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0; #endif diff --git a/src/renderers/shaders/ShaderChunk/common.glsl b/src/renderers/shaders/ShaderChunk/common.glsl index 642f55ce52..784f798b24 100644 --- a/src/renderers/shaders/ShaderChunk/common.glsl +++ b/src/renderers/shaders/ShaderChunk/common.glsl @@ -12,13 +12,15 @@ float average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); } struct IncidentLight { - vec3 color; - vec3 direction; + vec3 color; + vec3 direction; }; struct ReflectedLight { - vec3 specular; - vec3 diffuse; + vec3 directDiffuse; + vec3 directSpecular; + vec3 indirectDiffuse; + vec3 indirectSpecular; }; struct GeometricContext { diff --git a/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl b/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl index 1440e26bd3..fff4f5a98d 100644 --- a/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl +++ b/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl @@ -20,23 +20,21 @@ struct BlinnPhongMaterial { float specularStrength; }; -void BlinnPhongMaterial_RE_DirectLight( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight directReflectedLight ) { +void BlinnPhongMaterial_RE_DirectLight( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { float dotNL = saturate( dot( geometry.normal, directLight.direction ) ); - directReflectedLight.diffuse += dotNL * directLight.color * BRDF_Diffuse_Lambert( material.diffuseColor ); + reflectedLight.directDiffuse += dotNL * directLight.color * BRDF_Diffuse_Lambert( material.diffuseColor ); - directReflectedLight.specular += dotNL * directLight.color * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength; + reflectedLight.directSpecular += dotNL * directLight.color * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength; } #define Material_RE_DirectLight BlinnPhongMaterial_RE_DirectLight -void BlinnPhongMaterial_RE_IndirectDiffuseLight( const in vec3 indirectDiffuseColor, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight indirectReflectedLight ) { +void BlinnPhongMaterial_RE_IndirectDiffuseLight( const in vec3 indirectDiffuseColor, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { - //float dotNL = saturate( dot( geometry.normal, indirectLight.direction ) ); not required because result is always 1.0 - - indirectReflectedLight.diffuse += indirectDiffuseColor * BRDF_Diffuse_Lambert( material.diffuseColor ); + reflectedLight.indirectDiffuse += indirectDiffuseColor * BRDF_Diffuse_Lambert( material.diffuseColor ); } diff --git a/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl b/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl index aec3d056f4..6ec3b717d1 100644 --- a/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl +++ b/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl @@ -6,33 +6,29 @@ struct PhysicalMaterial { float clearCoatRoughness; }; -void PhysicalMaterial_RE_DirectLight( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight directReflectedLight ) { +void PhysicalMaterial_RE_DirectLight( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { float dotNL = saturate( dot( geometry.normal, directLight.direction ) ); - directReflectedLight.diffuse += dotNL * directLight.color * BRDF_Diffuse_Lambert( material.diffuseColor ); - directReflectedLight.specular += dotNL * directLight.color * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness ); + reflectedLight.directDiffuse += dotNL * directLight.color * BRDF_Diffuse_Lambert( material.diffuseColor ); + reflectedLight.directSpecular += dotNL * directLight.color * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness ); } #define Material_RE_DirectLight PhysicalMaterial_RE_DirectLight -void PhysicalMaterial_RE_DiffuseIndirectLight( const in vec3 indirectDiffuseColor, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight indirectReflectedLight ) { +void PhysicalMaterial_RE_DiffuseIndirectLight( const in vec3 indirectDiffuseColor, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { - //float dotNL = saturate( dot( geometry.normal, indirectLight.direction ) ); not required because result is always 1.0 - - indirectReflectedLight.diffuse += indirectDiffuseColor * BRDF_Diffuse_Lambert( material.diffuseColor ); + reflectedLight.indirectDiffuse += indirectDiffuseColor * BRDF_Diffuse_Lambert( material.diffuseColor ); } #define Material_RE_IndirectDiffuseLight PhysicalMaterial_RE_DiffuseIndirectLight -void PhysicalMaterial_RE_SpecularIndirectLight( const in vec3 indirectSpecularColor, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight indirectReflectedLight ) { - - //float dotNL = saturate( dot( geometry.normal, indirectLight.direction ) ); not required because result is always 1.0 +void PhysicalMaterial_RE_SpecularIndirectLight( const in vec3 indirectSpecularColor, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { - indirectReflectedLight.specular += indirectSpecularColor * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness ); + reflectedLight.indirectSpecular += indirectSpecularColor * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness ); } diff --git a/src/renderers/shaders/ShaderChunk/lights_template.glsl b/src/renderers/shaders/ShaderChunk/lights_template.glsl index 5b522a6f92..058f0b0dab 100644 --- a/src/renderers/shaders/ShaderChunk/lights_template.glsl +++ b/src/renderers/shaders/ShaderChunk/lights_template.glsl @@ -21,7 +21,7 @@ GeometricContext geometry = GeometricContext( -vViewPosition, normalize( normal IncidentLight directLight = getPointDirectLight( pointLights[ i ], geometry ); - Material_RE_DirectLight( directLight, geometry, material, directReflectedLight ); + Material_RE_DirectLight( directLight, geometry, material, reflectedLight ); } @@ -33,7 +33,7 @@ GeometricContext geometry = GeometricContext( -vViewPosition, normalize( normal IncidentLight directLight = getSpotDirectLight( spotLights[ i ], geometry ); - Material_RE_DirectLight( directLight, geometry, material, directReflectedLight ); + Material_RE_DirectLight( directLight, geometry, material, reflectedLight ); } @@ -45,7 +45,7 @@ GeometricContext geometry = GeometricContext( -vViewPosition, normalize( normal IncidentLight directLight = getDirectionalDirectLight( directionalLights[ i ], geometry ); - Material_RE_DirectLight( directLight, geometry, material, directReflectedLight ); + Material_RE_DirectLight( directLight, geometry, material, reflectedLight ); } @@ -73,7 +73,7 @@ GeometricContext geometry = GeometricContext( -vViewPosition, normalize( normal #endif - Material_RE_IndirectDiffuseLight( indirectDiffuseColor, geometry, material, indirectReflectedLight ); + Material_RE_IndirectDiffuseLight( indirectDiffuseColor, geometry, material, reflectedLight ); } @@ -85,7 +85,7 @@ GeometricContext geometry = GeometricContext( -vViewPosition, normalize( normal vec3 indirectSpecularColor = getSpecularLightProbeIndirectLightColor( /*specularLightProbe,*/ geometry, Material_LightProbeLOD( material ) ); - Material_RE_IndirectSpecularLight( indirectSpecularColor, geometry, material, indirectReflectedLight ); + Material_RE_IndirectSpecularLight( indirectSpecularColor, geometry, material, reflectedLight ); } diff --git a/src/renderers/shaders/ShaderLib.js b/src/renderers/shaders/ShaderLib.js index 8d4d67853c..7d40563914 100644 --- a/src/renderers/shaders/ShaderLib.js +++ b/src/renderers/shaders/ShaderLib.js @@ -98,13 +98,13 @@ THREE.ShaderLib = { THREE.ShaderChunk[ "alphatest_fragment" ], THREE.ShaderChunk[ "specularmap_fragment" ], - " ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), diffuseColor.rgb );", + " ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), diffuseColor.rgb, vec3( 0.0 ) );", THREE.ShaderChunk[ "aomap_fragment" ], THREE.ShaderChunk[ "shadowmap_fragment" ], - "indirectReflectedLight.diffuse *= shadowMask;", + "reflectedLight.indirectDiffuse *= shadowMask;", - "vec3 outgoingLight = indirectReflectedLight.diffuse;", + "vec3 outgoingLight = reflectedLight.indirectDiffuse;", THREE.ShaderChunk[ "envmap_fragment" ], THREE.ShaderChunk[ "linear_to_gamma_fragment" ], @@ -370,8 +370,7 @@ THREE.ShaderLib = { "void main() {", " vec4 diffuseColor = vec4( diffuse, opacity );", - " ReflectedLight directReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );", - " ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );", + " ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );", " vec3 totalEmissiveLight = emissive;", " vec3 shadowMask = vec3( 1.0 );", @@ -393,16 +392,16 @@ THREE.ShaderLib = { THREE.ShaderChunk[ "aomap_fragment" ], THREE.ShaderChunk[ "shadowmap_fragment" ], - "directReflectedLight.diffuse *= shadowMask;", - "directReflectedLight.specular *= shadowMask;", + "reflectedLight.directDiffuse *= shadowMask;", + "reflectedLight.directSpecular *= shadowMask;", "#ifdef METAL", - " vec3 outgoingLight = ( directReflectedLight.diffuse + indirectReflectedLight.diffuse ) * specular + directReflectedLight.specular + indirectReflectedLight.specular + totalEmissiveLight;", + " vec3 outgoingLight = ( reflectedLight.directDiffuse + reflectedLight.indirectDiffuse ) * specular + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveLight;", "#else", - " vec3 outgoingLight = ( directReflectedLight.diffuse + indirectReflectedLight.diffuse ) + directReflectedLight.specular + indirectReflectedLight.specular + totalEmissiveLight;", + " vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveLight;", "#endif", @@ -540,7 +539,7 @@ THREE.ShaderLib = { THREE.ShaderChunk[ "fog_pars_fragment" ], THREE.ShaderChunk[ "bsdfs" ], THREE.ShaderChunk[ "lights_pars" ], - THREE.ShaderChunk[ "lights_physical_pars_fragment" ], // use phong chunk for now + THREE.ShaderChunk[ "lights_physical_pars_fragment" ], THREE.ShaderChunk[ "shadowmap_pars_fragment" ], THREE.ShaderChunk[ "bumpmap_pars_fragment" ], THREE.ShaderChunk[ "normalmap_pars_fragment" ], @@ -552,8 +551,7 @@ THREE.ShaderLib = { "void main() {", " vec4 diffuseColor = vec4( diffuse, opacity );", - " ReflectedLight directReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );", - " ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );", + " ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );", " vec3 totalEmissiveLight = emissive;", THREE.ShaderChunk[ "logdepthbuf_fragment" ], @@ -579,10 +577,11 @@ THREE.ShaderLib = { "vec3 shadowMask = vec3( 1.0 );", THREE.ShaderChunk[ "shadowmap_fragment" ], - "directReflectedLight.diffuse *= shadowMask;", - "directReflectedLight.specular *= shadowMask;", - "vec3 outgoingLight = directReflectedLight.diffuse + indirectReflectedLight.diffuse + directReflectedLight.specular + indirectReflectedLight.specular + totalEmissiveLight;", + "reflectedLight.directDiffuse *= shadowMask;", + "reflectedLight.directSpecular *= shadowMask;", + + "vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveLight;", THREE.ShaderChunk[ "linear_to_gamma_fragment" ], -- GitLab