feat: CSM 级联阴影(3 级联 × 1024²,实用分割 + 纹素对齐)
- SceneRenderer::ComputeCascades:相机视锥实用分割(λ=0.6)→ 反投影 取切片角点 → 光空间 AABB 拟合 → 纹素对齐(消除相机移动时阴影边缘 闪烁)→ [0,1] 深度重映射 - Shadow pass 单 pass 渲 3 个 region,每级联 push 各自光空间 VP - Forward:UBO lightSpace[3]+cascadeSplits(视图深度选级联),Set2 三张级联图按 binding 0/1/2 采样;vertex 输出 fragViewDepth - 光源视锥剔除用最远级联(覆盖全阴影范围);双视锥独立剔除铁律保留 - 旧单张 2048 全场景图退役;近处级联分辨率 ~128px/unit(约 2× 提升) - 编译零错误、validation 零警告、8 秒冒烟通过(10 pass 全活跃)
This commit is contained in:
@@ -183,10 +183,13 @@ namespace Engine
|
||||
m_Depth = m_RenderGraph->CreateTexture(
|
||||
"MainDepth", RG::TextureDesc{depthFormat});
|
||||
|
||||
// 阴影图:固定尺寸正交深度图(D32 采样)
|
||||
m_ShadowMap = m_RenderGraph->CreateTexture(
|
||||
"ShadowMap",
|
||||
RG::TextureDesc{vk::Format::eD32Sfloat, kShadowMapSize, kShadowMapSize});
|
||||
// CSM 级联阴影图:每级联独立 1024² 正交深度图(D32 采样),
|
||||
// 范围由 SceneRenderer::ComputeCascades 按相机视锥切片拟合
|
||||
for (u32 c = 0; c < kMaxCascades; ++c) {
|
||||
m_ShadowMaps[c] = m_RenderGraph->CreateTexture(
|
||||
"ShadowMap" + std::to_string(c),
|
||||
RG::TextureDesc{vk::Format::eD32Sfloat, kCascadeRes, kCascadeRes});
|
||||
}
|
||||
|
||||
// HDR 颜色图:Forward 的输出(线性光照值 + 抖动),TAA 显式完成
|
||||
// 时域累积后写入 TAAColor(对齐 UE/Unity 管线)
|
||||
@@ -222,9 +225,9 @@ namespace Engine
|
||||
// 要加新 pass:new 一个 RenderPass 子类,在这里 push 一行。
|
||||
FrameSceneData& frame = m_SceneRenderer->Frame();
|
||||
m_Passes.push_back(CreateScope<Passes::ShadowPass>(
|
||||
*m_SceneGpu, frame, m_ShadowMap));
|
||||
*m_SceneGpu, frame, m_ShadowMaps));
|
||||
m_Passes.push_back(CreateScope<Passes::ForwardPass>(
|
||||
*m_SceneGpu, frame, m_HDRColor, m_Velocity, m_Depth, m_ShadowMap));
|
||||
*m_SceneGpu, frame, m_HDRColor, m_Velocity, m_Depth, m_ShadowMaps));
|
||||
m_Passes.push_back(CreateScope<Passes::TAAPass>(
|
||||
*m_FullscreenGpu, /*historyAlpha*/ 0.9f, m_HDRColor, m_Velocity,
|
||||
m_TAAColor));
|
||||
|
||||
Reference in New Issue
Block a user