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},

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to