瀏覽代碼

common.glsl: added visible bool (in range) to IncidentLight

Mr.doob 9 年之前
父節點
當前提交
cdfdd5a7a6

+ 1 - 0
src/renderers/shaders/ShaderChunk/common.glsl

@@ -15,6 +15,7 @@ float average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }
 struct IncidentLight {
 	vec3 color;
 	vec3 direction;
+	bool visible;
 };
 
 struct ReflectedLight {

+ 5 - 0
src/renderers/shaders/ShaderChunk/lights_pars.glsl

@@ -18,6 +18,7 @@
 
 		directLight.color = directionalLight.color;
 		directLight.direction = directionalLight.direction;
+		directLight.visible = true;
 
 		return directLight;
 
@@ -55,10 +56,12 @@
 
 			directLight.color = pointLight.color;
 			directLight.color *= calcLightAttenuation( lightDistance, pointLight.distance, pointLight.decay );
+			directLight.visible = true;
 
 		} else {
 
 			directLight.color = vec3( 0.0 );
+			directLight.visible = false;
 
 		}
 
@@ -105,10 +108,12 @@
 
 			directLight.color = spotLight.color;
 			directLight.color *= ( spotEffect * calcLightAttenuation( lightDistance, spotLight.distance, spotLight.decay ) );
+			directLight.visible = true;
 
 		} else {
 
 			directLight.color = vec3( 0.0 );
+			directLight.visible = false;
 
 		}
 

+ 3 - 3
src/renderers/shaders/ShaderChunk/lights_template.glsl

@@ -32,7 +32,7 @@ IncidentLight directLight;
 		directLight = getPointDirectLight( pointLight, geometry );
 
 		#ifdef USE_SHADOWMAP
-		directLight.color *= all( bvec2( pointLight.shadow, length( directLight.color ) > 0.0 ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;
+		directLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;
 		#endif
 
 		RE_Direct( directLight, geometry, material, reflectedLight );
@@ -52,7 +52,7 @@ IncidentLight directLight;
 		directLight = getSpotDirectLight( spotLight, geometry );
 
 		#ifdef USE_SHADOWMAP
-		directLight.color *= all( bvec2( spotLight.shadow, length( directLight.color ) > 0.0 ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;
+		directLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;
 		#endif
 
 		RE_Direct( directLight, geometry, material, reflectedLight );
@@ -72,7 +72,7 @@ IncidentLight directLight;
 		directLight = getDirectionalDirectLight( directionalLight, geometry );
 
 		#ifdef USE_SHADOWMAP
-		directLight.color *= all( bvec2( directionalLight.shadow, length( directLight.color ) > 0.0 ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
+		directLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
 		#endif
 
 		RE_Direct( directLight, geometry, material, reflectedLight );