From cd1a08398437bb6be4ea82bb553ef3e8dcaee7ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Mon, 22 Feb 2021 16:59:18 +0100 Subject: 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`. --- source/blender/draw/engines/eevee/shaders/closure_eval_lib.glsl | 9 ++++++++- source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) (limited to 'source') 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); -- cgit v1.2.3