From 83936f66fbf471aca8b6887c4e43ff8052806103 Mon Sep 17 00:00:00 2001 From: karl Date: Wed, 18 Nov 2020 16:04:44 +0100 Subject: [PATCH] Use Tangents for correct normal calculation The normal maps are looking good now! --- Shaders/default-fragment.fs | 4 ++-- Shaders/default-vertex.vs | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Shaders/default-fragment.fs b/Shaders/default-fragment.fs index 5b9082e..3770a4a 100644 --- a/Shaders/default-fragment.fs +++ b/Shaders/default-fragment.fs @@ -5,6 +5,7 @@ in mediump vec2 TexCoord; in mediump vec3 Normal; in mediump vec3 FragPos; in mediump vec4 FragPosLightSpace; +in mediump mat3 TBN; layout(binding=0) uniform sampler2D shadowMap; layout(binding=1) uniform sampler2D tex; @@ -46,8 +47,7 @@ void main() // Get normal from normal map in the range [-1,1] mediump vec3 map_normal = normalize(texture(normalmap, TexCoord).rgb * 2.0 - 1.0); - - mediump vec3 final_normal = map_normal; + mediump vec3 final_normal = normalize(TBN * map_normal); // Alpha Scissors if(texColor.a < 0.1) diff --git a/Shaders/default-vertex.vs b/Shaders/default-vertex.vs index 596e0b7..b82a5d0 100644 --- a/Shaders/default-vertex.vs +++ b/Shaders/default-vertex.vs @@ -9,6 +9,7 @@ out vec2 TexCoord; out vec3 Normal; out vec3 FragPos; out vec4 FragPosLightSpace; +out mat3 TBN; uniform mat4 model; uniform mat4 view; @@ -22,4 +23,9 @@ void main() Normal = NORMAL; FragPos = vec3(model * vec4(aPos, 1.0)); FragPosLightSpace = lightSpaceMatrix * vec4(FragPos, 1.0); + + vec3 T = normalize(vec3(model * vec4(TANGENT, 0.0))); + vec3 B = normalize(vec3(model * vec4(BITANGENT, 0.0))); + vec3 N = normalize(vec3(model * vec4(NORMAL, 0.0))); + TBN = mat3(T, B, N); } \ No newline at end of file