Gabriel Cuvillier 将《Doom 3》移植到浏览器中的经验总结
背景介绍
Gabriel Cuvillier 是 Continuation Labs 的高级软件工程师,他使用 WebAssembly 技术将经典游戏《Doom 3》移植到浏览器中。这次移植耗时7周,展示了 WebAssembly 当前在运行重量级桌面应用和游戏方面的潜力以及存在的不足。
《Doom 3》简介
《Doom 3》是一款恐怖第一人称射击游戏,最初于2004年发布,使用 id Tech 4 引擎。该游戏在商业上取得了巨大成功,销量超过350万份。2011年,id Tech 4 引擎以 GNU 通用公共许可证开源。
移植动机
Cuvillier 选择移植《Doom 3》是因为它是一个真实世界中的大型 C++ 程序,曾经是成功的 AAA 级游戏,且代码质量高。此外,id Tech 4 引擎是少数能够在单线程上运行的高端游戏引擎之一,这符合 Web 平台当前不支持多线程的现实。
技术挑战
- 性能要求:《Doom 3》本身对性能要求极高,尤其是在单线程环境下需要处理大量计算任务,如动态光照、骨骼动画、物理模拟等。
- WebAssembly 的限制:WebAssembly 是一种低级别的虚拟机,其性能无法与原生指令集相比。此外,WebAssembly 调用图形 API 时需要经过 JavaScript 层,增加了额外开销。
- 同步/异步问题:Web 平台是一个完全异步的环境,而 C/C++ 代码通常是同步的,这导致一些简单的操作(如同步读取文件)变得复杂。
其他移植案例
Cuvillier 提到,除了《Doom 3》之外,他还将2002年的游戏《Arx Fatalis》移植到 WebAssembly 中。虽然这款游戏的图形质量较低,但移植过程同样具有挑战性。
未来 WebAssembly 功能展望
Cuvillier 认为,当前最需要的功能是能够暂停/恢复 WebAssembly 运行时,这将有助于解决同步/异步问题。此外,Offscreen Canvas 也是一个重要的功能,它允许将图形应用的主代码运行在 Web Worker 中,从而减少同步/异步问题的影响。
对开发者的建议
Cuvillier 认为 WebAssembly 技术已经相当成熟,适合用于移植 CPU 密集型应用,如视频游戏、CAD 软件或大数据处理。然而,WebAssembly 技术栈学习曲线陡峭,且仍在快速发展,因此开发者需要投入足够的时间、资金和知识资源。
总结
Gabriel Cuvillier 的《Doom 3》移植项目展示了 WebAssembly 在运行复杂桌面应用方面的潜力,同时也揭示了当前技术的局限性。尽管存在挑战,WebAssembly 仍然是一个值得开发者关注和探索的技术。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。