diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl index b68a1eebdd5..3a04a36cd75 100644 --- a/source/blender/gpu/shaders/gpu_shader_material.glsl +++ b/source/blender/gpu/shaders/gpu_shader_material.glsl @@ -357,6 +357,12 @@ void normal(vec3 dir, vec3 nor, out vec3 outnor, out float outdot) outdot = -dot(dir, nor); } +void normal_new_shading(vec3 dir, vec3 nor, out vec3 outnor, out float outdot) +{ + outnor = normalize(nor); + outdot = dot(normalize(dir), nor); +} + void curves_vec(float fac, vec3 vec, sampler2D curvemap, out vec3 outvec) { outvec.x = texture2D(curvemap, vec2((vec.x + 1.0)*0.5, 0.0)).x; diff --git a/source/blender/nodes/shader/nodes/node_shader_normal.c b/source/blender/nodes/shader/nodes/node_shader_normal.c index 847d2e6a5de..092fc201aa7 100644 --- a/source/blender/nodes/shader/nodes/node_shader_normal.c +++ b/source/blender/nodes/shader/nodes/node_shader_normal.c @@ -61,12 +61,12 @@ static void node_shader_exec_normal(void *UNUSED(data), int UNUSED(thread), bNod static int gpu_shader_normal(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out) { GPUNodeLink *vec = GPU_uniform(out[0].vec); - int ret = GPU_stack_link(mat, "normal", in, out, vec); - if (ret && GPU_material_use_new_shading_nodes(mat)) { - float fac[3] = {-1.0f, -1.0f, -1.0f}; - GPU_link(mat, "math_multiply", GPU_uniform(fac), out[1].link, &out[1].link); + if (GPU_material_use_new_shading_nodes(mat)) { + return GPU_stack_link(mat, "normal_new_shading", in, out, vec); + } + else { + return GPU_stack_link(mat, "normal", in, out, vec); } - return ret; } void register_node_type_sh_normal(void)