diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2019-03-16 00:28:18 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2019-03-16 00:33:03 +0300 |
commit | 86646dab7c455e739e5d648d0857bf30fd81afb9 (patch) | |
tree | 143b53b52edc9c43be771a0f6320f9b86b6ef237 /source | |
parent | 1d6009d7aab8a29a084abaee3ed37fac1f3e800c (diff) |
Fix T62621 object scale changes tangent node output in Eevee
Normal Matrices were not normalized, leading to non-normalized vector
rotations results.
Diffstat (limited to 'source')
3 files changed, 6 insertions, 4 deletions
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; } } |