Fix T62621 object scale changes tangent node output in Eevee
authorClément Foucault <foucault.clem@gmail.com>
Fri, 15 Mar 2019 21:28:18 +0000 (22:28 +0100)
committerClément Foucault <foucault.clem@gmail.com>
Fri, 15 Mar 2019 21:33:03 +0000 (22:33 +0100)
Normal Matrices were not normalized, leading to non-normalized vector
rotations results.

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

index ef7213c..5438da1 100644 (file)
@@ -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 */
index 2583c7c..a014135 100644 (file)
@@ -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
index 2e8ba25..8e04b9e 100644 (file)
@@ -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;
        }
 }