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. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs