[Bf-blender-cvs] [5c45fe29371] blender2.8: Eevee : Fix regression : Refraction not working

Clément Foucault noreply at git.blender.org
Tue Sep 26 16:48:37 CEST 2017


Commit: 5c45fe293712311a0bd33fe1aa9f4beca7a85fca
Author: Clément Foucault
Date:   Tue Sep 26 16:47:53 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB5c45fe293712311a0bd33fe1aa9f4beca7a85fca

Eevee : Fix regression : Refraction not working

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

M	source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
M	source/blender/draw/engines/eevee/shaders/ssr_lib.glsl
M	source/blender/gpu/shaders/gpu_shader_material.glsl

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

diff --git a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
index 38dc886dd7d..c841acd3c23 100644
--- a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
@@ -570,6 +570,7 @@ struct Closure {
 
 /* This is hacking ssr_id to tag transparent bsdf */
 #define TRANSPARENT_CLOSURE_FLAG -2
+#define REFRACT_CLOSURE_FLAG -3
 
 #define CLOSURE_DEFAULT Closure(vec3(0.0), 1.0, vec4(0.0), vec2(0.0), -1)
 
diff --git a/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl b/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl
index 6dbd761ba8d..5b7ca8cdfa5 100644
--- a/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl
@@ -35,7 +35,7 @@ vec4 screen_space_refraction(vec3 viewPosition, vec3 N, vec3 V, float ior, float
 
 	vec3 hit_pos = raycast(-1, viewPosition, R, ssrThickness, jitter, roughnessSquared);
 
-	if ((hit_pos.z < 0.0) && (F_eta(ior, dot(H, V)) < 1.0)) {
+	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);
 		float hit_dist = distance(hit_pos, viewPosition);
 
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index 62ac953d64b..fb89c554775 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -2897,7 +2897,7 @@ void node_bsdf_principled_clearcoat(vec4 base_color, float subsurface, vec3 subs
 	}
 	result = Closure(surface_color.rgb / surface_color.a, 1.0);
 #else
-	vec3 L_trans = (transmission <= 0.0) ? vec3(0.0) : eevee_surface_glass(N, base_color.rgb * ((refractionDepth > 0.0) ? base_color.rgb : vec3(1.0)), roughness, ior, int(-2), ssr_spec);
+	vec3 L_trans = (transmission <= 0.0) ? vec3(0.0) : eevee_surface_glass(N, base_color.rgb * ((refractionDepth > 0.0) ? base_color.rgb : vec3(1.0)), roughness, ior, REFRACT_CLOSURE_FLAG, ssr_spec);
 	vec3 L = eevee_surface_clearcoat_lit(N, diffuse, f0, roughness, CN, clearcoat, clearcoat_roughness, 1.0, int(ssr_id), ssr_spec);
 	L = mix(L, L_trans, transmission);
 	vec3 vN = normalize(mat3(ViewMatrix) * N);
@@ -2921,6 +2921,9 @@ void node_bsdf_transparent(vec4 color, out Closure result)
 	/* this isn't right */
 	result.radiance = vec3(0.0);
 	result.opacity = 0.0;
+#ifdef EEVEE_ENGINE
+	result.ssr_id = TRANSPARENT_CLOSURE_FLAG;
+#endif
 }
 
 void node_bsdf_velvet(vec4 color, float sigma, vec3 N, out Closure result)
@@ -2941,7 +2944,7 @@ void node_bsdf_refraction(vec4 color, float roughness, float ior, vec3 N, out Cl
 	color.rgb *= (refractionDepth > 0.0) ? color.rgb : vec3(1.0); /* Simulate 2 absorption event. */
 	roughness = sqrt(roughness);
 	vec3 L = eevee_surface_refraction(N, vec3(1.0), roughness, ior);
-	result = Closure(L * color.rgb, 1.0, vec4(0.0), vec2(0.0), int(-2));
+	result = Closure(L * color.rgb, 1.0, vec4(0.0), vec2(0.0), REFRACT_CLOSURE_FLAG);
 #else
 	node_bsdf_diffuse(color, 0.0, N, result);
 #endif /* EEVEE_ENGINE */



More information about the Bf-blender-cvs mailing list