Bevy + WebGPU
发布日期:2023 年 5 月 17 日 作者:Carter Anderson (
@cart
@cart_cart
cartdev )
我很高兴地宣布,Bevy 的主分支现在支持 Web 上的 WebGPU 渲染!这意味着您可以 现在查看我们的仓库来体验它,前提是您拥有 支持 WebGPU 的网页浏览器(WebGPU 仍在推出过程中)。您也可以探索我们的 实时 WebGPU 示例。即将发布的 Bevy 0.11 版本 将内置 WebGPU 支持,预计将在大约一个月内发布!
什么是 WebGPU? #
WebGPU 是一个 令人振奋的新 web 标准,用于执行现代 GPU 图形和计算。它从 Vulkan、Direct3D 12 和 Metal 中汲取灵感。事实上,它通常在这些 API 之上实现,作为底层。WebGPU 为我们提供了比 WebGL2 更多的 GPU 功能(例如计算着色器),并且有可能更快。这意味着 Bevy 的更多原生渲染器功能现在也适用于 web。它还使用新的 WGSL 着色器语言。我们对 WGSL 随着时间的推移所取得的进步感到非常满意,并且 Bevy 在内部使用它来处理我们的着色器。我们还添加了导入等可用性功能!但使用 Bevy,如果您愿意,您仍然可以选择使用 GLSL。
WebGPU 开始引起人们的关注,因为 Chrome 刚刚在 Chrome 113 中发布了 WebGPU 支持,这意味着拥有普通 Chrome 版本的用户可以开始测试它。Firefox 和 Safari 也正在开发中!
什么是 Bevy? #
对于那些不了解的人来说,Bevy 是一个用 Rust 构建的,令人耳目一新的简单跨平台数据驱动游戏引擎。它拥有现代且可扩展的 2D 和 3D 渲染器,一个一流的 ECS(实体组件系统),使用起来很愉快,丰富的功能,以及一个充满活力且开放的 开发人员社区。它目前支持 Windows、MacOS、Linux、iOS 和 Web。我们还正在进行 Android 支持的工作……以及对未来更多平台的雄心壮志!
您可以查看我们的 快速入门指南 来立即尝试它。它永远是免费且开源的!您可以在 GitHub 上获取完整的 源代码。查看 Bevy 资源,获取社区开发的插件、游戏和学习资源的集合。
Bevy 的 WebGPU 示例页面 #
Bevy 的原生示例也可以直接在您的浏览器中运行。这已经 适用于 WASM / WebGL2,但我们构建了一个 全新改进的 Bevy WebGPU 示例页面 来展示新的 WebGPU 后端。只需确保您 拥有兼容的浏览器,因为 WebGPU 仍在推出过程中!
工作原理 #
Bevy 建立在 wgpu 库之上,这是一个现代低级 GPU API,可以针对几乎所有流行的 API:Vulkan、Direct3D 12、Metal、OpenGL、WebGL2 和 WebGPU。会为给定平台选择最佳后端 API。它是一个“原生”渲染 API,但它通常遵循 WebGPU 的术语和 API 设计。与 WebGPU 不同,它可以提供对原生 API 的直接访问,这意味着 Bevy 享受着“两全其美”的境地
- 由给定操作系统 + 硬件组合的最佳 API 支持的快速且低级别的渲染
- 比 Vulkan 更容易上手的 API,这意味着 Bevy 插件开发人员可以轻松构建功能强大的跨平台渲染器功能
- 开发人员可以编写针对“默认”功能集的代码,它通常会在“任何地方”都能正常工作
- 开发人员可以选择加入原生功能“扩展”(例如光线追踪、VR 等),在支持这些功能的平台上,即使它们不受 WebGPU 规范的涵盖。wgpu 对公开新功能非常开放!一个 光线追踪提案 目前正在开发中,一些 “无绑定”渲染 功能已经实现(并且已在 Bevy 中公开),并且 Bevy 社区已经在进行一些 OpenXR 实验!
Bevy 从一开始就建立在 wgpu 上,这意味着支持 WebGPU 的大部分艰苦工作已经完成。但我们实际上直到最近才完成了最后一步工作,让 WebGPU 渲染得以实现,这要归功于 François Mockers 的努力(Bevy 的维护者之一)。他们重新设计了我们的一些渲染器初始化,以满足 WebGPU 初始化的异步要求。他们还调整了一些渲染器功能,使其兼容。François 还构建了我们酷炫的新 WebGPU 示例页面!
为 WebGPU 编译 Bevy 应用 #
WebGPU 支持将在 下一个 Bevy 版本(**Bevy 0.11**)中发布。这意味着 当前的 Bevy 版本 不支持 WebGPU!如果您想立即测试 Bevy + WebGPU,只需使用 Bevy 的 main
分支
git clone https://github.com/bevyengine/bevy
从那里开始,在 设置 wasm-bindgen 后,您可以使用以下命令为 WebGPU 构建任何 Bevy 示例
cargo run -p build-wasm-example -- --api webgpu load_gltf
您可以用任何 Bevy 示例 的名称替换 load_gltf
示例。
请注意,当 为 Web 构建您自己的 Bevy 应用 时,WebGL2 仍然是默认的后端。这种情况将持续下去,直到 WebGPU 支持变得更加普遍。