[Bf-blender-cvs] [403bb357ae2] master: Fix T74110: EEVEE Shadow Pass

Jeroen Bakker noreply at git.blender.org
Thu Feb 27 15:58:23 CET 2020


Commit: 403bb357ae2b1d2561a0d77c96035ba54c197cbd
Author: Jeroen Bakker
Date:   Mon Feb 24 10:46:45 2020 +0100
Branches: master
https://developer.blender.org/rB403bb357ae2b1d2561a0d77c96035ba54c197cbd

Fix T74110: EEVEE Shadow Pass

Shadow could penetrate occluded geometry. This patch adds a check to see
if the light is in the right location to light the pixel.

Reviewed By: fclem

Differential Revision: https://developer.blender.org/D6918

===================================================================

M	source/blender/draw/engines/eevee/shaders/shadow_accum_frag.glsl
M	source/blender/draw/intern/shaders/common_view_lib.glsl

===================================================================

diff --git a/source/blender/draw/engines/eevee/shaders/shadow_accum_frag.glsl b/source/blender/draw/engines/eevee/shaders/shadow_accum_frag.glsl
index fa02bee45b7..fe6a828f369 100644
--- a/source/blender/draw/engines/eevee/shaders/shadow_accum_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/shadow_accum_frag.glsl
@@ -19,7 +19,7 @@ void main()
   float depth = texelFetch(depthBuffer, texel, 0).r;
   if (depth == 1.0f) {
     /* Early exit background does not receive shadows */
-    fragColor.r = 1.0;
+    fragColor.r = 0.0;
     return;
   }
 
@@ -40,6 +40,7 @@ void main()
   vec3 worldPosition = transform_point(ViewMatrixInverse, viewPosition);
 
   vec3 true_normal = normalize(cross(dFdx(viewPosition), dFdy(viewPosition)));
+  vec3 N = normal_view_to_world(true_normal);
 
   for (int i = 0; i < MAX_LIGHT && i < laNumLight; i++) {
     LightData ld = lights_data[i];
@@ -48,8 +49,9 @@ void main()
     l_vector.xyz = ld.l_position - worldPosition;
     l_vector.w = length(l_vector.xyz);
 
+    float light_input = smoothstep(0.2, -0.2, -dot(N, normalize(l_vector.xyz)));
     float l_vis = light_shadowing(
-        ld, worldPosition, viewPosition, tracing_depth, true_normal, rand.x, true, 1.0);
+        ld, worldPosition, viewPosition, tracing_depth, true_normal, rand.x, true, light_input);
 
     accum_light += l_vis;
   }
diff --git a/source/blender/draw/intern/shaders/common_view_lib.glsl b/source/blender/draw/intern/shaders/common_view_lib.glsl
index 6605e1165d4..cfe79cb3ee0 100644
--- a/source/blender/draw/intern/shaders/common_view_lib.glsl
+++ b/source/blender/draw/intern/shaders/common_view_lib.glsl
@@ -164,6 +164,7 @@ uniform mat4 ModelMatrixInverse;
 #define normal_object_to_world(n) (transpose(mat3(ModelMatrixInverse)) * n)
 #define normal_world_to_object(n) (transpose(mat3(ModelMatrix)) * n)
 #define normal_world_to_view(n) (mat3(ViewMatrix) * n)
+#define normal_view_to_world(n) (mat3(ViewMatrixInverse) * n)
 
 #define point_object_to_ndc(p) (ViewProjectionMatrix * vec4((ModelMatrix * vec4(p, 1.0)).xyz, 1.0))
 #define point_object_to_view(p) ((ViewMatrix * vec4((ModelMatrix * vec4(p, 1.0)).xyz, 1.0)).xyz)



More information about the Bf-blender-cvs mailing list