[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58781] trunk/blender: Cycles / Vector Transform node:
Thomas Dinges
blender at dingto.org
Wed Jul 31 23:18:24 CEST 2013
Revision: 58781
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58781
Author: dingto
Date: 2013-07-31 21:18:23 +0000 (Wed, 31 Jul 2013)
Log Message:
-----------
Cycles / Vector Transform node:
* Add a note to convert a Vector, Point or Normal between World <=> Camera <=> Object coordinate space.
Documentation: http://wiki.blender.org/index.php/Doc:2.6/Manual/Render/Cycles/Nodes/More#Vector_Transform
Part of my GSoC 2013 project, SVN merge of r57599, r57670, r57918, r57919, r58245 and r58775.
Revision Links:
--------------
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57599
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57670
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57918
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57919
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58245
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58775
Modified Paths:
--------------
trunk/blender/intern/cycles/blender/blender_shader.cpp
trunk/blender/intern/cycles/kernel/CMakeLists.txt
trunk/blender/intern/cycles/kernel/kernel_object.h
trunk/blender/intern/cycles/kernel/shaders/CMakeLists.txt
trunk/blender/intern/cycles/kernel/svm/svm.h
trunk/blender/intern/cycles/kernel/svm/svm_types.h
trunk/blender/intern/cycles/render/nodes.cpp
trunk/blender/intern/cycles/render/nodes.h
trunk/blender/release/scripts/startup/nodeitems_builtins.py
trunk/blender/source/blender/blenkernel/BKE_node.h
trunk/blender/source/blender/blenkernel/intern/node.c
trunk/blender/source/blender/editors/space_node/drawnode.c
trunk/blender/source/blender/makesdna/DNA_node_types.h
trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
trunk/blender/source/blender/nodes/CMakeLists.txt
trunk/blender/source/blender/nodes/NOD_shader.h
trunk/blender/source/blender/nodes/NOD_static_types.h
Added Paths:
-----------
trunk/blender/intern/cycles/kernel/shaders/node_vector_transform.osl
trunk/blender/intern/cycles/kernel/svm/svm_vector_transform.h
trunk/blender/source/blender/nodes/shader/nodes/node_shader_vectTransform.c
Property Changed:
----------------
trunk/blender/
Property changes on: trunk/blender
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/ge_dev:58091-58422
/branches/ge_harmony:42255,42279-42282,42286,42302,42338,42349,42616,42620,42698-42699,42739,42753,42773-42774,42832,44568,44597-44598,44793-44794
/branches/soc-2011-cucumber:37517,38166-38167,38177,38179-38180,38187,38242,38384,38387,38403-38404,38407,38968,38970,38973,39045,40845,42997-42998,43439
/branches/soc-2011-tomato:42376,42378-42379,42383,42385,42395,42397-42400,42407,42411,42418,42443-42444,42446,42467,42472,42486,42650-42652,42654-42655,42709-42710,42733-42734,42801,43872,44130,44141,44147-44149,44151-44152,44229-44230,45623-45625,46037,48089,48092,48551-48552,48679,48790,48792-48793,49076,49087,49292,49294,49466,49894,50052,50126,52854-52856,54573
/branches/soc-2013-depsgraph_mt:57516
/branches/soc-2013-dingto:57424,57487,57507,57525,58091,58253,58772,58774
/tags/blender-2.67b-release/blender:57122
+ /branches/ge_dev:58091-58422
/branches/ge_harmony:42255,42279-42282,42286,42302,42338,42349,42616,42620,42698-42699,42739,42753,42773-42774,42832,44568,44597-44598,44793-44794
/branches/soc-2011-cucumber:37517,38166-38167,38177,38179-38180,38187,38242,38384,38387,38403-38404,38407,38968,38970,38973,39045,40845,42997-42998,43439
/branches/soc-2011-tomato:42376,42378-42379,42383,42385,42395,42397-42400,42407,42411,42418,42443-42444,42446,42467,42472,42486,42650-42652,42654-42655,42709-42710,42733-42734,42801,43872,44130,44141,44147-44149,44151-44152,44229-44230,45623-45625,46037,48089,48092,48551-48552,48679,48790,48792-48793,49076,49087,49292,49294,49466,49894,50052,50126,52854-52856,54573
/branches/soc-2013-depsgraph_mt:57516
/branches/soc-2013-dingto:57424,57487,57507,57525,57599,57670,57918-57919,58091,58245,58253,58772,58774-58775
/tags/blender-2.67b-release/blender:57122
Modified: trunk/blender/intern/cycles/blender/blender_shader.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_shader.cpp 2013-07-31 20:56:32 UTC (rev 58780)
+++ trunk/blender/intern/cycles/blender/blender_shader.cpp 2013-07-31 21:18:23 UTC (rev 58781)
@@ -250,6 +250,14 @@
vmath->type = VectorMathNode::type_enum[b_vector_math_node.operation()];
node = vmath;
}
+ else if (b_node.is_a(&RNA_ShaderNodeVectorTransform)) {
+ BL::ShaderNodeVectorTransform b_vector_transform_node(b_node);
+ VectorTransformNode *vtransform = new VectorTransformNode();
+ vtransform->type = VectorTransformNode::type_enum[b_vector_transform_node.type()];
+ vtransform->convert_from = VectorTransformNode::convert_space_enum[b_vector_transform_node.convert_from()];
+ vtransform->convert_to = VectorTransformNode::convert_space_enum[b_vector_transform_node.convert_to()];
+ node = vtransform;
+ }
else if (b_node.is_a(&RNA_ShaderNodeNormal)) {
BL::Node::outputs_iterator out_it;
b_node.outputs.begin(out_it);
Modified: trunk/blender/intern/cycles/kernel/CMakeLists.txt
===================================================================
--- trunk/blender/intern/cycles/kernel/CMakeLists.txt 2013-07-31 20:56:32 UTC (rev 58780)
+++ trunk/blender/intern/cycles/kernel/CMakeLists.txt 2013-07-31 21:18:23 UTC (rev 58781)
@@ -105,6 +105,7 @@
svm/svm_texture.h
svm/svm_types.h
svm/svm_value.h
+ svm/svm_vector_transform.h
svm/svm_voronoi.h
svm/svm_wave.h
)
Modified: trunk/blender/intern/cycles/kernel/kernel_object.h
===================================================================
--- trunk/blender/intern/cycles/kernel/kernel_object.h 2013-07-31 20:56:32 UTC (rev 58780)
+++ trunk/blender/intern/cycles/kernel/kernel_object.h 2013-07-31 21:18:23 UTC (rev 58781)
@@ -154,6 +154,16 @@
#endif
}
+__device_inline void object_inverse_dir_transform(KernelGlobals *kg, ShaderData *sd, float3 *D)
+{
+#ifdef __OBJECT_MOTION__
+ *D = transform_direction(&sd->ob_itfm, *D);
+#else
+ Transform tfm = object_fetch_transform(kg, sd->object, OBJECT_INVERSE_TRANSFORM);
+ *D = transform_direction(&tfm, *D);
+#endif
+}
+
__device_inline float3 object_location(KernelGlobals *kg, ShaderData *sd)
{
if(sd->object == ~0)
Modified: trunk/blender/intern/cycles/kernel/shaders/CMakeLists.txt
===================================================================
--- trunk/blender/intern/cycles/kernel/shaders/CMakeLists.txt 2013-07-31 20:56:32 UTC (rev 58780)
+++ trunk/blender/intern/cycles/kernel/shaders/CMakeLists.txt 2013-07-31 21:18:23 UTC (rev 58781)
@@ -64,6 +64,7 @@
node_value.osl
node_vector_curves.osl
node_vector_math.osl
+ node_vector_transform.osl
node_velvet_bsdf.osl
node_voronoi_texture.osl
node_ward_bsdf.osl
Copied: trunk/blender/intern/cycles/kernel/shaders/node_vector_transform.osl (from rev 57670, branches/soc-2013-dingto/intern/cycles/kernel/shaders/node_vector_transform.osl)
===================================================================
--- trunk/blender/intern/cycles/kernel/shaders/node_vector_transform.osl (rev 0)
+++ trunk/blender/intern/cycles/kernel/shaders/node_vector_transform.osl 2013-07-31 21:18:23 UTC (rev 58781)
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2013, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "stdosl.h"
+
+shader node_vector_transform(
+ string type = "Vector",
+ string convert_from = "world",
+ string convert_to = "object",
+ vector VectorIn = vector(0.0, 0.0, 0.0),
+ output vector VectorOut = vector(0.0, 0.0, 0.0))
+{
+ if (type == "Vector" || type == "Normal") {
+ VectorOut = transform(convert_from, convert_to, VectorIn);
+ if (type == "Normal")
+ VectorOut = normalize(VectorOut);
+ }
+ else if (type == "Point") {
+ point Point = (point)VectorIn;
+ VectorOut = transform(convert_from, convert_to, Point);
+ }
+}
+
Modified: trunk/blender/intern/cycles/kernel/svm/svm.h
===================================================================
--- trunk/blender/intern/cycles/kernel/svm/svm.h 2013-07-31 20:56:32 UTC (rev 58780)
+++ trunk/blender/intern/cycles/kernel/svm/svm.h 2013-07-31 21:18:23 UTC (rev 58781)
@@ -177,6 +177,7 @@
#include "svm_voronoi.h"
#include "svm_checker.h"
#include "svm_brick.h"
+#include "svm_vector_transform.h"
CCL_NAMESPACE_BEGIN
@@ -382,6 +383,9 @@
case NODE_VECTOR_MATH:
svm_node_vector_math(kg, sd, stack, node.y, node.z, node.w, &offset);
break;
+ case NODE_VECTOR_TRANSFORM:
+ svm_node_vector_transform(kg, sd, stack, node);
+ break;
case NODE_NORMAL:
svm_node_normal(kg, sd, stack, node.y, node.z, node.w, &offset);
break;
Modified: trunk/blender/intern/cycles/kernel/svm/svm_types.h
===================================================================
--- trunk/blender/intern/cycles/kernel/svm/svm_types.h 2013-07-31 20:56:32 UTC (rev 58780)
+++ trunk/blender/intern/cycles/kernel/svm/svm_types.h 2013-07-31 21:18:23 UTC (rev 58781)
@@ -68,6 +68,7 @@
NODE_SET_BUMP,
NODE_MATH,
NODE_VECTOR_MATH,
+ NODE_VECTOR_TRANSFORM,
NODE_MAPPING,
NODE_TEX_COORD,
NODE_TEX_COORD_BUMP_DX,
@@ -227,6 +228,18 @@
NODE_VECTOR_MATH_NORMALIZE
} NodeVectorMath;
+typedef enum NodeVectorTransformType {
+ NODE_VECTOR_TRANSFORM_TYPE_VECTOR,
+ NODE_VECTOR_TRANSFORM_TYPE_POINT,
+ NODE_VECTOR_TRANSFORM_TYPE_NORMAL
+} NodeVectorTransformType;
+
+typedef enum NodeVectorTransformConvertSpace {
+ NODE_VECTOR_TRANSFORM_CONVERT_SPACE_WORLD,
+ NODE_VECTOR_TRANSFORM_CONVERT_SPACE_OBJECT,
+ NODE_VECTOR_TRANSFORM_CONVERT_SPACE_CAMERA
+} NodeVectorTransformConvertSpace;
+
typedef enum NodeConvert {
NODE_CONVERT_FV,
NODE_CONVERT_FI,
Copied: trunk/blender/intern/cycles/kernel/svm/svm_vector_transform.h (from rev 57670, branches/soc-2013-dingto/intern/cycles/kernel/svm/svm_vector_transform.h)
===================================================================
--- trunk/blender/intern/cycles/kernel/svm/svm_vector_transform.h (rev 0)
+++ trunk/blender/intern/cycles/kernel/svm/svm_vector_transform.h 2013-07-31 21:18:23 UTC (rev 58781)
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2013, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+CCL_NAMESPACE_BEGIN
+
+/* Vector Transform */
+
+__device void svm_node_vector_transform(KernelGlobals *kg, ShaderData *sd, float *stack, uint4 node)
+{
+ uint itype, ifrom, ito;
+ uint vector_in, vector_out;
+
+ decode_node_uchar4(node.y, &itype, &ifrom, &ito, NULL);
+ decode_node_uchar4(node.z, &vector_in, &vector_out, NULL, NULL);
+
+ float3 in = stack_load_float3(stack, vector_in);
+
+ NodeVectorTransformType type = (NodeVectorTransformType)itype;
+ NodeVectorTransformConvertSpace from = (NodeVectorTransformConvertSpace)ifrom;
+ NodeVectorTransformConvertSpace to = (NodeVectorTransformConvertSpace)ito;
+
+ Transform tfm;
+ int is_object = (sd->object != ~0);
+ int is_direction = (type == NODE_VECTOR_TRANSFORM_TYPE_VECTOR || type == NODE_VECTOR_TRANSFORM_TYPE_NORMAL);
+
+ /* From world */
+ if(from == NODE_VECTOR_TRANSFORM_CONVERT_SPACE_WORLD) {
+ if(to == NODE_VECTOR_TRANSFORM_CONVERT_SPACE_CAMERA) {
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list