From 23b38f8f17886a183e6c45a0743a897b47faa1aa Mon Sep 17 00:00:00 2001 From: emil28092005 Date: Thu, 18 Jun 2026 21:38:48 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20increase=20shadow=20bias=20=E2=80=94=20s?= =?UTF-8?q?lope-dependent=20+=20larger=20depth=20bias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fragment shader: bias = 0.3 + 0.5 * (1 - NdotL) — slope-dependent Grazing angles get larger bias to prevent acne on cube faces - vkCmdSetDepthBias: 2.5/0/3.5 (was 1.25/0/1.75) — more aggressive polygon offset for shadow map rendering - Early exit tolerance reduced from 4x to 3x bias --- .../Shaders/triangle.frag | 6 +++--- .../Shaders/triangle.frag.spv | Bin 13664 -> 13820 bytes src/Engine.Graphics.Vulkan/VulkanRenderer.cs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Engine.Graphics.Vulkan/Shaders/triangle.frag b/src/Engine.Graphics.Vulkan/Shaders/triangle.frag index df0dba3..ab18a64 100644 --- a/src/Engine.Graphics.Vulkan/Shaders/triangle.frag +++ b/src/Engine.Graphics.Vulkan/Shaders/triangle.frag @@ -103,12 +103,12 @@ float calcShadow(vec3 worldPos, vec3 lightPos, vec3 N, vec3 L) // Base shadow check (center sample) float closestDepth = texture(shadowCube, dirNorm).r; float mappedDepth = closestDepth * FAR_PLANE; - float bias = 0.15; + float bias = 0.3 + 0.5 * (1.0 - max(dot(N, L), 0.0)); float baseResult = dist - bias < mappedDepth ? 1.0 : 0.0; // If clearly lit or clearly shadowed, skip PCF - if (dist - bias * 4.0 < mappedDepth) return 1.0; - if (dist + bias * 4.0 > mappedDepth && baseResult > 0.5) return 1.0; + if (dist - bias * 3.0 < mappedDepth) return 1.0; + if (dist + bias * 3.0 > mappedDepth && baseResult > 0.5) return 1.0; // Poisson disk PCF — 16 samples float shadow = 0.0; diff --git a/src/Engine.Graphics.Vulkan/Shaders/triangle.frag.spv b/src/Engine.Graphics.Vulkan/Shaders/triangle.frag.spv index 9627afa26666d085015c6346d9cd8afea86e25c9..e6771f0b3c5f2320b6c5a4871a51e248f8135bd6 100644 GIT binary patch literal 13820 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 N?*i-ZnHKv_^Z#v$Hp~D3 literal 13664 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 Ko@ueq5&r=!3N8Eq diff --git a/src/Engine.Graphics.Vulkan/VulkanRenderer.cs b/src/Engine.Graphics.Vulkan/VulkanRenderer.cs index b8ad9c2..402b1ab 100644 --- a/src/Engine.Graphics.Vulkan/VulkanRenderer.cs +++ b/src/Engine.Graphics.Vulkan/VulkanRenderer.cs @@ -255,7 +255,7 @@ internal sealed unsafe class VulkanRenderer : IRenderer, Engine.Graphics.IScreen }; Vk.vkCmdSetScissor(cmd, 0, 1, &shadowScissor); - Vk.vkCmdSetDepthBias(cmd, 1.25f, 0.0f, 1.75f); + Vk.vkCmdSetDepthBias(cmd, 2.5f, 0.0f, 3.5f); foreach (var dc in drawCalls) {