diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c index f3386ec3a65..513dfad9d8a 100644 --- a/source/blender/gpu/intern/gpu_codegen.c +++ b/source/blender/gpu/intern/gpu_codegen.c @@ -1001,7 +1001,7 @@ static char *code_generate_vertex(ListBase *nodes, const char *vert_code, bool u if (input->source == GPU_SOURCE_ATTR && input->attr_first) { if (input->attr_type == CD_TANGENT) { /* silly exception */ BLI_dynstr_appendf( - ds, "\tvar%d%s.xyz = normalize(NormalMatrix * att%d.xyz);\n", + ds, "\tvar%d%s.xyz = NormalMatrix * att%d.xyz;\n", input->attr_id, use_geom ? "g" : "", input->attr_id); BLI_dynstr_appendf( ds, "\tvar%d%s.w = att%d.w;\n", diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl index d91b6b77b86..5625cbb69c7 100644 --- a/source/blender/gpu/shaders/gpu_shader_material.glsl +++ b/source/blender/gpu/shaders/gpu_shader_material.glsl @@ -2967,6 +2967,12 @@ void node_object_info(mat4 obmat, vec3 info, out vec3 location, out float object void node_normal_map(vec4 tangent, vec3 normal, vec3 texnormal, out vec3 outnormal) { + if (all(equal(tangent, vec4(0.0, 0.0, 0.0, 1.0)))) { + outnormal = normal; + return; + } + + tangent.xyz = normalize(tangent.xyz); vec3 B = tangent.w * cross(normal, tangent.xyz); outnormal = texnormal.x * tangent.xyz + texnormal.y * B + texnormal.z * normal;