diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2021-02-22 18:59:18 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2021-02-22 19:34:09 +0300 |
commit | cd1a08398437bb6be4ea82bb553ef3e8dcaee7ab (patch) | |
tree | bbaaac001df4b93c46c110afb622a7e860d6eefc /source/blender/draw | |
parent | 1ec626f4bd06e830edc13a8a6986eec2885499dd (diff) |
Fix T85720 EEVEE: Contact shadows do not appear when enabling SSR
Contact shadows needed correct `gl_FragCoord.z` but this is not
correctly set for fullscreen passes. Need to pass depth using a global
variable until we get rid of `cl_eval.tracing_depth`.
Diffstat (limited to 'source/blender/draw')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/closure_eval_lib.glsl | 9 | ||||
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl | 2 |
2 files changed, 10 insertions, 1 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/closure_eval_lib.glsl b/source/blender/draw/engines/eevee/shaders/closure_eval_lib.glsl index 8cb702796da..93492762bbe 100644 --- a/source/blender/draw/engines/eevee/shaders/closure_eval_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/closure_eval_lib.glsl @@ -196,6 +196,9 @@ struct ClosureOutput { vec3 radiance; }; +/* Workaround for screenspace shadows in SSR pass. */ +float FragDepth; + ClosureEvalCommon closure_Common_eval_init(ClosureInputCommon cl_in) { ClosureEvalCommon cl_eval; @@ -208,11 +211,15 @@ ClosureEvalCommon closure_Common_eval_init(ClosureInputCommon cl_in) cl_eval.Ng = safe_normalize(cross(dFdx(cl_eval.P), dFdy(cl_eval.P))); cl_eval.vNg = transform_direction(ViewMatrix, cl_eval.Ng); /* TODO(fclem) See if we can avoid this complicated setup. */ +#ifdef STEP_RESOLVE /* SSR */ + cl_eval.tracing_depth = FragDepth; +#else cl_eval.tracing_depth = gl_FragCoord.z; +#endif /* Constant bias (due to depth buffer precision) */ /* Magic numbers for 24bits of precision. * From http://terathon.com/gdc07_lengyel.pdf (slide 26) */ - cl_eval.tracing_depth -= mix(2.4e-7, 4.8e-7, gl_FragCoord.z); + cl_eval.tracing_depth -= mix(2.4e-7, 4.8e-7, cl_eval.tracing_depth); /* Convert to view Z. */ cl_eval.tracing_depth = get_view_z_from_depth(cl_eval.tracing_depth); diff --git a/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl index 1b7c535379e..a4b29d68ac4 100644 --- a/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl @@ -569,6 +569,8 @@ void main() discard; } + FragDepth = depth; + viewPosition = get_view_space_from_depth(uvcoordsvar.xy, depth); worldPosition = transform_point(ViewMatrixInverse, viewPosition); |