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

Reply via email to