[Bf-blender-cvs] [25de685] master: Fix T47288 Vector transform not behaving correctly with camera space and cycles

Alexander Romanov noreply at git.blender.org
Mon Feb 1 16:46:49 CET 2016


Commit: 25de685d3668b6ed10af144ff33e2d44da00df61
Author: Alexander Romanov
Date:   Mon Feb 1 18:46:32 2016 +0300
Branches: master
https://developer.blender.org/rB25de685d3668b6ed10af144ff33e2d44da00df61

Fix T47288 Vector transform not behaving correctly with camera space and cycles

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

M	source/blender/gpu/shaders/gpu_shader_material.glsl
M	source/blender/nodes/shader/nodes/node_shader_vectTransform.c

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

diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index c8ce9f7..4429770 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -384,6 +384,12 @@ void vec_math_negate(vec3 v, out vec3 outv)
 	outv = -v;
 }
 
+void invert_z(vec3 v, out vec3 outv)
+{
+        v.z = -v.z;
+        outv = v;
+}
+
 void normal(vec3 dir, vec3 nor, out vec3 outnor, out float outdot)
 {
 	outnor = nor;
diff --git a/source/blender/nodes/shader/nodes/node_shader_vectTransform.c b/source/blender/nodes/shader/nodes/node_shader_vectTransform.c
index d31a175..35a12d5 100644
--- a/source/blender/nodes/shader/nodes/node_shader_vectTransform.c
+++ b/source/blender/nodes/shader/nodes/node_shader_vectTransform.c
@@ -163,6 +163,8 @@ static int gpu_shader_vect_transform(GPUMaterial *mat, bNode *node, bNodeExecDat
 	const char *ptransform = "point_transform_m4v3";
 	const char *func_name = 0;
 
+	bool new_shading = GPU_material_use_new_shading_nodes(mat);
+
 	NodeShaderVectTransform *nodeprop = (NodeShaderVectTransform *)node->storage;
 
 	if (in[0].hasinput)
@@ -173,8 +175,22 @@ static int gpu_shader_vect_transform(GPUMaterial *mat, bNode *node, bNodeExecDat
 	fromto = get_gpulink_matrix_from_to(nodeprop->convert_from, nodeprop->convert_to);
 
 	func_name = (nodeprop->type == SHD_VECT_TRANSFORM_TYPE_POINT) ? ptransform : vtransform;
-	if (fromto)
-		ret = GPU_link(mat, func_name, inputlink, fromto,  &out[0].link);
+	if (fromto) {
+		if (new_shading) {
+			/* For cycles we have inverted Z */
+			/* TODO: pass here the correct matrices */
+			if (nodeprop->convert_from == SHD_VECT_TRANSFORM_SPACE_CAMERA && nodeprop->convert_to != SHD_VECT_TRANSFORM_SPACE_CAMERA) {
+				ret = GPU_link(mat, "invert_z", inputlink, &inputlink);
+			}
+			ret = GPU_link(mat, func_name, inputlink, fromto,  &out[0].link);
+			if (nodeprop->convert_to == SHD_VECT_TRANSFORM_SPACE_CAMERA && nodeprop->convert_from != SHD_VECT_TRANSFORM_SPACE_CAMERA) {
+				ret = GPU_link(mat, "invert_z", out[0].link, &out[0].link);
+			}
+		}
+		else {
+			ret = GPU_link(mat, func_name, inputlink, fromto,  &out[0].link);
+		}
+	}
 	else
 		ret = GPU_link(mat, "set_rgb", inputlink,  &out[0].link);




More information about the Bf-blender-cvs mailing list