
Web端性能的重大提升,即将到来!
大约两年前,所有主流浏览器都已支持 WASM(WebAssembly)SIMD。SIMD 的全称是“单指令多数据”(Single Instruction, Multiple Data),这项技术允许 CPU 进行并行计算,通常能加速整个程序的运行。正因如此,我们最近尝试了这项技术,结果令人非常满意。
Web(网页)平台对性能的需求
Web平台作为一个可行的目标常常被忽视,因为它环境不够理想,且普遍被认为性能较差。这种看法某种程度上是正确的:网页环境有许多与安全相关的限制需要考虑——例如,用户必须先与游戏画面交互,浏览器才会允许播放任何声音。此外,由于带宽和兼容性原因,你很少能在浏览器中看到高画质游戏。相比之下,直接在操作系统上原生运行软件通常能获得更好的性能。
但别低估网页平台的潜力。自 Flash 游戏时代以来,网页技术已经取得了长足进步。不仅玩网页游戏的人数逐年增加,标准和浏览器的功能和性能也在逐年提升。这就是为什么我们对 WASM SIMD 感兴趣。
WASM SIMD 基准测试
我们的基准测试专家 Hugo Locurcio(更广为人知的名字是 Calinou)在我制作的一个压力测试中为我们运行了数据。我们想比较标准构建和启用 WASM SIMD 的构建之间的性能差异。
注:你可以尝试复现他的结果,但请注意他的机器配置非常强悍。以下是他的电脑规格:
CPU:Intel Core i9-13900K
GPU:NVIDIA GeForce RTX 4090
内存:64 GB(2×32 GB DDR5-5800 CL30)
SSD:Solidigm P44 Pro 2 TB
操作系统:Linux(Fedora 42)
我基于 passivestar 最初制作的场景构建了一个 Jolt 物理引擎压力测试。通过不断向装置中增加更多木桶,我们可以轻松测试 WASM SIMD 构建与其他构建的性能差异:
请注意:一旦物理引擎进入“死亡螺旋”(spiral of death),无论是否启用 SIMD,帧率通常会降至个位数。这些测试并不能证明 CPU 计算速度提升了 10 倍到 15 倍,而是表明在相同机器和相同条件下,游戏对帧率下降的抵抗力更强。这里的 1.5 倍到 2 倍数据更能代表 WASM SIMD 带来的性能提升。
在物理引擎中,死亡螺旋指的是一种性能急剧下降的恶性循环状态,通常发生在物理模拟的计算负载超出系统处理能力时。
- 触发条件:
当物理引擎需要处理大量动态物体(如测试中不断增加的木桶)时,碰撞检测、刚体运动计算等任务的复杂度会呈指数级增长。
- 例如:100 个木桶互相碰撞的计算量远不止 100 倍于 1 个木桶,因为每新增一个物体都需要与所有现存物体进行交互检测。
- 恶性循环:
帧率下降 → 物理引擎需要更多时间计算同一帧的模拟 → 帧间隔(delta time)变长 → 物理引擎被迫用更大的时间步长(timestep)追赶现实时间 → 导致模拟精度降低(如物体穿透、速度异常)→ 进一步引发更多错误计算 → 帧率继续暴跌。
最终,系统可能陷入个位数帧率,甚至完全卡死。
- SIMD 的作用:
SIMD通过并行计算加速物理运算,可以延缓或减轻这种螺旋的出现。例如:
- 原本在 100 个木桶时就会触发的死亡螺旋,启用 SIMD 后可能到 200 个木桶时才出现。
- 但一旦计算量突破临界点(如测试中的“增加6次100个木桶”),SIMD 也无法完全避免崩溃,只是让游戏在极端情况下更“抗压”。
这对你的游戏来说意味着什么
从 4.5 dev 5 版本开始,你的网页游戏将运行得更流畅,而你无需做任何额外工作。尤其是在 CPU 负载较高的情况下。虽然它不是优化性能不佳的游戏的万能解决方案,但仍然会有所帮助。另外请注意,它无法解决 GPU 渲染瓶颈问题。
需要明确的是,压力测试的本质是测试最坏情况,因此在正常场景中你可能看不到如此巨大的改进。但最坏情况发生时能有如此显著的提升,仍然令人欣慰。
可用性
Godot 4.5 版本的官方模板将仅支持兼容 WebAssembly SIMD 的浏览器,以保持模板体积小巧。我们通常希望尽可能兼容旧设备,但这次性能提升太大了,不容忽视。而用户使用过时浏览器的概率,相对于潜在收益来说太小了。
如果你需要使用不支持SIMD的模板,别担心。你可以通过 wasm_simd=no
构建选项,自行构建不支持 WebAssembly SIMD 的 Godot 编辑器和引擎模板。
下一步计划
正如上一篇文章《.NET Web原型》中提到的,Godot官方正在全力实现 C#/.NET 的Web端导出功能。目前已经有了一个前景良好的原型,只需要确保它达到生产就绪状态。
那篇文章中还提到,官方希望专注于改进资源加载机制。在游戏启动前预加载整个游戏,会阻碍 Godot 在商业网页游戏中的应用。一旦有改善这一问题的方案落地,我会第一时间和大家分享。
文章版权声明:本文由[沫萝ㅤ]原创发布,版权所有。
未经书面授权,禁止任何单位及个人以任何方式进行转载、摘编、复制或建立镜像。违反上述声明者,将依法追究其相关法律责任。