소스 검색

Shaders: Refactor indirect lighting functions (#22471)

WestLangley 3 년 전
부모
커밋
a3a4c82122

+ 2 - 2
examples/js/csm/CSMShader.js

@@ -202,14 +202,14 @@ IncidentLight directLight;
 
 	vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );
 
-	irradiance += getLightProbeIrradiance( lightProbe, geometry );
+	irradiance += getLightProbeIrradiance( lightProbe, geometry.normal );
 
 	#if ( NUM_HEMI_LIGHTS > 0 )
 
 		#pragma unroll_loop_start
 		for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {
 
-			irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );
+			irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );
 
 		}
 		#pragma unroll_loop_end

+ 2 - 2
examples/jsm/csm/CSMShader.js

@@ -200,14 +200,14 @@ IncidentLight directLight;
 
 	vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );
 
-	irradiance += getLightProbeIrradiance( lightProbe, geometry );
+	irradiance += getLightProbeIrradiance( lightProbe, geometry.normal );
 
 	#if ( NUM_HEMI_LIGHTS > 0 )
 
 		#pragma unroll_loop_start
 		for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {
 
-			irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );
+			irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );
 
 		}
 		#pragma unroll_loop_end

+ 2 - 2
src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js

@@ -7,11 +7,11 @@ export default /* glsl */`
 
 	#endif
 
-	vec3 getIBLIrradiance( const in GeometricContext geometry ) {
+	vec3 getIBLIrradiance( const in vec3 normal ) {
 
 		#if defined( ENVMAP_TYPE_CUBE_UV )
 
-			vec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );
+			vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
 
 			vec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );
 

+ 2 - 2
src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js

@@ -127,14 +127,14 @@ IncidentLight directLight;
 
 	vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );
 
-	irradiance += getLightProbeIrradiance( lightProbe, geometry );
+	irradiance += getLightProbeIrradiance( lightProbe, geometry.normal );
 
 	#if ( NUM_HEMI_LIGHTS > 0 )
 
 		#pragma unroll_loop_start
 		for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {
 
-			irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );
+			irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );
 
 		}
 		#pragma unroll_loop_end

+ 1 - 1
src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js

@@ -18,7 +18,7 @@ export default /* glsl */`
 
 	#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )
 
-		iblIrradiance += getIBLIrradiance( geometry );
+		iblIrradiance += getIBLIrradiance( geometry.normal );
 
 	#endif
 

+ 4 - 4
src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js

@@ -24,13 +24,13 @@ vec3 directLightColor_Diffuse;
 
 vIndirectFront += getAmbientLightIrradiance( ambientLightColor );
 
-vIndirectFront += getLightProbeIrradiance( lightProbe, geometry );
+vIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );
 
 #ifdef DOUBLE_SIDED
 
 	vIndirectBack += getAmbientLightIrradiance( ambientLightColor );
 
-	vIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );
+	vIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );
 
 #endif
 
@@ -107,11 +107,11 @@ vIndirectFront += getLightProbeIrradiance( lightProbe, geometry );
 	#pragma unroll_loop_start
 	for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {
 
-		vIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );
+		vIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );
 
 		#ifdef DOUBLE_SIDED
 
-			vIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );
+			vIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );
 
 		#endif
 

+ 4 - 4
src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js

@@ -30,9 +30,9 @@ vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {
 
 }
 
-vec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {
+vec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {
 
-	vec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );
+	vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
 
 	vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );
 
@@ -208,9 +208,9 @@ float getSpotAttenuation( const in float coneCosine, const in float penumbraCosi
 
 	uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];
 
-	vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {
+	vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {
 
-		float dotNL = dot( geometry.normal, hemiLight.direction );
+		float dotNL = dot( normal, hemiLight.direction );
 		float hemiDiffuseWeight = 0.5 * dotNL + 0.5;
 
 		vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );