Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2018-11-06 16:53:54 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-11-07 02:19:14 +0300
commit8a204ccdb49bd682e41a5d706726c3c77f6217fd (patch)
tree407ddb63d644dc839b82c7bd1b142a1202590908
parentbc1c263a8ada7541b4de2544757b1a765ffab0b3 (diff)
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.
-rw-r--r--source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl5
-rw-r--r--source/blender/gpu/shaders/gpu_shader_material.glsl2
2 files changed, 3 insertions, 4 deletions
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;
}