Commit: 86646dab7c455e739e5d648d0857bf30fd81afb9
Author: Clément Foucault
Date:   Fri Mar 15 22:28:18 2019 +0100
Branches: master
https://developer.blender.org/rB86646dab7c455e739e5d648d0857bf30fd81afb9

Fix T62621 object scale changes tangent node output in Eevee

Normal Matrices were not normalized, leading to non-normalized vector
rotations results.

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

M       source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl
M       source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
M       source/blender/draw/intern/draw_manager_exec.c

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

diff --git a/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl 
b/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl
index ef7213cd21e..5438da1c007 100644
--- a/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl
+++ b/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl
@@ -66,8 +66,8 @@ void main()
        gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
        viewPosition = (ModelViewMatrix * vec4(pos, 1.0)).xyz;
        worldPosition = (ModelMatrix * vec4(pos, 1.0)).xyz;
-       worldNormal = normalize(WorldNormalMatrix * nor);
-       viewNormal = normalize(NormalMatrix * nor);
+       worldNormal = WorldNormalMatrix * nor;
+       viewNormal = NormalMatrix * nor;
 #endif
 
        /* Used for planar reflections */
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl 
b/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
index 2583c7c8765..a014135742f 100644
--- a/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
+++ b/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
@@ -24,8 +24,8 @@ void main() {
 #ifdef MESH_SHADER
        viewPosition = (ModelViewMatrix * vec4(pos, 1.0)).xyz;
        worldPosition = (ModelMatrix * vec4(pos, 1.0)).xyz;
-       viewNormal = normalize(NormalMatrix * nor);
-       worldNormal = normalize(WorldNormalMatrix * nor);
+       viewNormal = NormalMatrix * nor;
+       worldNormal = WorldNormalMatrix * nor;
 #ifdef USE_ATTR
        pass_attr(pos);
 #endif
diff --git a/source/blender/draw/intern/draw_manager_exec.c 
b/source/blender/draw/intern/draw_manager_exec.c
index 2e8ba259a31..8e04b9eddfd 100644
--- a/source/blender/draw/intern/draw_manager_exec.c
+++ b/source/blender/draw/intern/draw_manager_exec.c
@@ -803,6 +803,7 @@ static void draw_matrices_model_prepare(DRWCallState *st)
                copy_m3_m4(st->normalview, st->modelview);
                invert_m3(st->normalview);
                transpose_m3(st->normalview);
+               normalize_m3(st->normalview);
        }
        if (st->matflag & DRW_CALL_EYEVEC) {
                /* Used by orthographic wires */
@@ -821,6 +822,7 @@ static void draw_matrices_model_prepare(DRWCallState *st)
                copy_m3_m4(st->normalworld, st->model);
                invert_m3(st->normalworld);
                transpose_m3(st->normalworld);
+               normalize_m3(st->normalworld);
                st->matflag &= ~DRW_CALL_NORMALWORLD;
        }
 }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to