Bevy 0.20 是用 Rust 编写的开源游戏引擎的最新版本,带来了一套旨在提升渲染保真度、开发者体验和工具链的功能。此次更新涉及引擎的实时光线追踪渲染器 Solari、其场景系统 BSN、Feathers UI 工具箱、着色器语言支持以及其他多个组件,体现了引擎贡献者的持续工作。

Solari 渲染器在图像质量和性能方面都有显著提升。得益于 ReSTIR 实现的改进,渲染现在基本上是无偏的,从而获得更准确的光照,消除了移动物体上的延迟阴影,并减少了非金属材质上的闪烁反射。性能提升来自将 ReSTIR 设为可选(默认禁用)以及优化 Solari 的场景管理代码,该代码保留了早期版本中保留渲染世界优化的相似之处,从而大幅降低了 CPU 开销。用户可以通过 SolariLighting 中的新字段来微调行为,例如世界缓存大小、每像素光照采样数、时间累积和光线追踪反弹次数。兼容性扩展到包括来自 Atmosphere 和 EnvironmentMapLight 光源在摄像机上的照明,此外还有现有的 DirectionalLight 和自发光网格支持,未来计划添加 PointLight、SpotLight 和 RectLight。此外,dlss_wgpu crate 已更新以支持最新的 DLSS-RR 4.5,提升去噪质量,尽管 macOS 用户目前尚无内置的 Solari 去噪器,MetalFX Ray Reconstruction 被建议作为潜在的未来解决方案。

展示了 Bevy 的 Solari 渲染器渲染的 Zorah 场景的截图,呈现出改进的光照和反射效果
Zorah 场景展示了 Solari 在 ReSTIR 改进后的无偏光照以及非金属表面上减少的闪烁。bevy.org

此图展示了 Bevy 0.20 中 Solari 渲染器的进步,具体表现在第二段讨论的通过 ReSTIR 优化提升的图像质量和性能。

在场景组合方面,BSN 语法已经经过改进,以提升人体工程学和清晰度。场景引用现在需要 @ 前缀,从而消除了围绕组件值、函数和表达式的 template_value 包装器的需求。实现了 Default 和 Clone 的枚举可以直接使用,无需 VariantDefaults 或 FromTemplate,尽管此更改意味着在 BSN 中使用枚举时必须显式指定所有枚举字段。构建器模式和链式方法也不再需要 template_value 包装器,列表实体使用 -- 而不是逗号或括号分隔,减少了语法噪音并提升了视觉辨识度。新的 Ready 事件在一个实体及其所有子实体生成之后触发,使得依赖完全加载场景层次结构的逻辑成为可能。

除了场景语法,Bevy 0.20 为 Feathers UI 工具箱添加了具有弹出颜色轮和滑块的颜色输入选择器、可滚动的可选择列表视图、下拉选择字段、随交互生成和销毁的懒加载菜单,以及支持文本输入和拖拽/ scrubbing 的数值输入小部件,并具有可配置的硬限制和软限制。无标签页小部件提供 TabList 和 Tab 组件用于外部管理的选择,并与 Bevy 的焦点、交互和无障碍系统集成。

Feathers UI 颜色输入小部件,带有弹出颜色轮和滑块以供选择颜色
Bevy 的 Feathers UI 工具箱中的新颜色输入选择器提供弹出颜色轮和滑块,以实现直观的颜色选择。bevy.org

此图展示了在 Bevy 0.20 中添加到 Feathers UI 工具箱的颜色输入小部件,包含第四段所述的弹出颜色轮和滑块。

Feathers UI 懒加载菜单小部件,随交互生成和销毁,显示菜单项
Bevy 的 Feathers UI 工具箱中的懒加载菜单小部件仅在交互时出现,通过按需生成和销毁来提升性能。bevy.org

此图展示了 Bevy 0.20 的 Feathers UI 工具箱中引入的懒加载菜单小部件,正如第四段所述,它会随用户交互而生成和销毁。

引擎还采用了 WESL,这是 WGSL 的标准化扩展,用于着色器开发,带来了模块、导入和条件编译功能,并通过 wgsl-analyzer 启用 IDE 工具支持,同时要求将旧版自定义 Bevy WGSL 着色器翻译为 WESL 格式。.

在编辑器中显示的带有 WESL 语法高亮的 Bevy 雾着色器,展示了模块和导入
WESL 语法高亮使得 Bevy 着色器能够获得 IDE 工具支持,演示了新标准化着色器语言的采用。bevy.org

此图展示了 WESL(WGSL 的标准化扩展)用于雾着色器,突出了 Bevy 0.20 在第五段所述的着色器开发中采用的新模块、导入和条件编译特性。