[Bf-blender-cvs] [e3aff68] cycles_disney_brdf: Added subsurface color parameter to the Disney shader

Pascal Schoen noreply at git.blender.org
Tue Jul 26 16:05:59 CEST 2016


Commit: e3aff6849e06853c56da7bd610210dcab70e6070
Author: Pascal Schoen
Date:   Tue Jul 26 16:05:19 2016 +0200
Branches: cycles_disney_brdf
https://developer.blender.org/rBe3aff6849e06853c56da7bd610210dcab70e6070

Added subsurface color parameter to the Disney shader

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

M	intern/cycles/kernel/shaders/node_disney_bsdf.osl
M	intern/cycles/kernel/svm/svm_closure.h
M	intern/cycles/render/nodes.cpp
M	source/blender/nodes/shader/nodes/node_shader_bsdf_disney.c

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

diff --git a/intern/cycles/kernel/shaders/node_disney_bsdf.osl b/intern/cycles/kernel/shaders/node_disney_bsdf.osl
index b608b73..dce39b2 100644
--- a/intern/cycles/kernel/shaders/node_disney_bsdf.osl
+++ b/intern/cycles/kernel/shaders/node_disney_bsdf.osl
@@ -19,6 +19,7 @@
 
 shader node_disney_bsdf(
 	color BaseColor = color(0.64555527, 0.41514809, 0.01698805),
+	color SubsurfaceColor = color(0.64555527, 0.41514809, 0.01698805),
     float Metallic = 0.0,
     float Subsurface = 0.0,
     float Specular = 0.5,
diff --git a/intern/cycles/kernel/svm/svm_closure.h b/intern/cycles/kernel/svm/svm_closure.h
index 9390806..1a84ee7 100644
--- a/intern/cycles/kernel/svm/svm_closure.h
+++ b/intern/cycles/kernel/svm/svm_closure.h
@@ -187,12 +187,17 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg, ShaderData *sd, float *
 			// get the additional clearcoat normal
 			uint4 data_clearcoat_normal = read_node(kg, offset);
 			float3 CN = stack_valid(data_clearcoat_normal.x) ? stack_load_float3(stack, data_clearcoat_normal.x) : ccl_fetch(sd, N);
+
+			// get the subsurface color
+			uint4 data_subsurface_color = read_node(kg, offset);
+			float3 subsurfaceColor = stack_valid(data_subsurface_color.x) ? stack_load_float3(stack, data_subsurface_color.x) :
+				make_float3(__uint_as_float(data_subsurface_color.y), __uint_as_float(data_subsurface_color.z), __uint_as_float(data_subsurface_color.w));
             
 			ShaderClosure *sc = ccl_fetch_array(sd, closure, ccl_fetch(sd, num_closure));
 			float3 weight = sc->weight * mix_weight;
 
 #ifdef __SUBSURFACE__
-			float3 albedo = baseColor;
+			float3 albedo = subsurfaceColor; //baseColor;
 			float3 subsurf_weight = weight * diffuse_weight;
 			float subsurf_sample_weight = fabsf(average(subsurf_weight));
 
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index a5ea3d4..f75fef1 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -2115,6 +2115,7 @@ DisneyBsdfNode::DisneyBsdfNode()
 	closure = CLOSURE_BSDF_DISNEY_ID;
 
 	add_input("BaseColor", SHADER_SOCKET_COLOR, make_float3(0.646f, 0.415f, 0.017f));
+	add_input("SubsurfaceColor", SHADER_SOCKET_COLOR, make_float3(0.646f, 0.415f, 0.017f));
 	add_input("Metallic", SHADER_SOCKET_FLOAT, 0.0f);
 	add_input("Subsurface", SHADER_SOCKET_FLOAT, 0.0f);
 	add_input("Specular", SHADER_SOCKET_FLOAT, 0.5f);
@@ -2142,6 +2143,7 @@ void DisneyBsdfNode::compile(SVMCompiler& compiler, ShaderInput *metallic, Shade
 	ShaderInput *ior, ShaderInput *transparency, ShaderInput *refr_roughness)
 {
 	ShaderInput *base_color_in = input("BaseColor");
+	ShaderInput *subsurface_color_in = input("SubsurfaceColor");
 	ShaderInput *normal_in = input("Normal");
 	ShaderInput *clearcoat_normal_in = input("ClearcoatNormal");
 	ShaderInput *tangent_in = input("Tangent");
@@ -2188,6 +2190,9 @@ void DisneyBsdfNode::compile(SVMCompiler& compiler, ShaderInput *metallic, Shade
 		__float_as_int(base_color_in->value.x), __float_as_int(base_color_in->value.y), __float_as_int(base_color_in->value.z));
 
 	compiler.add_node(clearcoat_normal_offset, SVM_STACK_INVALID, SVM_STACK_INVALID, SVM_STACK_INVALID);
+
+	compiler.add_node(((subsurface_color_in->link) ? compiler.stack_assign(subsurface_color_in) : SVM_STACK_INVALID),
+		__float_as_int(subsurface_color_in->value.x), __float_as_int(subsurface_color_in->value.y), __float_as_int(subsurface_color_in->value.z));
 }
 
 void DisneyBsdfNode::compile(SVMCompiler& compiler)
diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_disney.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_disney.c
index f80b9a4..2570ad0 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bsdf_disney.c
+++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_disney.c
@@ -31,6 +31,7 @@
 
 static bNodeSocketTemplate sh_node_bsdf_disney_in[] = {
 	{	SOCK_RGBA, 1, N_("BaseColor"),		        0.64555527f, 0.41514809f, 0.01698805f, 1.0f, 0.0f, 1.0f},
+	{	SOCK_RGBA, 1, N_("SubsurfaceColor"),		0.64555527f, 0.41514809f, 0.01698805f, 1.0f, 0.0f, 1.0f},
 	{	SOCK_FLOAT, 1, N_("Metallic"),	            0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
 	{	SOCK_FLOAT, 1, N_("Subsurface"),	        0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
 	{	SOCK_FLOAT, 1, N_("Specular"),	            0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},




More information about the Bf-blender-cvs mailing list