[Bf-blender-cvs] [8a204ccdb49] blender2.8: Eevee: Support monochromatic Transparent BSDF correctly

Clément Foucault noreply at git.blender.org
Wed Nov 7 00:19:35 CET 2018


Commit: 8a204ccdb49bd682e41a5d706726c3c77f6217fd
Author: Clément Foucault
Date:   Tue Nov 6 14:53:54 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB8a204ccdb49bd682e41a5d706726c3c77f6217fd

Eevee: Support monochromatic Transparent BSDF correctly

This fits Cycles better even if it is only for grey scale values. This only
work if the blend mode is Alpha Blend or Alpha Hashed.

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

M	source/blender/draw/engines/eevee/shaders/bsdf_common_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 1bd9410314b..eb03df67f6b 100644
--- a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
@@ -719,7 +719,6 @@ Closure closure_mix(Closure cl1, Closure cl2, float fac)
 	Closure cl;
 
 	if (cl1.ssr_id == TRANSPARENT_CLOSURE_FLAG) {
-		cl1.radiance = cl2.radiance;
 		cl1.ssr_normal = cl2.ssr_normal;
 		cl1.ssr_data = cl2.ssr_data;
 		cl1.ssr_id = cl2.ssr_id;
@@ -731,7 +730,6 @@ Closure closure_mix(Closure cl1, Closure cl2, float fac)
 #  endif
 	}
 	if (cl2.ssr_id == TRANSPARENT_CLOSURE_FLAG) {
-		cl2.radiance = cl1.radiance;
 		cl2.ssr_normal = cl1.ssr_normal;
 		cl2.ssr_data = cl1.ssr_data;
 		cl2.ssr_id = cl1.ssr_id;
@@ -752,8 +750,9 @@ Closure closure_mix(Closure cl1, Closure cl2, float fac)
 		cl.ssr_normal = cl2.ssr_normal;
 		cl.ssr_id = cl2.ssr_id;
 	}
-	cl.radiance = mix(cl1.radiance, cl2.radiance, fac);
 	cl.opacity = mix(cl1.opacity, cl2.opacity, fac);
+	cl.radiance = mix(cl1.radiance * cl1.opacity, cl2.radiance * cl2.opacity, fac);
+	cl.radiance /= max(1e-8, cl.opacity);
 
 #  ifdef USE_SSS
 	cl.sss_data.rgb = mix(cl1.sss_data.rgb, cl2.sss_data.rgb, fac);
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index e24cf8da989..3ddf1aefe4d 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -1351,7 +1351,7 @@ void node_bsdf_transparent(vec4 color, out Closure result)
 	/* this isn't right */
 	result = CLOSURE_DEFAULT;
 	result.radiance = vec3(0.0);
-	result.opacity = 0.0;
+	result.opacity = clamp(1.0 - dot(color.rgb, vec3(0.3333334)), 0.0, 1.0);
 	result.ssr_id = TRANSPARENT_CLOSURE_FLAG;
 }



More information about the Bf-blender-cvs mailing list