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 9627afa..e6771f0 100644 Binary files a/src/Engine.Graphics.Vulkan/Shaders/triangle.frag.spv and b/src/Engine.Graphics.Vulkan/Shaders/triangle.frag.spv differ 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) {