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-07-21 19:15:31 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-07-21 19:15:31 +0300
commitf07140940c4ef5c062fbf1c2f7d3743b3d1fd29e (patch)
treea99c838c4d17be08706c5b1d1a92520ff4c554b6 /source/blender
parente361e9e99c5b6140b6284e81fa315bdcc48cee58 (diff)
Eevee: Principled: Fix Subsurface input behaviour
Match Cycles behaviour of scalling the SSS radius and don't interpolate between diffuse and SSS result.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/gpu/shaders/gpu_shader_material.glsl21
1 files changed, 12 insertions, 9 deletions
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index 961837f6b16..464851bae21 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -1145,15 +1145,18 @@ void node_bsdf_principled_clearcoat(vec4 base_color, float subsurface, vec3 subs
clearcoat *= 0.25;
clearcoat *= 1.0 - transmission;
+ vec3 mixed_ss_base_color = mix(diffuse, subsurface_color.rgb, subsurface);
+
#ifdef USE_SSS
- diffuse = mix(diffuse, vec3(0.0), subsurface);
+ diffuse = vec3(0.0);
#else
- diffuse = mix(diffuse, subsurface_color.rgb, subsurface);
+ diffuse = mixed_ss_base_color;
#endif
+
f0 = mix(f0, vec3(1.0), transmission);
- float sss_scalef = dot(sss_scale, vec3(1.0 / 3.0));
- eevee_closure_principled(N, diffuse, f0, int(ssr_id), roughness,
+ float sss_scalef = dot(sss_scale, vec3(1.0 / 3.0)) * subsurface;
+ eevee_closure_principled(N, mixed_ss_base_color, f0, int(ssr_id), roughness,
CN, clearcoat, clearcoat_roughness, 1.0, sss_scalef, ior,
out_diff, out_trans, out_spec, out_refr, ssr_spec);
@@ -1177,11 +1180,11 @@ void node_bsdf_principled_clearcoat(vec4 base_color, float subsurface, vec3 subs
#ifdef USE_SSS
result.sss_data.a = sss_scalef;
result.sss_data.rgb = out_diff + out_trans;
-#ifdef USE_SSS_ALBEDO
- result.sss_albedo.rgb = mix(vec3(0.0), subsurface_color.rgb, subsurface);
-#else
- result.sss_data.rgb *= mix(vec3(0.0), subsurface_color.rgb, subsurface);
-#endif
+# ifdef USE_SSS_ALBEDO
+ result.sss_albedo.rgb = mixed_ss_base_color;
+# else
+ result.sss_data.rgb *= mixed_ss_base_color;
+# endif
result.sss_data.rgb *= (1.0 - transmission);
#endif
}