From ddc3da77998ff73a18ddd15b2cf3e2d7e17f6484 Mon Sep 17 00:00:00 2001 From: N8n5h Date: Mon, 26 Apr 2021 16:44:49 -0300 Subject: [PATCH] Fix artifact with point light soft shadow in sm atlas --- Shaders/std/shadows.glsl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Shaders/std/shadows.glsl b/Shaders/std/shadows.glsl index cafde49e..2fea30c1 100755 --- a/Shaders/std/shadows.glsl +++ b/Shaders/std/shadows.glsl @@ -96,6 +96,7 @@ float PCFCube(samplerCubeShadow shadowMapCube, const vec3 lp, vec3 ml, const flo #ifdef _ShadowMapAtlas // transform "out-of-bounds" coordinates to the correct face/coordinate system +// https://www.khronos.org/opengl/wiki/File:CubeMapAxes.png vec2 transformOffsetedUV(const int faceIndex, out int newFaceIndex, vec2 uv) { if (uv.x < 0.0) { if (faceIndex == 0) { // X+ @@ -211,7 +212,7 @@ float PCFFakeCube(sampler2DShadow shadowMap, const vec3 lp, vec3 ml, const float #ifdef _FlipY uvtiled.y = 1.0 - uvtiled.y; // invert Y coordinates for direct3d coordinate system #endif - result += texture(shadowMap, vec3(pointLightTile.z * uvtiled + pointLightTile.xy, compare)); + result += texture(shadowMap, vec3(uvtiled, compare)); uvtiled = transformOffsetedUV(faceIndex, newFaceIndex, vec2(uv + (vec2(-1.0, 1.0) / smSize))); pointLightTile = pointLightDataArray[lightIndex + newFaceIndex];