Bevy Solari Path Tracer
Solari 是 Bevy 的 GPU 路径追踪渲染器,用于计算全局光照(GI)。它是一个前向着色路径追踪器,在 bevy_pbr 中实现。
核心架构
- Unidirectional path tracing — 单向路径追踪,从摄像机出发采样光路
- OpenPBR-inspired BRDF — 基于 OpenPBR 分层模型的 BRDF 能量分布
- Filament multiscattering correction — 使用 Filament 的多散射修正来补偿能量损失
- Reciprocity trade-off — 为了更好的能量守恒,牺牲了 BRDF 的双向一致性(unidirectional path tracer 不需要)
关键 PR 时间线
#24243 — Solari BRDF 能量守恒修复(2026-05-15)
修复了 specular 和 diffuse lobe 之间的能量分布。旧的分层公式是 broken 的;新方案采用 OpenPBR equation 42 启发 + Filament 多散射修正。
- White furnace test 确认能量守恒改善
- 性能优化:提升
F_AB纹理采样(避免冗余查询) - 31 条 review 评论,JMS55 + SparkyPotato 批准
- 拆分自 #23818;相关 open PR #24246(进一步能量守恒改进)
#24332 — 光照泄漏预防(2026-05-21)
两项针对性改进降低 GI 光照泄漏伪影:
- Jitter gating:仅在 specular GI 时开启 jitter,减少非必要的噪声
- 更保守的 cell-size 启发式:不立即 snap 到 base cell size,而是选择大于
ray_t的最大 cell size
标签:C-Refinement — 改善输出质量、非 bugfix
#25423 — Improved reflection denoising(2026-08-20)
PSR(反射去噪机制)此前仅应用于非常光滑的金属表面;本 PR 扩展至略不光滑的更多表面类型(较粗糙金属、电介质等;弯曲表面被忽略),反射结果更不模糊(A-Rendering, D-Complex, C-Refinement,+283/-82,9 files)。
- 承接 08-12 的 #25359(反射测试台,为反射 PR 铺路)——Solari 反射质量线延续
- 无公开 API 变化,纯渲染质量改进
- 动态场景联动:glossy 表面新增 specular motion vectors 与深度缓冲写入(动态视角/物体下反射更少模糊);motion vector prepass texture 改用 storage binding(提升平台支持度);DLSS-RR 接受可配置的深度纹理(与深度写入联动的 DLSS Ray Reconstruction 增强)
- 文件分布(9 files,+283/-82):
resolve_dlss_rr_textures.wesl+213/-4(核心)、initial_path.wesl+30/-67、prepare.rs+16、bevy_core_pipeline/core_3d/mod.rs适配、bevy_anti_alias的 dlss/mod.rs + node.rs - 作者 JMS55(jms55),增量细节经 analyst 渠道交叉验证
设计权衡
| 维度 | 选择 | 代价 |
|---|---|---|
| BRDF 模型 | OpenPBR + Filament 多散射 | 牺牲 reciprocity |
| 路径追踪方向 | Unidirectional(摄像机出发) | 不如 bidirectional 对焦散/间接光准确 |
| 光照泄漏 | 保守 cell-size + jitter gating | 可能略降 specular GI 精度 |
与 Bevy 其他渲染系统的关系
Solari 是 Bevy 渲染管线中的可选 GI 方案:
- 与 PBR 管线共享
bevy_pbrcrate - 阴影系统(bevy-shadow-maps)提供直接光照遮挡信息,Solari 补充间接光照
- 与 Solari BRDF 修复相关的后续 PR #24246 仍在 open
相关页面
- bevy — Bevy 引擎总览
- bevy-rendering — Bevy 渲染系统核心概念
- bevy-shadow-maps — 阴影映射系统
- bevy-game-dev-2026-05 — 2026 年 5 月引擎变更追踪