WebAssembly Threads
线程允许运行时同时使用多个处理器。除了性能提升之外,这还可以同时执行两个或多个任务。对于 Wonderland Engine,最显著的影响是在转码 basis 纹理时,现在能够实现平滑的帧率。
浏览器支持
WebAssembly 线程自Chrome Desktop 74 / Chrome Android 88默认启用。
由于 Oculus 浏览器紧随 Chrome for Android 版本发布,这意味着 Oculus Quest 和 Oculus Quest 2 将能在即将到来的版本中利用 WebAssembly 线程的强大功能。
Firefox 自79.0 版本起支持 WebAssembly 线程,该版本于 2020 年 7 月 28 日发布。
游戏引擎的应用
线程允许同时进行工作或仅仅通过更强的能力进行工作。
通过后者,可以加速 CPU 密集型任务,如同时转码多个 Basis 纹理。
前者允许在进行跨越大部分或多于单帧的 CPU 密集型任务时,同时进行渲染。
除加载资产外,物理是一个很好的例子。在开始渲染场景的静态部分时,游戏引擎可以同时模拟动态物体。
对 WebXR 的意义
在 WebXR 尤其是虚拟现实中,以平滑的帧率进行渲染应该是应用程序的首要任务。
由于渲染通常占用了大部分处理能力,只剩下少量几毫秒的时间块,要在没有卡顿的情况下执行较长的处理任务非常困难。
执行此类任务时,需要使用 service worker / 线程以便在它们运行时继续进行渲染。
Wonderland Engine 的实现
随 0.7.3 版发布,Wonderland Engine 在可用的情况下通过内部作业系统利用 WebAssembly 线程。
如果_不可用_,则会退回到没有线程的运行时加载。您将在浏览器控制台中的第一行之一看到“WASM Threads is supported”或“WASM Threads is not supported”。
虽然 Wonderland Engine 目前仅使用作业系统来加速和平滑场景的初始加载,但我们将逐步将更多任务移入线程。 这将在不需要您更改任何内容的情况下提高您项目的性能。