[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