feat: CSM 软阴影——sampler2DShadow 硬件 PCF + 3×3 纹素 tap
- 阴影采样器开启硬件深度比较(compareOp=eLess + linear filter): 单次采样 = 2×2 深度比较插值,clamp-to-border 白色语义不变 - ShadowFactor 改 3×3 纹素偏移 tap(等效 36 次比较),影中保留 0.3 环境感并按 PCF 结果插值——阴影边缘软过渡,消除二值硬边锯齿
This commit is contained in:
@@ -103,7 +103,9 @@ namespace Engine::Passes
|
||||
ENGINE_FATAL("SceneGpu: failed to create shader objects");
|
||||
}
|
||||
|
||||
// 阴影采样器:clamp-to-border 白色 = 光视锥之外无阴影
|
||||
// 阴影采样器:clamp-to-border 白色 = 光视锥外自动无阴影
|
||||
//(省 shader 出界分支);开启硬件深度比较(sampler2DShadow)
|
||||
// ——单次采样即 2×2 PCF,配合 shader 3×3 tap 得软阴影
|
||||
vk::SamplerCreateInfo shadowSamplerInfo;
|
||||
shadowSamplerInfo.setMagFilter(vk::Filter::eLinear)
|
||||
.setMinFilter(vk::Filter::eLinear)
|
||||
@@ -113,7 +115,8 @@ namespace Engine::Passes
|
||||
.setAddressModeW(vk::SamplerAddressMode::eClampToBorder)
|
||||
.setBorderColor(vk::BorderColor::eFloatOpaqueWhite)
|
||||
.setUnnormalizedCoordinates(VK_FALSE)
|
||||
.setCompareEnable(VK_FALSE);
|
||||
.setCompareEnable(VK_TRUE)
|
||||
.setCompareOp(vk::CompareOp::eLess);
|
||||
shadowSampler = device.GetDevice().createSampler(shadowSamplerInfo);
|
||||
|
||||
// per-slot 描述符分配 + Set0 绑定(buffer 句柄全程稳定,不用重绑)
|
||||
|
||||
Reference in New Issue
Block a user