From 59643b2fb9dd5564f7406d57116e2574f945defa Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Thu, 6 Nov 2025 21:01:02 +0100 Subject: [PATCH] Add improved local-light shadow raytracing by starting ray from light, not surface --- Source/Shaders/GI/GlobalSurfaceAtlas.shader | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Source/Shaders/GI/GlobalSurfaceAtlas.shader b/Source/Shaders/GI/GlobalSurfaceAtlas.shader index 2efa638f0..387620c5c 100644 --- a/Source/Shaders/GI/GlobalSurfaceAtlas.shader +++ b/Source/Shaders/GI/GlobalSurfaceAtlas.shader @@ -165,11 +165,19 @@ float4 PS_Lighting(AtlasVertexOutput input) : SV_Target BRANCH if (NoL > 0) { +#if RADIAL_LIGHT + // Shot a ray from light to the texel to see if there is any occluder + GlobalSDFTrace trace; + trace.Init(Light.Position, -L, bias, toLightDst); + GlobalSDFHit hit = RayTraceGlobalSDF(GlobalSDF, GlobalSDFTex, GlobalSDFMip, trace, 1.0f); + shadowMask = hit.IsHit() && hit.HitTime < toLightDst - bias * 3 ? LightShadowsStrength : 1; +#else // Shot a ray from texel into the light to see if there is any occluder GlobalSDFTrace trace; trace.Init(gBuffer.WorldPos + gBuffer.Normal * shadowBias, L, bias, toLightDst - bias); GlobalSDFHit hit = RayTraceGlobalSDF(GlobalSDF, GlobalSDFTex, GlobalSDFMip, trace, 2.0f); shadowMask = hit.IsHit() ? LightShadowsStrength : 1; +#endif } else {