feat: 透明窗口 + 实例预算扩容(修复斜光阴影静默截断)

透明窗口:SceneSettings 加 ClearColor/DrawSkybox,随 FrameSceneData
每帧下发到 SkyboxPass(替换硬编码清屏色);GLFW 透明帧缓冲已开,
tonemap 预乘 alpha 直通已有,链路全通。TAA alpha 时域混合为已知边界。

实例预算:kMaxInstances 16384 → 65536(四视图共享预算,100 实体
斜光时需求 16.4k 超限,cascade 2 实例被静默丢弃 = 用户看到的
"拖灯光方向部分背包阴影消失")。截断状态每帧落遥测 + ImGui 红字
(原 warn-once 对动态穿越阈值的场景等于没有告警)。
This commit is contained in:
2026-09-24 18:54:01 +08:00
parent fa9681aa41
commit 6df3be2846
7 changed files with 66 additions and 30 deletions
+8 -4
View File
@@ -166,9 +166,11 @@ namespace Engine
ubo.proj[2][1] += jy * 2.0f / static_cast<f32>(targetExtent.height);
}
ubo.ambientColor = scene.GetSettings().ambientColor;
ubo.ambientColor = scene.GetSettings().AmbientColor;
// ---- 运行时开关/调试视图落帧(各 pass 与 frag 只读契约字段)----
m_Frame.ClearColor = scene.GetSettings().ClearColor;
m_Frame.DrawSkybox = scene.GetSettings().DrawSkybox;
m_Frame.shadowsEnabled = m_ShadowsEnabled;
m_Frame.taaEnabled = m_TAAEnabled;
m_Frame.bloomEnabled = m_BloomEnabled;
@@ -363,11 +365,13 @@ namespace Engine
m_LastProjNoJitter = ubo.projNoJitter;
++m_FrameIndex;
// 截断状态每帧落遥测(ImGui 可见)——"只告警一次"的日志对
// 大场景不够:预算是动态穿越的,用户必须实时看到截断发生
m_Frame.instancesTruncated = instanceTruncated;
if (instanceTruncated && !m_TruncationWarned) {
// 只告警一次(每帧告警会刷屏)
m_TruncationWarned = true;
ENGINE_WARN("GPUDriven: instance buffer full ({}), entities truncated",
kMaxInstances);
ENGINE_WARN("GPUDriven: instance buffer full ({}), entities truncated "
"(见 Scene Debug 面板红字)", kMaxInstances);
}
m_Frame.collectMs = std::chrono::duration<f32, std::milli>(