Wonderland Engineの最適化
WebXRアプリでより複雑なアプリケーションやシーンを可能にするために、Wonderland Engineはさまざまな最適化を実装しています。以下にその一部を紹介します(網羅的ではありません)。
レンダリングパフォーマンス
フレームの高速なレンダリングをターゲットにした最適化。
二重四元数シーングラフ
従来のシーングラフが行列を使用して実装されるのに対し、Wonderland Engineのシーングラフは二重四元数を使用しています。
二重四元数は4x4行列の半分のメモリしか必要とせず、結合操作も少なくて済みます。
二重四元数は回転と平行移動のみを表すため、別途スケーリングベクトルでそれを補完します。
皮膚化においては他の方法よりも体積をより良く保持するため、二重四元数は特に有益です。シーングラフと統合されることで、これがうまく機能します。
ランタイムバッチ処理
Wonderland Engineは実行時にメッシュを結合し、複数のメッシュを一度のドローコールで描画できるようにします。各メッシュが通常異なるマテリアルを使用するため、バッチ内の部分を異なる方法で描画できるよう、マテリアルリストを使用する特殊なシェーダーを持っています。
テクスチャは自動的に「テクスチャアトラス」に結合されます。
この最適化により、同じシェーダーを共有している限り、数千のドローコールを1つにまとめて大幅にドローコールを減らすことができます。
圧縮テクスチャとテクスチャストリーミング
GPU上で圧縮テクスチャフォーマットを使用することで、Wonderland EngineはGPUメモリをより効率的に使用します。同じ量のGPUメモリでより多くのテクスチャを保持でき、シーン内のテクスチャ解像度を高くすることができます。
さらに、Texture Streaming 機能により、カメラに見えるものを基にメモリ内外のテクスチャピースを切り替えます。これにより、メモリが制約されている環境でも高解像度テクスチャを使用できます。
WebAssembly (C++)
Wonderland EngineはC++で記述され、WebAssemblyにコンパイルされています。
WebAssemblyはWonderland Engineに対し、JavaScriptに比べてメモリ使用や性能向上のためのより大きなコントロールを提供します。計算集約的な機能、例えばシーングラフの変換を計算する機能や、バッチ処理のようなメモリ集約的な機能をはるかに効率的に実装できます。
WebAssembly SIMD
WebAssemblyのSIMD命令により、単一の命令で複数のデータを処理することができます。これにより、ベクトル演算が劇的に高速化されます。
WebAssembly SIMDは、2023年3月以降、主要なすべてのブラウザでサポートされています。
データ指向設計
Wonderland Engineのシーングラフとコンポーネントシステム、その他のコードベースの部分は、データ指向設計 (DOD) に従っています。DODは、データがより効率的に処理されるようにコードを記述する方法で、CPUのキャッシュ使用を改善し、予測実行をサポートします。
ロード時間
ロード時間を短縮するための最適化。
バイナリシーンフォーマット
テキスト(例:gltf
やobj
ファイル)をWebGL用にバイナリへと解析する操作はエディタ内で既に行われているため、データは直接バイナリ形式でランタイムに渡されます。
このバイナリデータは、ランタイムがレンダリングに使用するための最小限の労力で済むように配置されています。
また、例えばメッシュデータに対して量子化を行うことも可能です。メッシュのプロパティのいくつかは、値の範囲が既知の場合、頂点ごとに少ないビットで格納することができます。
基本ユニバーサル画像圧縮
圧縮テクスチャフォーマットサポートはデバイスごとに異なります。Basis Universalを使用することで、画像を単一のフォーマットに圧縮し、それをデバイス特有の圧縮GPUテクスチャフォーマットに変換(「トランスコード」)できます。
アニメーション圧縮
量子化を使用し、冗長なキーフレームを削除してアニメーションのサイズを縮小します。
ランタイムサイズ
WebAssemblyバイナリサイズを小さく保つことに特に注意を払っており、依存関係のフットプリントも低く保っています。ランタイムはダウンロード最初の要素の一つだからです。
現在、WebAssemblyランタイムは約580 kB gzippedであり、さらに縮小されています。
特殊な最適化
特定のプラットフォーム向けの最適化。
iOSおよびApple VisionのSafari
2022年に、私たちはiOS Safariでの優れたパフォーマンスを確保するためにレンダラーの大部分を書き直しました。
現在、Wonderland EngineのiOSでのパフォーマンスはAndroidでのパフォーマンスと比較可能です。Apple Vision PROのSafariは同じ性能特性を継承しているため、そこでも優れたパフォーマンスを提供しています。