[Bf-blender-cvs] [86646dab7c4] master: Fix T62621 object scale changes tangent node output in Eevee

Clément Foucault noreply at git.blender.org
Fri Mar 15 22:33:17 CET 2019


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;
 	}
 }



More information about the Bf-blender-cvs mailing list