Bevy 三周年

发布于 2023 年 8 月 10 日 作者:Carter Anderson ( 一只戴着猫耳朵、挥舞着触手的卡通人物剪影,即 GitHub 的吉祥物和标志“Octocat” @cart 一只灰色飞鸟的矢量图;X(以前是 Twitter)的旧标志 @cart_cart 一个指向右边的三角形,在一个圆角矩形里;YouTube 的标志 cartdev )

An image representing the article

这里有 @cart(Bevy 的创建者和项目负责人)带着一个令人兴奋的公告 ... 自 Bevy 首次发布以来,现在已经三年了!

按照惯例,我将借此机会回顾过去一年,并概述我们对未来的希望和梦想。如果您好奇,可以查看 Bevy 的 一周年二周年 帖子。

今年,我还强烈鼓励大家写下自己的“Bevy 生日”回顾帖子。只需将您的帖子发布到任何地方(如果您愿意,也可以发布到社交媒体),然后 在这里链接到您的帖子。一个月后,我们将发布一篇名为“回顾 Bevy 三周年”的汇总帖子,将这些帖子汇总在一起。这是我们作为社区庆祝胜利、识别改进领域和校准未来一年路径的机会。

对于那些不了解 Bevy 的人来说,Bevy 是一款用 Rust 构建的,清新简洁的、数据驱动的游戏引擎。Bevy 也是永久免费和开源的!您可以在 GitHub 上获取完整的 源代码。我们有一个 快速入门指南。您还可以查看 Bevy 资源,这是一个包含社区开发的插件、Crate、游戏和学习资源的库。

一年里程碑 #

milestones

  • 8 月 19 日Bevy 游戏制作大赛 #2:结合
  • 10 月 18 日:Bevy 在 GitHub 上达到 20000 颗星!
  • 11 月 12 日Bevy 0.9
    • 我们添加了 HDR 后期处理、色调映射和光晕、FXAA、去带抖动、后期处理 API 改进、新的场景格式、代码驱动的场景构建、改进的实体/组件 API、独占系统重构、枚举反射、时间着色器全局变量、插件设置、Bevy UI Z 轴索引等等!
  • 11 月 20 日:Bevy 成为 GitHub 上第二受欢迎的游戏引擎
  • 1 月 14 日:James Liu (@james7132) 成为维护者
  • 1 月 14 日:Bevy 组织的新角色:主题专家
  • 1 月 14 日Bevy 人员 页面上线
  • 3 月 6 日Bevy 0.10
    • 我们添加了 ECS 调度程序 V3、级联阴影贴图、环境贴图灯光、深度和法线预处理、平滑骨骼动画过渡、改进的 Android 支持、改进的光晕、距离和大气雾、StandardMaterial 混合模式、更多色调映射选择、颜色分级、并行流水线渲染、窗口作为实体、渲染器优化、ECS 优化等等!
  • 4 月 1 日Bevy 游戏制作大赛 #3:副作用
    • 第三届官方 Bevy 游戏制作大赛!353 人参加,78 人提交了游戏,用户给出了 2158 个评分。 Link Sider 获胜!
  • 7 月 9 日Bevy 0.11
    • 我们添加了屏幕空间环境光遮蔽 (SSAO)、时间抗锯齿 (TAA)、变形目标、鲁棒对比度自适应锐化 (RCAS)、WebGPU 支持、改进的着色器导入、视差贴图、调度优先 ECS API、即时模式 Gizmo 渲染、ECS 音频 API、UI 边框、网格 UI 布局、UI 性能改进等等!
  • 8 月 10 日:Bevy 现在三岁了!

一年数据 #

numbers

  • 741 位在 GitHub 上的 Bevy 独立贡献者(从 470 位增加)
  • 25,222GitHub 星星(从 17,830 颗增加)
  • 2,541GitHub 上的 Fork(从 1,693 个增加)
  • 5,732 个拉取请求(3,993 个已合并)在 GitHub 上(从 3,610 个 PR 和 2,354 个已合并的增加)
  • 3497 个问题(2290 个已关闭)在 GitHub 上(从 2,228 个和 1,303 个已关闭的增加)
  • 5214 个提交在 GitHub 上(从 3,629 个增加)
  • 874GitHub 讨论(从 470 个增加)
  • 281Bevy 资源(插件、Crate、游戏、应用程序和学习材料)(从 191 个增加)
  • 661,020 次下载在 crates.io 上(从 206,328 次增加)
  • 712 次在 Twitter 上的 @BevyEngine 转发 Bevy 社区内容(从 382 次增加)
  • 14,244Bevy Discord 成员(从 9,686 个增加)
  • 3202 个社区 #showcase 条目在 Bevy Discord 上(从 1,789 个增加)
  • 1,424,903 条消息在 Bevy Discord 上(从 968,290 条增加)

请注意,为了保持一致性和清晰度,所有这些数字都以“绝对总数”给出,因为这通常是它们报告的方式。例如,我们现在有 25,222 颗 GitHub 星星 ... 这也是您在我们仓库中看到的数字。我还包含了去年报告的总数,可以用来计算自去年以来这些数字的变化。

我感到自豪的事情 #

proud

我会尽量避免重复自己,但请注意,我对 Bevy 的 一周年二周年 帖子中概述的内容仍然感到非常自豪。

组织规模化 #

今年,我们推出了 主题专家,赋予那些在关键主题领域证明了他们的技术实力并与 Bevy 项目方向保持一致的开发者自主权。在历史上,只有项目负责人(我)才能解决“有争议的”更改(对引擎的重大、基础或深远更改)。主题专家对 PR 的批准算作“投票”。如果两位主题专家批准一个有争议的 PR,则可以在没有项目负责人批准的情况下合并它。

这使得那些帮助 Bevy 取得成功的开发者有了发言权,也让我们能够扩展开发工作。今年,我们合并的 PR 比去年多了 345 个!

渲染器功能 #

对于 Bevy 渲染器来说,这是非凡的一年。我们添加了 屏幕空间环境光遮蔽级联阴影贴图环境贴图灯光天空盒FXAATAA视差贴图变形目标HDR 色调映射和光晕改进的光晕距离和大气雾平滑骨骼动画过渡更多色调映射选择鲁棒对比度自适应采样WebGPU 支持启用并行流水线渲染StandardMaterial 混合模式深度和法线预处理使用预处理着色器的阴影贴图Gizmo去带抖动后期处理 APIKTX2 数组/ 立方体贴图/ 立方体贴图数组纹理

而这些只是亮点!如果您点击上面的链接,您会发现有大量不同的人正在构建 Bevy 的渲染器。我们 Discord 上的 #rendering-dev 频道真的越来越受欢迎了。

Bevy ECS API 的优势 #

我对 Bevy ECS 的当前状态非常满意。今年的趋势是“使更多事物可表达”和“使表达事物更容易”。

我认为,截至 Bevy 0.11,使用 Bevy ECS 构建应用程序已经达到了一个新的巅峰,尤其是在调度系统方面。您想要表达的调度程序,您通常都可以表达。并且 API 比以往任何时候都更符合人体工程学、更简洁、更统一。

当然,未来还有许多新的 ECS 功能。我们的 ECS 团队一直在开发一些新的东西!

反射和场景格式 #

Bevy Reflect(Bevy 的自定义 Rust 反射库)目前也处于一个稳定的状态。我们填补了剩余的类型系统空白,例如 枚举反射。我们改进了我们的 反射代理。我们定义了一个新的 稳定类型路径,为我们提供 Rust 的 type_name 所不能提供的稳定性保证(以及更多功能)。我们使 反射派生意味着 FromReflect,从而提高了定义反射类型的人体工程学。

这些改进也反馈到我们的场景系统中。我们定义了一个 新的场景格式,它更容易阅读和组合。我们添加了 对场景的支持。并且我们使得 从场景中过滤出组件和资源 成为可能。

我认为现在基础架构已经基本搭建完成。目前唯一缺少的是更高级的功能,例如“嵌套场景”和“属性重载”。

更多使用 Bevy 的真实项目™ #

尽管 Bevy 仍然处于“1.0 之前”阶段,但它正在被越来越多的严肃项目采用。 Tiny Glade 是一款 备受期待 的休闲自由建造游戏,它使用 Bevy ECS 和 Bevy App 构建,并配有一个定制渲染器。 Fish Folk 成功地在 Kickstarter 上筹集了资金,用于开发他们的街机风格多人游戏套件(以及相关的框架),这些游戏都建立在 Bevy 的基础之上。xyzw 正在构建一个 类似矮人要塞 的游戏,它拥有一个精美的自定义 2D 照明系统。Anselmo 正在构建一个 工业革命时期为背景的城市建造游戏

这些项目加入了去年推出的 ForesightNoumenalMolecoole 等项目。

我们的维护者 #

我为我们的维护者感到非常自豪,他们经常竭尽全力让 Bevy 变得更加出色。

  • Alice Cecile (@alice-i-cecile) 每周都会审核和合并 PR,确保 PR 合并流程顺利进行。查看 Mastodon 上的 #bevymergetrain 标签,以了解这些卓有成效的工作的概览(该标签是新的,但该流程已经运行很长时间了)。此外,她还帮助实现了 ECS Schedule V3!
  • François Mockers (@mockersf) 今年通过 数量级 的改进提升了我们的 CI,并通过精通多种语言,确保引擎在大多数领域(尤其是 Web 平台)都能“正常工作”。
  • Rob Swain (@superdump) 是我们的渲染负责人:开发新功能、帮助其他渲染器开发人员完成工作,并撰写关于渲染器功能设计和原理的长篇详细帖子。
  • James Liu (@james7132)性能的关注十分细致,特别是在 ECS 领域。

我很幸运能与如此有能力的人一起工作。没有他们,Bevy 将会是一个截然不同(而且糟糕得多)的项目。请通过 赞助他们 来表示你的支持!

总有改进的空间 #

improve

我想编写更多(我自己的)代码 #

我过去一年的 Bevy 工作主要集中在三个方面:

  1. 设计和构建新的“大型”功能,例如 Bevy Asset V2Schedule-First ECS 等。
  2. 帮助其他人设计和构建功能。
  3. 运行项目:准备发布、撰写博客文章、回答问题、社交媒体、管理、等等。

今年我在(2)和(3)上花费了大量时间。几乎是全部时间。当其他人进行重大(或重要)更改时,我会确保完全理解这些更改,仔细考虑设计空间,在我脑海中构建理想的设计,然后“导航差异”:社区成员的设计和我的设计之间的差异(要么我自己进行更改,要么要求他们进行更改)。今年我与 53 个 pull 请求共同署名(除了我自己的 pull 请求)。我花费了无数天与其他人一起讨论设计。

我发现自己每天都会登录,查看(2)和(3)的队列,并发现我用于(1)的时间比我想象的少。

很多时候,我花费在“导航正确设计和社区成员设计之间的差异”上的时间,远远超过了我自己设计和构建该功能所需的时间。而且大多数时候,这项工作(虽然很酷也很有用)并不是我 Bevy 优先事项的首位(否则我会自己构建它!)。

一方面,“导航差异”是对项目健康的宝贵投资。今年 Bevy 项目取得了丰硕成果,因为我们有这么多人在构建功能。而且我们收到的“需要更改的差异”越来越少,或者根本不存在,因为经验丰富的开发人员帮助人们加入了该项目,并将他们与我们对未来的愿景保持一致。

但我发现我对目前的平衡越来越不满意。我来这里是为了构建一个引擎。因为我擅长,而且它能让我快乐。我并不擅长(2)和(3)(事实上,我认为我在这两方面做得相当不错),但它们并不能像构建引擎那样带给我快乐或成就感。

而且越来越明显的是,它们本身并不能推动项目在我们一致认为需要前进的方向上前进。我是项目负责人。我的工作(社区付钱给我)是确保项目朝着我们一致同意的方向前进。我将建立一种新的平衡,使我自己(以及其他人)能够更有效地构建引擎所需的那些功能。去年,我过于“被动”地响应 pull 请求/消息队列中的任何请求。

今年,我会花更多时间构建需要构建的东西,少花时间“做其他所有事情”。但这并不意味着我将停止审查其他人的代码和设计。但我将更加珍惜我的“在最关键领域产出成果”的时间。我会根据需要扩大我们的维护者和 SME 团队,确保那些在“最高优先级领域”之外构建优秀功能的人们仍然能够取得进展。

依然没有编辑器 #

这对每个人来说都是一件令人失望的事情,包括我。听到我一直说我们现在需要 Bevy 编辑器,然后却无法提供(甚至没有开始着手)它,可能会让人感到困惑(和恼火)。部分原因是前面一节中提到的问题。但主要原因是我无法接受这个事实:它实际上不是我的优先事项。我说“我们现在需要编辑器”,然后花了一整年时间构建 Bevy Asset V2、加入 ECS 调度工作,并审查渲染器代码。当我还有一整年的时间时,一年感觉很长。我看到了我们迄今为止取得的惊人成果,并相信我们可以在一年内构建任何东西。但当一年过去了,它感觉如此短暂。

这种情况将会改变。编辑器现在实际上是我的最高优先事项,我力争尽快在这方面取得切实的进展。这将从 Bevy UI 改进开始,但我会与这些改进并行开发编辑器原型,以便进行 自测。还有很多其他人迫不及待地想要做编辑器工作。我会尽力为他们扫清障碍,尽快启动“社区编辑器开发”。我还将在未来更加谨慎地宣传那些不在我们计划中的下一个功能。

资助 Bevy 让人困惑 #

在早期,我是唯一一个在 Bevy 上投入大量精力的开发者。将捐赠按钮直接链接到我的 GitHub Sponsors 页面 很有道理。但情况已经发生了变化!Bevy Org 现在规模庞大,有许多人花费大量时间让 Bevy 变得出色。为了解决这个问题,今年我们创建了一个新的 捐赠页面,其中介绍了 Bevy Org 的结构,并提供接受赞助者的名单。捐赠按钮现在链接到此页面,而不是直接链接到我。

然而,这仍然不是最佳方案。公司或个人如何选择赞助对象?需要内部信息才能知道资金将“最有效地”用于哪里。最终,我相信大多数人会选择知名度。而我经常是项目的公众形象,这可能意味着他们经常选择我。Bevy 的资金不应该是一场人气竞赛。

我还注意到,自从我们切换到这个系统以来,新的赞助大幅减少。在这个系统中,我无法看到全局的赞助情况(我只可以看到自己的赞助),但我强烈怀疑潜在的赞助者“被当前系统的复杂性劝退”。以前“点击捐赠并将资金捐赠给 @cart”的系统,尽管存在缺陷,但至少直观易懂。

我们需要一个新的系统,该系统需要具备以下特点:

  1. 简单:人们点击捐赠按钮,选择一个等级,然后设置付款方式。无需做出额外的决定。
  2. 合理:我们应该根据项目的需要分配资金,而不是人气或随机性。
  3. 集中式:Bevy 组织需要一个单独的资金池,以便在将资金分配给项目成员时从中提取。

这几乎肯定意味着要为 Bevy 创建一个法律实体(例如:Bevy 基金会 501(c)(3))。我想借鉴 Blender 基金会Godot 基金会 的经验。我还想尽量减少“中间人”的众筹平台/支付处理器,以确保捐赠者物超所值。

我听说从今年开始,软件项目的 501(c)(3) 状态更难获得,但这并不意味着我们不能尝试!我希望在今年年底之前找到资助问题的答案。

我们从去年吸取教训了吗? #

对于组织(以及领导者)来说,从错误中吸取教训至关重要。以下是去年生日帖子中我列出的“改进领域”,以及我认为今年我们是如何处理它们的:

  • Bevy 0.6 花费的时间太长了:幸运的是,我们从这一问题中吸取了教训!不再发布9 个月的版本了!我们在Bevy 0.6之后采用的火车式发布模型继续为我们提供良好的服务。Bevy 0.80.9 的时间是 3.5 个月,Bevy 0.90.10 的时间是 3.8 个月,而 Bevy 0.100.11 的时间是 4.2 个月。不过,肯定存在一个需要纠正的上升趋势。“3 个月加一些缓冲”越来越接近“4 个月加一些缓冲”。
  • 流水线渲染实际上还没有实现流水线:我们实现了并行流水线渲染
  • 我们现在需要 Bevy 编辑器!:遗憾的是,又过了一年,我们仍然没有可视化 Bevy 编辑器。我上面已经讨论过“如何”和“为什么”这个问题。
  • Bevy 周边产品的兴衰:哈哈,幸运的是,我没有再选择一家质量低劣的周边产品供应商。但我们仍然没有周边产品供应商。太遗憾了!

@cart 能预测未来吗? #

在去年的生日帖子里,我对未来一年做了一些预测。让我们看看我做对了多少!

Bevy 编辑器:今年,我们将开始在“可视化场景编辑”领域进行尝试。我希望在年底之前以“最小可行产品”的方式验证基本场景编辑工作流程。

遗憾的是,又过了一年,我们仍然没有可视化 Bevy 编辑器。我上面已经讨论过“如何”和“为什么”这个问题。

Bevy 资源:我们将添加资源预处理(在开发时优化和处理资源,例如预编译着色器),这是现代游戏开发的关键部分。这将实现更快的资源加载、更小的 CPU 和 GPU 内存占用、存储在文件系统中的每个资源导入配置以及更小的部署应用程序大小。

Bevy 资产 V2 还没有完全进入 Bevy 0.11,但它已经进入了最终审查阶段,应该会在 **Bevy 0.12**(10 月中旬)发布。

Bevy UI:现在我们有一个合理的类 DOM 内核。今年,我们将完善 Bevy UI 小部件的定义方式,提高定义 UI 树的可用性,解决层次化 UI 事件处理,并探索更高级别的 数据流(例如“反应性”)。这将与 Bevy 编辑器并行开发,Bevy 编辑器将使用 Bevy UI 并证明其模式的有效性。

虽然我们在许多方面都改进了 Bevy UI,但我们并没有在上述任何方面取得进展。填补 Bevy UI 的空白是我“尽快开始构建编辑器”计划的第一步。我从 *明天* 开始这项工作。

Bevy 场景:场景将采用更漂亮的格式,支持场景嵌套和场景属性重载。这些功能将与 Bevy 编辑器并行开发,以确保体验的一致性和舒适性。

场景 确实采用了更漂亮的格式,但我们没有添加对场景嵌套或属性重载的支持。我会说这算是部分胜利吧!

Bevy ECS:我们将合并“无状态”ECS,使系统更容易更清晰地依赖其他系统的变化,并解决 Bevy ECS 中一些最大的剩余用户体验问题。

我们确实以 ECS Schedule V3 的形式合并了“无状态”ECS。很棒!

新的 Bevy 手册:我们将用新的 Bevy 手册替换当前的 Bevy 手册。这将是一个迭代过程。我更关心的是为社区 Bevy 手册开发打开大门,并将此融入到我们的开发者文化中,而不是在这里实现特定的里程碑。我们拖延了太久。

我们没有用新的 Bevy 手册替换 Bevy 手册。不过,我们最终为贡献打开了大门,并 开发了 一种 草稿流程。我们有 新手册内容 在处理中,我们应该很快开始合并。总之:我们没有达到我的预期,但事情已经开始运作了!

Bevy 的下一年 #

next year

我不会再详细说明“下一年的计划”,因为我已经两次在预测方面表现不佳。Bevy 社区和我对 Bevy 的开发采取了一种相对有机和反应性的方法。当实际上开发并非如此进行时,列出一长串“计划”是没有意义的。

话虽如此,以下是我对 Bevy 的下一年的一些个人希望、梦想和个人优先事项。

  • 视觉场景编辑器:随着资产系统工作的完成,我想将注意力集中在开发视觉场景编辑工作流(以及完善相关领域的 Bevy UI)上。
  • 嵌套 Bevy 场景:开发者需要场景文件具有可组合性才能开发游戏。他们不应该需要降低到代码级别来组合多个场景。我们应该为场景添加嵌套功能(并参考现有的第三方 Bevy 插件,例如 bevy_proto 作为灵感来源)。
  • 发布 Bevy 资产 V2Bevy 资产 V2 已经进入了最终审查阶段。我们确实希望尽快发布它,因为它将为场景驱动的工作流和其他视觉资产编辑场景提供支持。
  • 合法的 Bevy 实体:如上所述,我们已经达到了需要一个合法的 Bevy 实体(例如 Bevy 基金会)来维护项目健康的程度。

我们有 大量的其他工作在处理中,但我今年将重点关注这些内容,以传达我的个人优先事项。

最后提醒大家,你们应该写自己的 Bevy 生日博客文章。在这里提交

如果你对这些内容感到兴奋,我们非常欢迎你的帮助!查看我们在 GitHub 上的代码,开始参与 Bevy 社区,并考虑 赞助我们的工作,以确保我们能够继续构建和引领这个雄心勃勃的项目。

我期待着与你们一起度过另一个充满 Bevy 的一年!

- @cart