diff --git a/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl b/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl index fa3d189c6bab282fbf3ab57c268afb43a3004595..7dbd53bd75cea7f66a20a01329d5ea271f66eca6 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 642f55ce526d90abda3a90afadb34e9fd1e26456..784f798b24eb150565198ab9afee5d0c7120ce14 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 1440e26bd307e157229558b3b5f0f7254b596263..fff4f5a98d6f4ef8bcc8aeac1621c85596ecf205 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 aec3d056f4ffb74a1852cebed385538ac85aa31b..6ec3b717d1d3b3cfd751a8d8e58d8a53e1930b60 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 5b522a6f9256f183eeae3a2ef1d741aa37af9c2e..058f0b0dab43b829f3ecfd1d457db404874f003e 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 8d4d67853c9d9406ae1c7cd181bc41e858847e11..7d40563914ef1ae2ca073ba33c035e1aa8bc2eb8 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" ],