[Bf-blender-cvs] [9afeba330fc] blender2.8: Eevee: Fix SSRefraction noise.

Clément Foucault noreply at git.blender.org
Tue Jan 16 18:22:37 CET 2018


Commit: 9afeba330fcece4e50ffc5a3c83986d43f9d966d
Author: Clément Foucault
Date:   Tue Jan 16 14:02:00 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB9afeba330fcece4e50ffc5a3c83986d43f9d966d

Eevee: Fix SSRefraction noise.

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

M	source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
M	source/blender/draw/engines/eevee/shaders/ssr_lib.glsl

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

diff --git a/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
index cac3edaee45..19bfb5856c0 100644
--- a/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
@@ -314,7 +314,7 @@ void CLOSURE_NAME(
 	if (ssrToggle && roughness < maxRoughness + 0.2) {
 		/* Find approximated position of the 2nd refraction event. */
 		vec3 refr_vpos = (refractionDepth > 0.0) ? transform_point(ViewMatrix, refr_pos) : viewPosition;
-		vec4 trans = screen_space_refraction(refr_vpos, N, refr_V, final_ior, roughnessSquared, rand.xzw);
+		vec4 trans = screen_space_refraction(refr_vpos, N, refr_V, final_ior, roughnessSquared, rand);
 		trans.a *= smoothstep(maxRoughness + 0.2, maxRoughness, roughness);
 		accumulate_light(trans.rgb, trans.a, refr_accum);
 	}
diff --git a/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl b/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl
index 2be7a6d2e73..6c7bfeb6b82 100644
--- a/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl
@@ -2,10 +2,9 @@
 
 #define BTDF_BIAS 0.85
 
-vec4 screen_space_refraction(vec3 viewPosition, vec3 N, vec3 V, float ior, float roughnessSquared, vec3 rand)
+vec4 screen_space_refraction(vec3 viewPosition, vec3 N, vec3 V, float ior, float roughnessSquared, vec4 rand)
 {
 	float a2 = max(5e-6, roughnessSquared * roughnessSquared);
-	float jitter = rand.x;
 
 	/* Importance sampling bias */
 	rand.x = mix(rand.x, 0.0, BTDF_BIAS);
@@ -13,12 +12,12 @@ vec4 screen_space_refraction(vec3 viewPosition, vec3 N, vec3 V, float ior, float
 	vec3 T, B;
 	float NH;
 	make_orthonormal_basis(N, T, B);
-	vec3 H = sample_ggx(rand, a2, N, T, B, NH); /* Microfacet normal */
+	vec3 H = sample_ggx(rand.xzw, a2, N, T, B, NH); /* Microfacet normal */
 	float pdf = pdf_ggx_reflect(NH, a2);
 
 	/* If ray is bad (i.e. going below the plane) regenerate. */
 	if (F_eta(ior, dot(H, V)) < 1.0) {
-		H = sample_ggx(rand * vec3(1.0, -1.0, -1.0), a2, N, T, B, NH); /* Microfacet normal */
+		H = sample_ggx(rand.xzw * vec3(1.0, -1.0, -1.0), a2, N, T, B, NH); /* Microfacet normal */
 		pdf = pdf_ggx_reflect(NH, a2);
 	}
 
@@ -33,7 +32,7 @@ vec4 screen_space_refraction(vec3 viewPosition, vec3 N, vec3 V, float ior, float
 
 	R = transform_direction(ViewMatrix, R);
 
-	vec3 hit_pos = raycast(-1, viewPosition, R * 1e16, ssrThickness, jitter, ssrQuality, roughnessSquared, false);
+	vec3 hit_pos = raycast(-1, viewPosition, R * 1e16, ssrThickness, rand.y, ssrQuality, roughnessSquared, false);
 
 	if ((hit_pos.z > 0.0) && (F_eta(ior, dot(H, V)) < 1.0)) {
 		hit_pos = get_view_space_from_depth(hit_pos.xy, hit_pos.z);



More information about the Bf-blender-cvs mailing list