[Bf-blender-cvs] [41431eacfa1] blender2.8: Eevee: TAA: Use safe color when outputing the final color.

Clément Foucault noreply at git.blender.org
Mon Apr 30 16:39:32 CEST 2018


Commit: 41431eacfa1afc66533f5d27cc21dfa58024e26c
Author: Clément Foucault
Date:   Mon Apr 30 12:25:15 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB41431eacfa1afc66533f5d27cc21dfa58024e26c

Eevee: TAA: Use safe color when outputing the final color.

This prevent any NANs pixel to spear accross the history. This does not
mean we should allow NANs at all!

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

M	source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
M	source/blender/draw/engines/eevee/shaders/effect_temporal_aa.glsl

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

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 3512d4a86c1..6c21d7d6fef 100644
--- a/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
@@ -511,11 +511,6 @@ void main()
 		fallback_cubemap(N, V, worldPosition, viewPosition, roughness, roughnessSquared, spec_accum);
 	}
 
-	/* XXX TODO FIXME (fclem): Something else produces NANs and is not handled before. */
-	if (any(isnan(spec_accum))) {
-		spec_accum = vec4(0.0);
-	}
-
 	fragColor = vec4(spec_accum.rgb * speccol_roughness.rgb, 1.0);
 }
 
diff --git a/source/blender/draw/engines/eevee/shaders/effect_temporal_aa.glsl b/source/blender/draw/engines/eevee/shaders/effect_temporal_aa.glsl
index d4fbac21563..8d07ae45b6b 100644
--- a/source/blender/draw/engines/eevee/shaders/effect_temporal_aa.glsl
+++ b/source/blender/draw/engines/eevee/shaders/effect_temporal_aa.glsl
@@ -4,6 +4,12 @@ uniform sampler2D velocityBuffer;
 
 out vec4 FragColor;
 
+vec4 safe_color(vec4 c)
+{
+	/* Clamp to avoid black square artifacts if a pixel goes NaN. */
+	return clamp(c, vec4(0.0), vec4(1e20)); /* 1e20 arbitrary. */
+}
+
 #ifdef USE_REPROJECTION
 
 /**
@@ -85,7 +91,7 @@ void main()
 	bool out_of_view = any(greaterThanEqual(abs(uv_history - 0.5), vec2(0.5)));
 	color_history = (out_of_view) ? color : color_history;
 
-	FragColor = color_history;
+	FragColor = safe_color(color_history);
 }
 
 #else
@@ -97,6 +103,6 @@ void main()
 	ivec2 texel = ivec2(gl_FragCoord.xy);
 	vec4 color = texelFetch(colorBuffer, texel, 0);
 	vec4 color_history = texelFetch(colorHistoryBuffer, texel, 0);
-	FragColor = mix(color_history, color, alpha);
+	FragColor = safe_color(mix(color_history, color, alpha));
 }
 #endif



More information about the Bf-blender-cvs mailing list