游戏引擎的发布公告通常读起来像超市小票。名单很长,动词都是「加入了」「修复了」,读完记不住什么。2026 年 10 月 8 日晚上 9 点 41 分,Bevy 0.20.0 标签发布,227 位贡献者、817 个拉取请求。这份清单里真正值得停下来的只有三件事,因为它们各自都是一个决定,而不是一个功能。
Bevy 是用 Rust 写的数据驱动游戏引擎,开源免费。选这三件事的理由很简单:一个决定语言,一个决定默认值的方向,一个决定要不要为了性能牺牲画质。
📝 第一个决定:把方言收回,交给标准
Bevy 的着色器语言换成了 WESL。这不是新增一个选项,是把旧的 Custom Bevy Extended WGSL 支持整个移除。迁移规则写得很直接:用旧方言写的自定义着色器需要翻译成 WESL,文件后缀从 .wgsl 改成 .wesl。没有任何预处理指令的纯 WGSL 文件仍然可用。
WESL 是 WGSL 的一个扩展标准,补上了模块、导入与条件编译这些可用性特性。项目给出的理由是一个价值判断:更大的着色器生态采用一个共同标准更好,这样可以把资源汇集到一处做语言改进、模块生态与 IDE 工具上。
换标准通常意味着生态位重的移动。旧方言上的经验积累要重新翻译,而 WESL 团队也在同步推进,两者一起规划后续的着色器开发方向。公告没有说明有多少现存项目与插件受这次迁移影响。
🕯️ 第二个决定:把画质开关默认关掉
Solari 是 Bevy 的实时路径追踪渲染器。这个版本里它进步不小:ReSTIR 实现改为基本无偏,噪点更低,光照重现更准;移动物体的阴影不再滞后;运动中的反射不那么闪,尤其在非金属表面上。支持的 Bevy 渲染特性范围也扩大了。
然后项目做了一个会让升级者意外的决定:ReSTIR 变成可选项,且默认关闭。
项目给出的理由是,对很多场景来说,ReSTIR「吃掉了一块不小的性能,却没有显著提升画质」。代价写得很坦白。关闭后,在灯光较多的场景里要预期阴影质量下降,以及运动中阴影的缺失。0.19 的用户如果依赖 ReSTIR,需要检查自己的场景是否受影响,需要的话重新打开 SolariLighting::restir。
这件事的分量在于方向的反转。一个渲染器在优化了 ReSTIR 的画质与性能之后,选择把它默认关掉。这通常意味着质量提升的边际收益已经低于性能成本,团队宁可把默认档位调稳,让需要极致画质的人显式开启。
| 项目 | 0.19 | 0.20 |
|---|---|---|
| ReSTIR | 默认开启 | 默认关闭,可显式开启 |
| 关闭后的画质 | 优于无 ReSTIR | 多灯场景阴影质量下降 |
| 关闭后的性能 | 有明显成本 | 省下一块可观的性能 |
| macOS 支持 | 无 | 有,但无内置降噪器 |
macOS 这条要单独说。Solari 现在通过 Metal 在 macOS 上运行,公告同时明确提示 bevy_solari 目前没有为 macOS 包含内置降噪器,并把 MetalFX Ray Reconstruction 列为未来可能的解决方案。
把这件事与 ReSTIR 默认关闭放在一起看,会发现一个一致的取舍方向。渲染质量的两端都选择了保守。把降噪交给未来的 API 而不是自己实现,把 ReSTIR 交给用户按场景开启。性能预算优先于画质默认值,剩余质量留给用户自己调。
🗑️ 第三个决定:用标注换速度
这次版本里有两个数字值得单独拎出来,因为它们的量级完全不同。
新增的 despawn_all 命令在 10 万实体的场景下是 1.53 倍,3.17 毫秒对 2.07 毫秒。测量方式是五次运行取中位数,硬件是 AMD Ryzen 9 9950X3D。1.53 倍是一个扎实的常数倍改进,放在日常使用的量级上。
另一个数字是 132 倍。这来自新增的可选组件属性 #[component(summary_tick)],它存储一个列变更标记,项目说在自己的 GPU 网格提取代码上看到 132 倍加速,代价是让修改操作本身更昂贵。
| 优化项 | 幅度 | 测量条件 |
|---|---|---|
| despawn_all 批量销毁 | 1.53 倍 | 10 万实体,五次中位数,Ryzen 9 9950X3D |
| summary_tick 变更标记 | 132 倍 | 项目自测的 GPU 网格提取代码 |
这两个数字的性质需要分开读。132 倍来自一个特定工作负载(GPU 网格提取),项目自己在公告里给出,并且注明了代价(修改更贵)。1.53 倍来自一个公开可复核的硬件与场景设定。性能数字一律是项目自测,公告与本篇报道都未做独立基准测试。
🎨 顺带把标准化的账也算清楚
这一版还有几件事共同指向同一个方向:把重复的东西合并到标准上。
网格着色器已接入 Bevy 的管线缓存,供高级用户使用,用例包括用 meshoptimizer 之类工具生成的 meshlet,以及带动态细节级别的程序化草地。网格着色器不支持 Web 平台。着色器工作组也在规划中。
纹理压缩方面,CompressedImageSaver 资产处理器新增了一个基于 ctt 库的后端,可压缩成桌面 GPU 的 BCn 格式或移动 GPU 的 ASTC 格式,并自动生成 mipmap。原先的 Basis Universal 行为移到了 compressed_image_saver_universal 特性,公告称这是跨平台分发(含 WebGPU)的最佳选择。
场景系统 BSN 的语法做了易读性方向的调整,一个破坏性变更是所有场景引用现在都需要 @ 前缀。BSN 场景实体新增了 Ready 事件,在全部子实体生成完毕后触发。旧的 Add 事件是自顶向下触发的,那时子实体还不可用,新的自底向上事件填补了这个缺口。
界面与调度的细节还包括:界面支持 em 与 rem 尺寸,默认字号从 px(20) 改为 rem(1);系统、命令与观察者中的 panic 现在会转成错误交给回退错误处理器,默认仍然重新 panic;调度新增 chain_weak 的弱排序,调度随机化用于让依赖顺序的 bug 更容易暴露;UI 工具包 Feathers 新增颜色输入、可滚动列表视图与下拉选择等控件,数字输入控件支持拖拽刮擦。
编辑器工具的这条线索也值得留意:编辑器工具链里少一个控件,开发者就会卡在那里等。
🔍 读公告时的分寸
- 所有性能数字(1.53 倍、132 倍)都是项目在自有硬件与自有工作负载上的测量,没有独立基准测试
- GitHub 发布页的正文只链接到与 v0.19.1 的差异,功能描述全部来自项目公告本身
- 公告没有说明 WESL 迁移与 @ 前缀变更会影响多少现存项目与插件
- Solari 对 PointLight 与 SpotLight 与 RectLight 的支持被列为「近期」计划,没有给出日期
把这一版收拢成一句话:它在渲染质量上做了实在的改进,同时在默认值的方向上做了收缩。一个引擎在版本节点上做的这类选择,通常反映的是它对用户当前主要痛点的判断。Bevy 的判断是画质不再是唯一瓶颈,性能预算与开发者工具链更急。
讨论回复
加载中...正在加载回复...
推荐
智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。