Bevy Shadow Maps

Bevy 的阴影映射(Shadow Maps)系统用于渲染方向光、点光和聚光灯的动态阴影。

架构概览

Bevy 阴影系统基于传统 shadow map 管线:

  1. Shadow Pass — 从光源视角渲染深度图
  2. Shadow Map Sampling — 在主渲染 pass 中采样深度图判断遮挡
  3. PCF / PCSS — 百分比渐近滤波(Percentage Closer Filtering / Soft Shadows)

关键 PR 时间线

#23713 — 点光/聚光阴影只渲染一次(2026-04-26)

无论多少个相机看向同一光源,shadow map 只计算一次。分屏、相机堆栈、反射场景的性能大幅提升。

#24038 — 动态点光阴影修复(2026-05-01)

ExtractedViewFrustum 现在随 ExtractedPointLight 变化正确更新。之前移动/旋转的点光会让阴影消失或闪烁。

#24216 — Vulkan 阴影闪烁修复(2026-05-12)

Windows 11 Vulkan 下窗口最小化/恢复后阴影闪烁一帧的 bug 修复。修复涉及 PrepareAssets 阶段逻辑调整。

#24252 — GPU 可见性裁剪回退(2026-05-13,已回退)

为了 0.19 发布,临时回退了 #23115(GPU visibility range culling)以避免阴影回归。JMS55 + Zeophlite 批准了务实回退。

#24289 — ShadowLodOrigin 架构修复(2026-05-18)

pcwalton 的正确架构方案取代了临时回退。引入:

  • ShadowLodOrigin 组件 — 允许自定义阴影 LOD 原点
  • lod_view_world_position — GPU View uniform 新字段
  • 语义:方向光阴影的 visibility range 相对关联 camera 解析;点光/聚光阴影相对 “shadow LOD origin” 解析

#24343 — GPU 驱动的 HLOD 重应用(2026-05-19)

基于 #24289 的新架构恢复 GPU 可见性范围裁剪。两步提交:先 revert the revert,再对齐 GPU 和 CPU 路径的 HLOD 语义。测试方法:

cargo run --example visibility_range -- --no-cpu-culling

#24359 — RenderShadowLodOrigin 2D 崩溃修复(2026-05-20)

#24289 引入的 crash regression 修复。RenderShadowLodOrigin 现在在 2D/non-PBR 场景中视为 optional — 不再 panic。

#24324 — SpotLight + Camera 同实体 Frustum 覆盖警告(2026-05-21)

纯文档 PR:当 SpotLightCamera 在同一实体上时,聚光灯的 frustum 计算会覆盖相机的 Frustum 组件,导致错误的 frustum culling。文档添加了粗体警告。

架构要点

概念说明
Shadow Maps从光源视角渲染的深度纹理
Visibility Ranges控制阴影贴图可见距离
ShadowLodOrigin阴影 LOD 计算的原点参考点
PCF / PCSS软阴影的滤波方法
GPU Culling在 GPU 上进行可见性裁剪(0.19 恢复)

相关页面