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 光照泄漏伪影:

  1. Jitter gating:仅在 specular GI 时开启 jitter,减少非必要的噪声
  2. 更保守的 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_pbr crate
  • 阴影系统(bevy-shadow-maps)提供直接光照遮挡信息,Solari 补充间接光照
  • 与 Solari BRDF 修复相关的后续 PR #24246 仍在 open

相关页面