[Bf-blender-cvs] [eb8093cb143] tmp-eevee-shadowmap-refactor: EEVEE: Shadow: Add back shadow bias

Clément Foucault noreply at git.blender.org
Mon Sep 2 16:53:51 CEST 2019


Commit: eb8093cb143c7fc3a0b59b12d4d397dea8284ab2
Author: Clément Foucault
Date:   Mon Sep 2 02:20:46 2019 +0200
Branches: tmp-eevee-shadowmap-refactor
https://developer.blender.org/rBeb8093cb143c7fc3a0b59b12d4d397dea8284ab2

EEVEE: Shadow: Add back shadow bias

This is needed in some corner case (shadow acne due to aliasing and depth
disparity). This is a simple bias added to default bias. It should not be
needed most of the time but we leave it at 1 by default.

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

M	source/blender/draw/engines/eevee/eevee_shadows_cascade.c
M	source/blender/draw/engines/eevee/eevee_shadows_cube.c
M	source/blender/draw/engines/eevee/shaders/lights_lib.glsl

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

diff --git a/source/blender/draw/engines/eevee/eevee_shadows_cascade.c b/source/blender/draw/engines/eevee/eevee_shadows_cascade.c
index 58d3b0c44c0..9965530724f 100644
--- a/source/blender/draw/engines/eevee/eevee_shadows_cascade.c
+++ b/source/blender/draw/engines/eevee/eevee_shadows_cascade.c
@@ -40,6 +40,7 @@ void EEVEE_shadows_cascade_add(EEVEE_LightsInfo *linfo, EEVEE_Light *evli, Objec
   EEVEE_ShadowCascade *csm_data = linfo->shadow_cascade_data + linfo->cascade_len;
   EEVEE_ShadowCascadeRender *csm_render = linfo->shadow_cascade_render + linfo->cascade_len;
 
+  sh_data->bias = max_ff(la->bias * 0.05f, 0.0f);
   eevee_contact_shadow_setup(la, sh_data);
 
   linfo->shadow_cascade_light_indices[linfo->cascade_len] = linfo->num_light;
diff --git a/source/blender/draw/engines/eevee/eevee_shadows_cube.c b/source/blender/draw/engines/eevee/eevee_shadows_cube.c
index 95fd91329af..b10c206703a 100644
--- a/source/blender/draw/engines/eevee/eevee_shadows_cube.c
+++ b/source/blender/draw/engines/eevee/eevee_shadows_cube.c
@@ -47,6 +47,7 @@ void EEVEE_shadows_cube_add(EEVEE_LightsInfo *linfo, EEVEE_Light *evli, Object *
   }
 
   sh_data->near = max_ff(la->clipsta, 1e-8f);
+  sh_data->bias = max_ff(la->bias * 0.05f, 0.0f);
   eevee_contact_shadow_setup(la, sh_data);
 
   /* Saving light bounds for later. */
diff --git a/source/blender/draw/engines/eevee/shaders/lights_lib.glsl b/source/blender/draw/engines/eevee/shaders/lights_lib.glsl
index 8e0ae81a41a..15822ef4f31 100644
--- a/source/blender/draw/engines/eevee/shaders/lights_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/lights_lib.glsl
@@ -92,7 +92,7 @@ float sample_cube_shadow(int shadow_id, vec3 W)
 {
   int data_id = int(sd(shadow_id).sh_data_index);
   vec3 cubevec = transform_point(scube(data_id).shadowmat, W);
-  float dist = max_v3(abs(cubevec));
+  float dist = max_v3(abs(cubevec)) - sd(shadow_id).sh_bias;
   dist = buffer_depth(true, dist, sd(shadow_id).sh_far, sd(shadow_id).sh_near);
   /* Manual Shadow Cube Layer indexing. */
   /* TODO Shadow Cube Array. */
@@ -119,13 +119,13 @@ float sample_cascade_shadow(int shadow_id, vec3 W)
   vec4 coord, shpos;
   /* Main cascade. */
   shpos = scascade(data_id).shadowmat[cascade] * vec4(W, 1.0);
-  coord = vec4(shpos.xy, tex_id + float(cascade), shpos.z);
+  coord = vec4(shpos.xy, tex_id + float(cascade), shpos.z - sd(shadow_id).sh_bias);
   vis += texture(shadowCascadeTexture, coord) * (1.0 - blend);
 
   cascade = min(3, cascade + 1);
   /* Second cascade. */
   shpos = scascade(data_id).shadowmat[cascade] * vec4(W, 1.0);
-  coord = vec4(shpos.xy, tex_id + float(cascade), shpos.z);
+  coord = vec4(shpos.xy, tex_id + float(cascade), shpos.z - sd(shadow_id).sh_bias);
   vis += texture(shadowCascadeTexture, coord) * blend;
 
   return saturate(vis);



More information about the Bf-blender-cvs mailing list