Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2021-02-22 18:59:18 +0300
committerClément Foucault <foucault.clem@gmail.com>2021-02-22 19:34:09 +0300
commitcd1a08398437bb6be4ea82bb553ef3e8dcaee7ab (patch)
treebbaaac001df4b93c46c110afb622a7e860d6eefc /source
parent1ec626f4bd06e830edc13a8a6986eec2885499dd (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')
-rw-r--r--source/blender/draw/engines/eevee/shaders/closure_eval_lib.glsl9
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl2
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);