From 775d9751ddf8194bb7abd3188acd2f5386e37f38 Mon Sep 17 00:00:00 2001 From: Malin Ejdbo Date: Tue, 9 Mar 2021 11:26:37 +0100 Subject: [PATCH] Apply mesh transform in shader including normals and tangents * Update Ghoul * Loading several models have not yet been updated and will not work with this commit --- ext/ghoul | 2 +- modules/base/shaders/model_vs.glsl | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/ext/ghoul b/ext/ghoul index 2180f32860..5b79e1b455 160000 --- a/ext/ghoul +++ b/ext/ghoul @@ -1 +1 @@ -Subproject commit 2180f32860131b08831f9d4c2be5839b5aa48672 +Subproject commit 5b79e1b455d5df0ec1ea06f0b0abe4553de433d2 diff --git a/modules/base/shaders/model_vs.glsl b/modules/base/shaders/model_vs.glsl index df55892597..1a0e9cac14 100644 --- a/modules/base/shaders/model_vs.glsl +++ b/modules/base/shaders/model_vs.glsl @@ -40,9 +40,11 @@ out mat3 TBN; uniform mat4 modelViewTransform; uniform mat4 projectionTransform; uniform mat4 normalTransform; +uniform mat4 meshTransform; +uniform mat4 meshNormalTransform; void main() { - vs_positionCameraSpace = modelViewTransform * in_position; + vs_positionCameraSpace = modelViewTransform * (meshTransform * in_position); vec4 positionClipSpace = projectionTransform * vs_positionCameraSpace; vec4 positionScreenSpace = z_normalization(positionClipSpace); @@ -50,11 +52,11 @@ void main() { vs_st = in_st; vs_screenSpaceDepth = positionScreenSpace.w; - vs_normalViewSpace = normalize(mat3(normalTransform) * in_normal); + vs_normalViewSpace = normalize(mat3(normalTransform) * (mat3(meshNormalTransform) * in_normal)); // TBN matrix for normal mapping - vec3 T = normalize(vec3(modelViewTransform * vec4(in_tangent, 0.0))); - vec3 N = normalize(vec3(modelViewTransform * vec4(in_normal, 0.0))); + vec3 T = normalize(mat3(normalTransform) * (mat3(meshNormalTransform) * in_tangent)); + vec3 N = normalize(mat3(normalTransform) * (mat3(meshNormalTransform) * in_normal)); // Re-orthogonalize T with respect to N T = normalize(T - dot(T, N) * N);