Bevy Shadow Maps
Bevy 的阴影映射(Shadow Maps)系统用于渲染方向光、点光和聚光灯的动态阴影。
架构概览
Bevy 阴影系统基于传统 shadow map 管线:
- Shadow Pass — 从光源视角渲染深度图
- Shadow Map Sampling — 在主渲染 pass 中采样深度图判断遮挡
- PCF / PCSS — 百分比渐近滤波(Percentage Closer Filtering / Soft Shadows)
关键 PR 时间线
#23713 — 点光/聚光阴影只渲染一次(2026-04-26)
无论多少个相机看向同一光源,shadow map 只计算一次。分屏、相机堆栈、反射场景的性能大幅提升。
#24038 — 动态点光阴影修复(2026-05-01)
ExtractedView 和 Frustum 现在随 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:当 SpotLight 和 Camera 在同一实体上时,聚光灯的 frustum 计算会覆盖相机的 Frustum 组件,导致错误的 frustum culling。文档添加了粗体警告。
架构要点
| 概念 | 说明 |
|---|---|
| Shadow Maps | 从光源视角渲染的深度纹理 |
| Visibility Ranges | 控制阴影贴图可见距离 |
| ShadowLodOrigin | 阴影 LOD 计算的原点参考点 |
| PCF / PCSS | 软阴影的滤波方法 |
| GPU Culling | 在 GPU 上进行可见性裁剪(0.19 恢复) |
相关页面
- bevy — Bevy 引擎总览
- bevy-rendering — Bevy 渲染系统核心概念
- bevy-solari-pathtracer — Solari GPU 路径追踪器
- bevy-game-dev-2026-05 — 2026 年 5 月引擎变更追踪