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
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2021-03-13 22:56:26 +0300
committerClément Foucault <foucault.clem@gmail.com>2021-03-13 22:59:20 +0300
commit03490618a285a46dca137055735a8df780a24047 (patch)
treedc8ec2d11957ab748897077da4cdb67170ca9e5e
parent09e77d2c89315ee3b7153e53d6990469b6759fa7 (diff)
EEVEE: ScreenSpaceReflections: Avoid outputing NaNs
This happens when the normal is too much deformed to give valid reflection even after ensure_valid_reflection. Cycles seems to not handle this case either so we just discard the rays.
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_reflection_trace_frag.glsl7
1 files changed, 7 insertions, 0 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/effect_reflection_trace_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_reflection_trace_frag.glsl
index b88a106e897..b1f17cb7b07 100644
--- a/source/blender/draw/engines/eevee/shaders/effect_reflection_trace_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/effect_reflection_trace_frag.glsl
@@ -113,6 +113,13 @@ void main()
vec3 vH = sample_ggx(rand.xzw, alpha, vV, vN, vT, vB, pdf);
vec3 vR = reflect(-vV, vH);
+ if (isnan(pdf)) {
+ /* Seems that somethings went wrong.
+ * This only happens on extreme cases where the normal deformed too much to have any valid
+ * reflections. */
+ return;
+ }
+
if (data.is_planar) {
vec3 view_plane_normal = transform_direction(ViewMatrix, planars_data[planar_id].pl_normal);
/* For planar reflections, we trace inside the reflected view. */