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.
This commit is contained in:
Clément Foucault 2018-11-06 14:53:54 +01:00
parent bc1c263a8a
commit 8a204ccdb4
2 changed files with 3 additions and 4 deletions

View File

@ -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);

View File

@ -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;
}