Browse Source

Fade last cascade in directional shadow, closes #9779

Juan Linietsky 8 years ago
parent
commit
294e912a84
1 changed files with 4 additions and 1 deletions
  1. 4 1
      drivers/gles3/shaders/scene.glsl

+ 4 - 1
drivers/gles3/shaders/scene.glsl

@@ -1694,6 +1694,7 @@ FRAGMENT_SHADER_CODE
 	if (gl_FragCoord.w > shadow_split_offsets.w) {
 	if (gl_FragCoord.w > shadow_split_offsets.w) {
 
 
 	vec3 pssm_coord;
 	vec3 pssm_coord;
+	float pssm_fade=0.0;
 
 
 #ifdef LIGHT_USE_PSSM_BLEND
 #ifdef LIGHT_USE_PSSM_BLEND
 	float pssm_blend;
 	float pssm_blend;
@@ -1751,6 +1752,7 @@ FRAGMENT_SHADER_CODE
 		} else {
 		} else {
 			highp vec4 splane=(shadow_matrix4 * vec4(vertex,1.0));
 			highp vec4 splane=(shadow_matrix4 * vec4(vertex,1.0));
 			pssm_coord=splane.xyz/splane.w;
 			pssm_coord=splane.xyz/splane.w;
+			pssm_fade = smoothstep(shadow_split_offsets.z,shadow_split_offsets.w,gl_FragCoord.w);
 
 
 #if defined(LIGHT_USE_PSSM_BLEND)
 #if defined(LIGHT_USE_PSSM_BLEND)
 			use_blend=false;
 			use_blend=false;
@@ -1782,6 +1784,7 @@ FRAGMENT_SHADER_CODE
 	} else {
 	} else {
 		highp vec4 splane=(shadow_matrix2 * vec4(vertex,1.0));
 		highp vec4 splane=(shadow_matrix2 * vec4(vertex,1.0));
 		pssm_coord=splane.xyz/splane.w;
 		pssm_coord=splane.xyz/splane.w;
+		pssm_fade = smoothstep(shadow_split_offsets.x,shadow_split_offsets.y,gl_FragCoord.w);
 #if defined(LIGHT_USE_PSSM_BLEND)
 #if defined(LIGHT_USE_PSSM_BLEND)
 		use_blend=false;
 		use_blend=false;
 
 
@@ -1818,7 +1821,7 @@ FRAGMENT_SHADER_CODE
 
 
 	}
 	}
 #endif
 #endif
-	light_attenuation=mix(shadow_color_contact.rgb,vec3(1.0),shadow);
+	light_attenuation=mix(mix(shadow_color_contact.rgb,vec3(1.0),shadow),vec3(1.0),pssm_fade);
 
 
 
 
 	}
 	}