From 679518f8e57e436c01972cba927b2e8edb8a003f Mon Sep 17 00:00:00 2001 From: Rachael Alexanderson Date: Tue, 3 May 2022 23:39:40 -0400 Subject: [PATCH] - model normals fix --- wadsrc/static/shaders/glsl/main.fp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/wadsrc/static/shaders/glsl/main.fp b/wadsrc/static/shaders/glsl/main.fp index 15af579a9..a46a09bea 100644 --- a/wadsrc/static/shaders/glsl/main.fp +++ b/wadsrc/static/shaders/glsl/main.fp @@ -5,8 +5,8 @@ layout(location = 1) in vec4 vColor; layout(location = 2) in vec4 pixelpos; layout(location = 3) in vec3 glowdist; layout(location = 4) in vec3 gradientdist; -layout(location = 5) in vec4 vWorldNormal; -layout(location = 6) in vec4 vEyeNormal; +layout(location = 5) in vec4 vWorldNormalOrig; +layout(location = 6) in vec4 vEyeNormalOrig; layout(location = 9) in vec3 vLightmap; #ifdef NO_CLIPDISTANCE_SUPPORT @@ -20,6 +20,9 @@ layout(location=1) out vec4 FragFog; layout(location=2) out vec4 FragNormal; #endif +vec4 vWorldNormal; +vec4 vEyeNormal; + struct Material { vec4 Base; @@ -720,6 +723,15 @@ void main() if (ClipDistanceA.x < 0 || ClipDistanceA.y < 0 || ClipDistanceA.z < 0 || ClipDistanceA.w < 0 || ClipDistanceB.x < 0) discard; #endif + // Flip normal if it is facing away from the camera + vWorldNormal = vWorldNormalOrig; + vEyeNormal = vEyeNormalOrig; + if (dot(uCameraPos.xyz - pixelpos.xyz, vWorldNormal.xyz) < 0) + { + vWorldNormal.xyz = -vWorldNormal.xyz; + vEyeNormal.xyz = -vEyeNormal.xyz; + } + #ifndef LEGACY_USER_SHADER Material material;