[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