[Bf-blender-cvs] [fac6a9e] compositor-2016: more correct Normal Map node behavior for tangent mapping in Cycles Viewport

Alexander Romanov noreply at git.blender.org
Wed Jun 8 21:50:29 CEST 2016


Commit: fac6a9e8deba92e9a8edd195f9235922b1f42a6c
Author: Alexander Romanov
Date:   Fri May 27 14:25:39 2016 +0300
Branches: compositor-2016
https://developer.blender.org/rBfac6a9e8deba92e9a8edd195f9235922b1f42a6c

more correct Normal Map node behavior for tangent mapping in Cycles Viewport

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

M	source/blender/nodes/shader/nodes/node_shader_normal_map.c

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

diff --git a/source/blender/nodes/shader/nodes/node_shader_normal_map.c b/source/blender/nodes/shader/nodes/node_shader_normal_map.c
index d269560..85e2c77 100644
--- a/source/blender/nodes/shader/nodes/node_shader_normal_map.c
+++ b/source/blender/nodes/shader/nodes/node_shader_normal_map.c
@@ -133,29 +133,33 @@ static int gpu_shader_normal_map(GPUMaterial *mat, bNode *node, bNodeExecData *U
 
 		/* **************** CYCLES ******************** */
 
-		GPU_link(mat, "direction_transform_m4v3", negnorm, GPU_builtin(GPU_INVERSE_VIEW_MATRIX), &negnorm);
-
 		switch (nm->space) {
 			case SHD_NORMAL_MAP_TANGENT:
 				GPU_link(mat, "color_to_normal_new_shading", realnorm, &realnorm);
 				GPU_link(mat, "node_normal_map", GPU_attribute(CD_TANGENT, nm->uv_map), negnorm, realnorm, &realnorm);
-				break;
+				GPU_link(mat, "vec_math_mix", strength, realnorm, GPU_builtin(GPU_VIEW_NORMAL), &out[0].link);
+				/* for uniform scale this is sufficient to match Cycles */
+				GPU_link(mat, "direction_transform_m4v3", out[0].link, GPU_builtin(GPU_INVERSE_VIEW_MATRIX), &out[0].link);
+				GPU_link(mat, "vect_normalize", out[0].link, &out[0].link);
+				return true;
 			case SHD_NORMAL_MAP_OBJECT:
+				GPU_link(mat, "direction_transform_m4v3", negnorm, GPU_builtin(GPU_INVERSE_VIEW_MATRIX), &negnorm);
 				GPU_link(mat, "color_to_normal_new_shading", realnorm, &realnorm);
 				GPU_link(mat, "direction_transform_m4v3", realnorm, GPU_builtin(GPU_OBJECT_MATRIX),  &realnorm);
 				break;
 			case SHD_NORMAL_MAP_BLENDER_OBJECT:
+				GPU_link(mat, "direction_transform_m4v3", negnorm, GPU_builtin(GPU_INVERSE_VIEW_MATRIX), &negnorm);
 				GPU_link(mat, "color_to_blender_normal_new_shading", realnorm, &realnorm);
 				GPU_link(mat, "direction_transform_m4v3", realnorm, GPU_builtin(GPU_OBJECT_MATRIX),  &realnorm);
 				break;
 			case SHD_NORMAL_MAP_WORLD:
+				GPU_link(mat, "direction_transform_m4v3", negnorm, GPU_builtin(GPU_INVERSE_VIEW_MATRIX), &negnorm);
 				GPU_link(mat, "color_to_normal_new_shading", realnorm, &realnorm);
 				break;
 			case SHD_NORMAL_MAP_BLENDER_WORLD:
+				GPU_link(mat, "direction_transform_m4v3", negnorm, GPU_builtin(GPU_INVERSE_VIEW_MATRIX), &negnorm);
 				GPU_link(mat, "color_to_blender_normal_new_shading", realnorm, &realnorm);
 				break;
-
-		GPU_link(mat, "vect_normalize", realnorm, &realnorm);
 		}
 
 	} else {




More information about the Bf-blender-cvs mailing list