[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