fix: 影子中镜面高光残留导致"影子比天空亮"

掠射角下 GGX spec 分母 (4·NdotV·NdotL) 变小,HDR 值可达 8+;
阴影只把它乘 0.3,30% 的刺眼白仍比天空亮——观感即"影子发白"。

- spec 项按 shade 重映射(0.3→0,1.0→1):光源被遮挡,其镜面像
  应完全消失;diffuse 保留 0.3 作间接近似
- ShadowPass 改正面剔除渲阴影图(标准 acne 治法):封闭网格只写
  背面深度,正面深度天然比 ref 大一个表面厚度,从根上消自阴影
  acne;代价是单面薄片在光背面时漏写(plane 单面朝上不受影响)
This commit is contained in:
2026-09-24 12:10:15 +08:00
parent 42fd9d5f30
commit d3c3d0cdd9
2 changed files with 14 additions and 3 deletions
+4 -1
View File
@@ -55,7 +55,10 @@ namespace Engine::Passes
cmd.setDepthBiasEnable(VK_TRUE);
cmd.setDepthBias(0.006f, 0.0f, 0.006f);
cmd.setPolygonModeEXT(vk::PolygonMode::eFill);
cmd.setCullMode(vk::CullModeFlagBits::eNone);
// 正面剔除渲染阴影图:封闭网格只写背面深度,正面深度比
// ref 恒大一个表面厚度 → 从根上消除自阴影 acne,bias 只需
// 兜底数值噪声。代价:单面薄片在光背面时会漏写(可接受)
cmd.setCullMode(vk::CullModeFlagBits::eFront);
cmd.setFrontFace(vk::FrontFace::eCounterClockwise);
cmd.setPrimitiveTopology(vk::PrimitiveTopology::eTriangleList);
cmd.setPrimitiveRestartEnable(VK_FALSE);