Răsfoiți Sursa

ShaderLib: Added shadowMask to MeshLambertMaterial.

Mr.doob 9 ani în urmă
părinte
comite
fb8ec33d9d

+ 50 - 0
src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl

@@ -0,0 +1,50 @@
+float getShadowMask() {
+
+	float shadow = 1.0;
+
+	#ifdef USE_SHADOWMAP
+
+	#if NUM_DIR_LIGHTS > 0
+
+	DirectionalLight directionalLight;
+
+	for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {
+
+		directionalLight = directionalLights[ i ];
+		shadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
+
+	}
+
+	#endif
+
+	#if NUM_SPOT_LIGHTS > 0
+
+	SpotLight spotLight;
+
+	for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {
+
+		spotLight = spotLights[ i ];
+		shadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;
+
+	}
+
+	#endif
+
+	#if NUM_POINT_LIGHTS > 0
+
+	PointLight pointLight;
+
+	for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {
+
+		pointLight = pointLights[ i ];
+		shadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;
+
+	}
+
+	#endif
+
+	#endif
+
+	return shadow;
+
+}

+ 4 - 2
src/renderers/shaders/ShaderLib.js

@@ -104,7 +104,7 @@ THREE.ShaderLib = {
 
 				THREE.ShaderChunk[ "aomap_fragment" ],
 
-				"vec3 outgoingLight = reflectedLight.indirectDiffuse;",
+			"	vec3 outgoingLight = reflectedLight.indirectDiffuse;",
 
 				THREE.ShaderChunk[ "envmap_fragment" ],
 				THREE.ShaderChunk[ "linear_to_gamma_fragment" ],
@@ -213,8 +213,10 @@ THREE.ShaderLib = {
 			THREE.ShaderChunk[ "envmap_pars_fragment" ],
 			THREE.ShaderChunk[ "bsdfs" ],
 			THREE.ShaderChunk[ "ambient_pars" ],
+			THREE.ShaderChunk[ "lights_pars" ],
 			THREE.ShaderChunk[ "fog_pars_fragment" ],
 			THREE.ShaderChunk[ "shadowmap_pars_fragment" ],
+			THREE.ShaderChunk[ "shadowmask_pars_fragment" ],
 			THREE.ShaderChunk[ "specularmap_pars_fragment" ],
 			THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
 
@@ -249,7 +251,7 @@ THREE.ShaderLib = {
 
 			"	#endif",
 
-			"	reflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );",
+			"	reflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();",
 
 				// modulation
 				THREE.ShaderChunk[ "aomap_fragment" ],

+ 1 - 0
utils/build/includes/common.json

@@ -176,6 +176,7 @@
 	"src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl",
 	"src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl",
 	"src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl",
+	"src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl",
 	"src/renderers/shaders/ShaderChunk/skinbase_vertex.glsl",
 	"src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl",
 	"src/renderers/shaders/ShaderChunk/skinning_vertex.glsl",