WebAssembly スレッド
スレッドを使用することにより、ランタイムは複数のプロセッサを同時に利用できます。 これは追加のパフォーマンスの他に、同時に2つ以上のタスクを実行することを可能にします。この機能によって、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日にリリースされました。
ゲームエンジンでの利用
スレッドを使用することで、同時に作業を行うことができたり、より強力に作業を行うことができます。
後者では、CPUを多く使用するタスク、例えば複数のBasisテクスチャを同時にトランスコードする作業を高速化できます。
前者では、1つ以上のフレームを占めるCPUを多く使用するタスクと並行してレンダリングを実行できるようになります。
アセットの読み込み以外では、物理演算が良い例です。静的なシーンの一部をレンダリングし始めると、同時に動的オブジェクトをシミュレートできます。
WebXRにおける重要性
WebXR、特にバーチャルリアリティでは、スムーズなフレームレートでレンダリングすることがアプリケーションの最優先事項であるべきです。
通常、これが処理能力の大部分を消費し、数ミリ秒の小さな時間枠しか残りません。そのため、長時間処理を伴うタスクをスムーズに実行することは非常に難しいです。
これらのタスクを実行するために、レンダリングが続く間にサービスワーカー/スレッドを使用して、処理を継続する必要があります。
Wonderland Engineでの実装
0.7.3リリースにより、Wonderland EngineはWebAssemblyスレッドを内部ジョブシステムを通じて利用可能であれば使用します。
利用可能でない場合は、スレッドを使用せずに実行するランタイムをロードします。ブラウザコンソールの最初の行の1つで、「WASM Threads is supported」または「WASM Threads is not supported」が表示されます。
現在のところ、Wonderland Engineはシーンの初期ロードを高速化して滑らかにするためだけにジョブシステムを使用していますが、今後徐々により多くのタスクをスレッド化していく予定です。これにより、ユーザーが何も変更することなく、プロジェクトのパフォーマンスが向上します。