[Bf-blender-cvs] [30d41da] cycles_disney_brdf: added the disney brdf as a shader node
Pascal Schoen
noreply at git.blender.org
Mon May 30 09:08:56 CEST 2016
Commit: 30d41da0f0352fad29375a395ffcb9cb7891eeb1
Author: Pascal Schoen
Date: Wed May 4 13:23:07 2016 +0200
Branches: cycles_disney_brdf
https://developer.blender.org/rB30d41da0f0352fad29375a395ffcb9cb7891eeb1
added the disney brdf as a shader node
===================================================================
M intern/cycles/blender/blender_shader.cpp
M intern/cycles/kernel/osl/bsdf_disney_diffuse.cpp
M intern/cycles/kernel/osl/bsdf_disney_specular.cpp
M intern/cycles/kernel/shaders/CMakeLists.txt
M intern/cycles/kernel/shaders/node_disney_bsdf.osl
M intern/cycles/render/nodes.cpp
M intern/cycles/render/nodes.h
M release/scripts/startup/nodeitems_builtins.py
M source/blender/blenkernel/BKE_node.h
M source/blender/blenkernel/intern/node.c
M source/blender/nodes/CMakeLists.txt
M source/blender/nodes/NOD_shader.h
M source/blender/nodes/NOD_static_types.h
M source/blender/nodes/shader/nodes/node_shader_bsdf_disney.c
===================================================================
diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp
index 908cdb0..d2cd930 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -522,9 +522,9 @@ static ShaderNode *add_node(Scene *scene,
}
node = hair;
}
- /*else if(b_node.is_a(&RNA_ShaderNodeBsdfDisney)) {
+ else if(b_node.is_a(&RNA_ShaderNodeBsdfDisney)) {
node = new DisneyBsdfNode();
- }*/
+ }
else if(b_node.is_a(&RNA_ShaderNodeBsdfTranslucent)) {
node = new TranslucentBsdfNode();
}
diff --git a/intern/cycles/kernel/osl/bsdf_disney_diffuse.cpp b/intern/cycles/kernel/osl/bsdf_disney_diffuse.cpp
index b5b5eaf..04a5b79 100644
--- a/intern/cycles/kernel/osl/bsdf_disney_diffuse.cpp
+++ b/intern/cycles/kernel/osl/bsdf_disney_diffuse.cpp
@@ -74,11 +74,9 @@ public:
return bsdf_disney_diffuse_eval_transmit(&sc, omega_out, omega_in, &pdf);
}
- int sample(const float3 &Ng,
- const float3 &omega_out, const float3 &domega_out_dx, const float3 &domega_out_dy,
- float randu, float randv,
- float3 &omega_in, float3 &domega_in_dx, float3 &domega_in_dy,
- float &pdf, float3 &eval) const
+ int sample(const float3 &Ng, const float3 &omega_out, const float3 &domega_out_dx,
+ const float3 &domega_out_dy, float randu, float randv, float3 &omega_in,
+ float3 &domega_in_dx, float3 &domega_in_dy, float &pdf, float3 &eval) const
{
return bsdf_disney_diffuse_sample(&sc, &dp, Ng, omega_out, domega_out_dx, domega_out_dy,
randu, randv, &eval, &omega_in, &domega_in_dx, &domega_in_dy, &pdf);
diff --git a/intern/cycles/kernel/osl/bsdf_disney_specular.cpp b/intern/cycles/kernel/osl/bsdf_disney_specular.cpp
index 1e586cb..df55a7e 100644
--- a/intern/cycles/kernel/osl/bsdf_disney_specular.cpp
+++ b/intern/cycles/kernel/osl/bsdf_disney_specular.cpp
@@ -74,11 +74,9 @@ public:
return bsdf_disney_specular_eval_transmit(&sc, omega_out, omega_in, &pdf);
}
- int sample(const float3 &Ng,
- const float3 &omega_out, const float3 &domega_out_dx, const float3 &domega_out_dy,
- float randu, float randv,
- float3 &omega_in, float3 &domega_in_dx, float3 &domega_in_dy,
- float &pdf, float3 &eval) const
+ int sample(const float3 &Ng, const float3 &omega_out, const float3 &domega_out_dx,
+ const float3 &domega_out_dy, float randu, float randv, float3 &omega_in,
+ float3 &domega_in_dx, float3 &domega_in_dy, float &pdf, float3 &eval) const
{
return bsdf_disney_specular_sample(&sc, &dp, Ng, omega_out, domega_out_dx, domega_out_dy,
randu, randv, &eval, &omega_in, &domega_in_dx, &domega_in_dy, &pdf);
diff --git a/intern/cycles/kernel/shaders/CMakeLists.txt b/intern/cycles/kernel/shaders/CMakeLists.txt
index c6c9e6e..5dab03b 100644
--- a/intern/cycles/kernel/shaders/CMakeLists.txt
+++ b/intern/cycles/kernel/shaders/CMakeLists.txt
@@ -81,7 +81,7 @@ set(SRC_OSL
node_wireframe.osl
node_hair_bsdf.osl
node_uv_map.osl
- #node_disney_bsdf.osl
+ node_disney_bsdf.osl
)
set(SRC_OSL_HEADERS
diff --git a/intern/cycles/kernel/shaders/node_disney_bsdf.osl b/intern/cycles/kernel/shaders/node_disney_bsdf.osl
index 9bd225d..a9ee16e 100644
--- a/intern/cycles/kernel/shaders/node_disney_bsdf.osl
+++ b/intern/cycles/kernel/shaders/node_disney_bsdf.osl
@@ -30,9 +30,23 @@ shader node_disney_bsdf(
float ClearcoatGloss = 1.0,
normal Normal = N,
normal Tangent = normalize(dPdu),
- normal AnisotropicRotation = normal(0, 0, 0),
+ //normal AnisotropicRotation = normal(0, 0, 0),
output closure color BSDF = 0)
{
- BSDF = disney_diffuse(Normal, BaseColor);
+ if (Metallic == 1.0) {
+ BSDF = disney_specular(Normal, Tangent, BaseColor, Metallic, Specular,
+ SpecularTint, Roughness, Anisotropic)
+ + disney_clearcoat(Normal, Clearcoat, ClearcoatGloss);
+ } else if (Specular == 0.0) {
+ BSDF = disney_diffuse(Normal, BaseColor, Subsurface, Roughness,
+ Sheen, SheenTint) * (1.0 - Metallic)
+ + disney_clearcoat(Normal, Clearcoat, ClearcoatGloss);
+ } else {
+ BSDF = disney_diffuse(Normal, BaseColor, Subsurface, Roughness,
+ Sheen, SheenTint) * (1.0 - Metallic)
+ + disney_specular(Normal, Tangent, BaseColor, Metallic, Specular,
+ SpecularTint, Roughness, Anisotropic)
+ + disney_clearcoat(Normal, Clearcoat, ClearcoatGloss);
+ }
}
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index 52daebb..f54b61d 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -2108,10 +2108,32 @@ void DiffuseBsdfNode::compile(OSLCompiler& compiler)
}
/* Disney BSDF Closure */
-/*DisneyBsdfNode::DisneyBsdfNode()
+DisneyBsdfNode::DisneyBsdfNode()
{
closure = CLOSURE_BSDF_DISNEY_DIFFUSE_ID;
-}*/
+
+ add_input("BaseColor", 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);
+ add_input("Roughness", SHADER_SOCKET_FLOAT, 0.5f);
+ add_input("SpecularTint", SHADER_SOCKET_FLOAT, 0.0f);
+ add_input("Anisotropic", SHADER_SOCKET_FLOAT, 0.0f);
+ add_input("Sheen", SHADER_SOCKET_FLOAT, 0.0f);
+ add_input("SheenTint", SHADER_SOCKET_FLOAT, 0.5f);
+ add_input("Clearcoat", SHADER_SOCKET_FLOAT, 0.0f);
+ add_input("ClearcoatGloss", SHADER_SOCKET_FLOAT, 1.0f);
+ add_input("Tangent", SHADER_SOCKET_VECTOR, ShaderInput::TANGENT);
+}
+
+void DisneyBsdfNode::compile(SVMCompiler& compiler)
+{
+}
+
+void DisneyBsdfNode::compile(OSLCompiler& compiler)
+{
+ compiler.add(this, "node_disney_bsdf");
+}
/* Translucent BSDF Closure */
diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h
index adabc3a..626c880 100644
--- a/intern/cycles/render/nodes.h
+++ b/intern/cycles/render/nodes.h
@@ -414,10 +414,11 @@ public:
SHADER_NODE_CLASS(DiffuseBsdfNode)
};
-/*class DisneyBsdfNode : public BsdfNode {
+/* Disney BRDF */
+class DisneyBsdfNode : public BsdfNode {
public:
SHADER_NODE_CLASS(DisneyBsdfNode)
-};*/
+};
class TranslucentBsdfNode : public BsdfNode {
public:
diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py
index 08a6092..d6cf66b 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -218,7 +218,7 @@ shader_node_categories = [
NodeItem("ShaderNodeMixShader"),
NodeItem("ShaderNodeAddShader"),
NodeItem("ShaderNodeBsdfDiffuse", poll=object_shader_nodes_poll),
- #NodeItem("ShaderNodeBsdfDisney", poll=object_shader_nodes_poll),
+ NodeItem("ShaderNodeBsdfDisney", poll=object_shader_nodes_poll),
NodeItem("ShaderNodeBsdfGlossy", poll=object_shader_nodes_poll),
NodeItem("ShaderNodeBsdfTransparent", poll=object_shader_nodes_poll),
NodeItem("ShaderNodeBsdfRefraction", poll=object_shader_nodes_poll),
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index c0f68f5..7a1e6e9 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -787,7 +787,7 @@ struct ShadeResult;
#define SH_NODE_OUTPUT_LINESTYLE 190
#define SH_NODE_UVALONGSTROKE 191
#define SH_NODE_TEX_POINTDENSITY 192
-//#define SH_NODE_BSDF_DISNEY 193
+#define SH_NODE_BSDF_DISNEY 193
/* custom defines options for Material node */
#define SH_NODE_MAT_DIFF 1
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 1a1e1c3..b31a5ef 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -3672,7 +3672,7 @@ static void registerShaderNodes(void)
register_node_type_sh_background();
register_node_type_sh_bsdf_anisotropic();
register_node_type_sh_bsdf_diffuse();
- //register_node_type_sh_bsdf_disney();
+ register_node_type_sh_bsdf_disney();
register_node_type_sh_bsdf_glossy();
register_node_type_sh_bsdf_glass();
register_node_type_sh_bsdf_translucent();
diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index 72f1eeb..f7ad0b8 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -163,7 +163,7 @@ set(SRC
shader/nodes/node_shader_background.c
shader/nodes/node_shader_bsdf_anisotropic.c
shader/nodes/node_shader_bsdf_diffuse.c
- #shader/nodes/node_shader_bsdf_disney.c
+ shader/nodes/node_shader_bsdf_disney.c
shader/nodes/node_shader_bsdf_glass.c
shader/nodes/node_shader_bsdf_glossy.c
shader/nodes/node_shader_bsdf_toon.c
diff --git a/source/blender/nodes/NOD_shader.h b/source/blender/nodes/NOD_shader.h
index 1b330ef..92b7790 100644
--- a/source/blender/nodes/NOD_shader.h
+++ b/source/blender/nodes/NOD_shader.h
@@ -106,7 +106,7 @@ void register_node_type_sh_bsdf_transparent(void);
void register_node_type_sh_bsdf_velvet(void);
void register_node_type_sh_bsdf_toon(void);
void register_node_type_sh_bsdf_anisotropic(void);
-//void register_node_type_sh_bsdf_disney(void);
+void register_node_type_sh_bsdf_disney(void);
void register_node_type_sh_emission(void);
void register_node_type_sh_holdout(void);
void register_node_type_sh_volume_absorption(void);
diff --git a/source/blender/nodes/NOD_static_types.h b/source/blender/nodes/NOD_static_types.h
index 86bc07c..0b43d25 100644
--- a/source/blender/nodes/NOD_static_types.h
+++ b/source/blender/nodes/NOD_static_types.h
@@ -80,7 +80,7 @@ DefNode( ShaderNode, SH_NODE_BACKGROUND, 0, "BA
DefNode( ShaderNode, SH_NODE_HOLDOUT, 0, "HOLDOUT", Holdout, "Holdout", "" )
DefNode( ShaderNode, SH_NODE_BSDF_ANISOTROPIC, def_anisotropic, "BSDF_ANISOTROPIC", BsdfAnisotropic, "Anisotropic BSDF", "" )
DefNode( ShaderNode, SH_NODE_BSDF_DIFFUSE, 0, "BSDF_DIFFUSE", BsdfDiffuse, "Diffuse BSD
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list