[Bf-blender-cvs] [f07140940c4] blender2.8: Eevee: Principled: Fix Subsurface input behaviour

Clément Foucault noreply at git.blender.org
Sat Jul 21 18:17:30 CEST 2018


Commit: f07140940c4ef5c062fbf1c2f7d3743b3d1fd29e
Author: Clément Foucault
Date:   Sat Jul 21 18:15:31 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBf07140940c4ef5c062fbf1c2f7d3743b3d1fd29e

Eevee: Principled: Fix Subsurface input behaviour

Match Cycles behaviour of scalling the SSS radius and don't interpolate
between diffuse and SSS result.

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

M	source/blender/gpu/shaders/gpu_shader_material.glsl

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

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
 }



More information about the Bf-blender-cvs mailing list