WebAssembly Threads
スレッドを使用すると、ランタイムで複数のプロセッサを同時に使用できます。追加のパフォーマンスに加えて、これにより、同時に二つ以上のタスクを実行できるようになりました。Wonderland Engineにとって最も顕著な影響は、basisテクスチャをトランスコードする際のフレームレートが滑らかになったことです。
ブラウザサポート
WebAssemblyスレッドは、Chrome Desktop 74 / Chrome Android 88からデフォルトで有効になっています。
Oculus BrowserはChrome for Androidのリリースに密接に従っています, これにより、Oculus QuestとOculus Quest 2が今後のバージョンでWebAssemblyスレッドの力を活用できるようになります。
Firefoxは、79.0以降でWebAssemblyスレッドをサポートしています, 2020年7月28日にリリースされました。
ゲームエンジンへの利用
スレッドは、同時に作業を行ったり、より多くのパワーで作業を行ったりすることを可能にします。
後者の場合、複数のBasisテクスチャを同時にトランスコードするなどのCPU集約型のタスクを高速化できます。
前者は、レンダリングをCPU集約型のタスクと並行して実行することを可能にし、単一フレーム以上またはその大部分を占めることができます。
アセットの読み込みに加えて、物理演算はその素晴らしい例です。シーンの静的部分をレンダリングし始めると同時に、ゲームエンジンは動的オブジェクトをシミュレートすることができます。
WebXRへの重要性
WebXR、特にバーチャルリアリティでは、滑らかなフレームレートでのレンダリングがアプリケーションの最優先事項であるべきです。
通常、これが処理能力の大部分を占めており、数ミリ秒の小さなチャンクしか残されていないため、長時間の処理タスクを中断なく行うのは非常に困難です。
この種のタスクを行うには、サービスワーカー/スレッドを使用して、実行中にレンダリングを継続できるようにする必要があります。
Wonderland Engineでの実装
0.7.3リリースでは、Wonderland Engineは利用可能であれば、内部ジョブシステムを通じてWebAssemblyスレッドを活用しています。
利用可能でない場合、スレッドなしで実行されるランタイムを読み込むバックアップが使用されます。 ブラウザコンソールの最初の行の一つとして、「WASM Threads is supported」または「WASM Threads is not supported」が表示されます。
現在、Wonderland Engineはシーンの初期読み込みを高速化し、スムーズにするためにジョブシステムを使用していますが、今後はますます多くのタスクをスレッドに移行する予定です。 これにより、何も変更せずにプロジェクトのパフォーマンスが向上します。