[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