[Bf-blender-cvs] [3de3987] master: Cycles: Add dedicated nodes to split/combine vectors.

Thomas Dinges noreply at git.blender.org
Fri Jun 13 21:59:49 CEST 2014


Commit: 3de3987ea190415d0d088c3917b45f44afb43840
Author: Thomas Dinges
Date:   Fri Jun 13 21:44:48 2014 +0200
https://developer.blender.org/rB3de3987ea190415d0d088c3917b45f44afb43840

Cycles: Add dedicated nodes to split/combine vectors.

This was already possible via the RGB nodes, but that seems weird.

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

M	intern/cycles/app/cycles_xml.cpp
M	intern/cycles/blender/blender_shader.cpp
M	intern/cycles/kernel/CMakeLists.txt
M	intern/cycles/kernel/shaders/CMakeLists.txt
A	intern/cycles/kernel/shaders/node_combine_xyz.osl
A	intern/cycles/kernel/shaders/node_separate_xyz.osl
M	intern/cycles/kernel/svm/svm.h
A	intern/cycles/kernel/svm/svm_sepcomb_xyz.h
M	intern/cycles/kernel/svm/svm_types.h
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
A	source/blender/nodes/shader/nodes/node_shader_sepcombXYZ.c

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

diff --git a/intern/cycles/app/cycles_xml.cpp b/intern/cycles/app/cycles_xml.cpp
index de554fb..f50a952 100644
--- a/intern/cycles/app/cycles_xml.cpp
+++ b/intern/cycles/app/cycles_xml.cpp
@@ -633,6 +633,12 @@ static void xml_read_shader_graph(const XMLReadState& state, Shader *shader, pug
 		else if(string_iequals(node.name(), "separate_hsv")) {
 			snode = new SeparateHSVNode();
 		}
+		else if(string_iequals(node.name(), "combine_xyz")) {
+			snode = new CombineHSVNode();
+		}
+		else if(string_iequals(node.name(), "separate_xyz")) {
+			snode = new SeparateHSVNode();
+		}
 		else if(string_iequals(node.name(), "hsv")) {
 			snode = new HSVNode();
 		}
diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp
index 379e27c..bce2365 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -244,6 +244,12 @@ static ShaderNode *add_node(Scene *scene, BL::BlendData b_data, BL::Scene b_scen
 	else if (b_node.is_a(&RNA_ShaderNodeCombineHSV)) {
 		node = new CombineHSVNode();
 	}
+	else if (b_node.is_a(&RNA_ShaderNodeSeparateXYZ)) {
+		node = new SeparateXYZNode();
+	}
+	else if (b_node.is_a(&RNA_ShaderNodeCombineXYZ)) {
+		node = new CombineXYZNode();
+	}
 	else if (b_node.is_a(&RNA_ShaderNodeHueSaturation)) {
 		node = new HSVNode();
 	}
diff --git a/intern/cycles/kernel/CMakeLists.txt b/intern/cycles/kernel/CMakeLists.txt
index 994fba7..62d56b4 100644
--- a/intern/cycles/kernel/CMakeLists.txt
+++ b/intern/cycles/kernel/CMakeLists.txt
@@ -97,6 +97,7 @@ set(SRC_SVM_HEADERS
 	svm/svm_ramp.h
 	svm/svm_sepcomb_rgb.h
 	svm/svm_sepcomb_hsv.h
+	svm/svm_sepcomb_xyz.h
 	svm/svm_sky.h
 	svm/svm_tex_coord.h
 	svm/svm_texture.h
diff --git a/intern/cycles/kernel/shaders/CMakeLists.txt b/intern/cycles/kernel/shaders/CMakeLists.txt
index 5518d65..b164c2a 100644
--- a/intern/cycles/kernel/shaders/CMakeLists.txt
+++ b/intern/cycles/kernel/shaders/CMakeLists.txt
@@ -13,6 +13,7 @@ set(SRC_OSL
 	node_checker_texture.osl
 	node_combine_rgb.osl
 	node_combine_hsv.osl
+	node_combine_xyz.osl
 	node_convert_from_color.osl
 	node_convert_from_float.osl
 	node_convert_from_int.osl
@@ -57,6 +58,7 @@ set(SRC_OSL
 	node_rgb_ramp.osl
 	node_separate_rgb.osl
 	node_separate_hsv.osl
+	node_separate_xyz.osl
 	node_set_normal.osl
 	node_sky_texture.osl
 	node_subsurface_scattering.osl
diff --git a/intern/cycles/kernel/shaders/node_combine_xyz.osl b/intern/cycles/kernel/shaders/node_combine_xyz.osl
new file mode 100644
index 0000000..933dee5
--- /dev/null
+++ b/intern/cycles/kernel/shaders/node_combine_xyz.osl
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2011-2014 Blender Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+#include "stdosl.h"
+
+shader node_combine_xyz(
+	float X = 0.0,
+	float Y = 0.0,
+	float Z = 0.0,
+	output vector Vector = 0.8)
+{
+	Vector = vector(X, Y, Z);
+}
+
diff --git a/intern/cycles/kernel/shaders/node_separate_xyz.osl b/intern/cycles/kernel/shaders/node_separate_xyz.osl
new file mode 100644
index 0000000..63725cb
--- /dev/null
+++ b/intern/cycles/kernel/shaders/node_separate_xyz.osl
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2011-2013 Blender Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+#include "stdosl.h"
+
+shader node_separate_xyz(
+	vector Vector = 0.8,
+	output float X = 0.0,
+	output float Y = 0.0,
+	output float Z = 0.0)
+{
+	X = Vector[0];
+	Y = Vector[1];
+	Z = Vector[2];
+}
diff --git a/intern/cycles/kernel/svm/svm.h b/intern/cycles/kernel/svm/svm.h
index 6d556a6..acdc518 100644
--- a/intern/cycles/kernel/svm/svm.h
+++ b/intern/cycles/kernel/svm/svm.h
@@ -169,6 +169,7 @@ CCL_NAMESPACE_END
 #include "svm_ramp.h"
 #include "svm_sepcomb_rgb.h"
 #include "svm_sepcomb_hsv.h"
+#include "svm_sepcomb_xyz.h"
 #include "svm_musgrave.h"
 #include "svm_sky.h"
 #include "svm_tex_coord.h"
@@ -333,6 +334,12 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, Shade
 			case NODE_COMBINE_RGB:
 				svm_node_combine_rgb(sd, stack, node.y, node.z, node.w);
 				break;
+			case NODE_SEPARATE_XYZ:
+				svm_node_separate_xyz(sd, stack, node.y, node.z, node.w);
+				break;
+			case NODE_COMBINE_XYZ:
+				svm_node_combine_xyz(sd, stack, node.y, node.z, node.w);
+				break;
 			case NODE_SEPARATE_HSV:
 				svm_node_separate_hsv(kg, sd, stack, node.y, node.z, node.w, &offset);
 				break;
diff --git a/intern/cycles/kernel/svm/svm_sepcomb_xyz.h b/intern/cycles/kernel/svm/svm_sepcomb_xyz.h
new file mode 100644
index 0000000..f9f9664
--- /dev/null
+++ b/intern/cycles/kernel/svm/svm_sepcomb_xyz.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2011-2014 Blender Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+CCL_NAMESPACE_BEGIN
+
+ccl_device void svm_node_combine_xyz(ShaderData *sd, float *stack, uint in_offset, uint vector_index, uint out_offset)
+{
+	float vector = stack_load_float(stack, in_offset);
+
+	if (stack_valid(out_offset))
+		stack_store_float(stack, out_offset+vector_index, vector);
+}
+
+ccl_device void svm_node_separate_xyz(ShaderData *sd, float *stack, uint ivector_offset, uint vector_index, uint out_offset)
+{
+	float3 vector = stack_load_float3(stack, ivector_offset);
+
+	if (stack_valid(out_offset)) {
+		if (vector_index == 0)
+			stack_store_float(stack, out_offset, vector.x);
+		else if (vector_index == 1)
+			stack_store_float(stack, out_offset, vector.y);
+		else
+			stack_store_float(stack, out_offset, vector.z);
+	}
+}
+
+CCL_NAMESPACE_END
+
diff --git a/intern/cycles/kernel/svm/svm_types.h b/intern/cycles/kernel/svm/svm_types.h
index fda035f..29a0d26 100644
--- a/intern/cycles/kernel/svm/svm_types.h
+++ b/intern/cycles/kernel/svm/svm_types.h
@@ -80,6 +80,8 @@ typedef enum NodeType {
 	NODE_CLOSURE_VOLUME,
 	NODE_SEPARATE_RGB,
 	NODE_COMBINE_RGB,
+	NODE_SEPARATE_XYZ,
+	NODE_COMBINE_XYZ,
 	NODE_SEPARATE_HSV,
 	NODE_COMBINE_HSV,
 	NODE_HSV,
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index 2d7f9ea..d49a719 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -3056,6 +3056,40 @@ void CombineRGBNode::compile(OSLCompiler& compiler)
 	compiler.add(this, "node_combine_rgb");
 }
 
+/* Combine XYZ */
+CombineXYZNode::CombineXYZNode()
+: ShaderNode("combine_xyz")
+{
+	add_input("X", SHADER_SOCKET_FLOAT);
+	add_input("Y", SHADER_SOCKET_FLOAT);
+	add_input("Z", SHADER_SOCKET_FLOAT);
+	add_output("Vector", SHADER_SOCKET_VECTOR);
+}
+
+void CombineXYZNode::compile(SVMCompiler& compiler)
+{
+	ShaderInput *x_in = input("X");
+	ShaderInput *y_in = input("Y");
+	ShaderInput *z_in = input("Z");
+	ShaderOutput *vector_out = output("Vector");
+
+	compiler.stack_assign(vector_out);
+
+	compiler.stack_assign(x_in);
+	compiler.add_node(NODE_COMBINE_XYZ, x_in->stack_offset, 0, vector_out->stack_offset);
+
+	compiler.stack_assign(y_in);
+	compiler.add_node(NODE_COMBINE_XYZ, y_in->stack_offset, 1, vector_out->stack_offset);
+
+	compiler.stack_assign(z_in);
+	compiler.add_node(NODE_COMBINE_XYZ, z_in->stack_offset, 2, vector_out->stack_offset);
+}
+
+void CombineXYZNode::compile(OSLCompiler& compiler)
+{
+	compiler.add(this, "node_combine_xyz");
+}
+
 /* Combine HSV */
 CombineHSVNode::CombineHSVNode()
 : ShaderNode("combine_hsv")
@@ -3180,6 +3214,40 @@ void SeparateRGBNode::compile(OSLCompiler& compiler)
 	compiler.add(this, "node_separate_rgb");
 }
 
+/* Separate XYZ */
+SeparateXYZNode::SeparateXYZNode()
+: ShaderNode("separate_xyz")
+{
+	add_input("Vector", SHADER_SOCKET_VECTOR);
+	add_output("X", SHADER_SOCKET_FLOAT);
+	add_output("Y", SHADER_SOCKET_FLOAT);
+	add_output("Z", SHADER_SOCKET_FLOAT);
+}
+
+void SeparateXYZNode::compile(SVMCompiler& compiler)
+{
+	ShaderInput *vector_in = input("Vector");
+	ShaderOutput *x_out = output("X");
+	ShaderOutput *y_out = output("Y");
+	ShaderOutput *z_out = output("Z");
+
+	compiler.stack_assign(vector_in);
+
+	compiler.stack_assign(x_out);
+	compiler.add_node(NODE_SEPARATE_XYZ, vector_in->stack_offset, 0, x_out->stack_offset);
+
+	compiler.stack_assign(y_out);
+	compiler.add_node(NODE_SEPARATE_XYZ, vector_in->stack_offset, 1, y_out->stack_offset);
+
+	compiler.stack_assign(z_out);
+	compiler.add_node(NODE_SEPARATE_XYZ, vector_in->stack_offset, 2, z_out->stack_offset);
+}
+
+void SeparateXYZNode::compile(OSLCompiler& compiler)
+{
+	compiler.add(this, "node_separate_xyz");
+}
+
 /* Separate HSV */
 SeparateHSVNode::SeparateHSVNode()
 : ShaderNode("separate_hsv")
diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h
index 8bdce99..cf89bda 100644
--- a/intern/cycles/render/nodes.h
+++ b/intern/cycles/render/nodes.h
@@ -451,6 +451,11 @@ public:
 	SHADER_NODE_CLASS(CombineHSVNode)
 };
 
+class CombineX

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list