Version: 2022.3
言語: 日本語
WebGL ビルドのデバッグとトラブルシューティング
WebGL のネットワーク

WebGL のパフォーマンスに関する考慮事項

一般に、WebGL グラフィックス API はハードウェアアクセラレーションレンダリングに GPU を使用するため、GPU 上のネイティブのアプリケーションに近いパフォーマンスを得られます。唯一の例外は、WebGL API 呼び出しとシェーダーを OS グラフィック API (通常は Windows の DirectX、Mac と Linux の OpenGL) に変換するためのわずかなオーバーヘッドです。

CPU では、Emscripten がコードを WebAssembly に変換します。そのため、パフォーマンスは使用するウェブブラウザーに依存します。詳細については、Unity のブログ WebAssembly Load Times and Performance を参照してください。

以下は、注意しなければならない追加的な考慮事項です。

  • JavaScript 言語は、マルチスレッドや SIMD をサポートしません。
  • これらの機能の恩恵を受けるコードは、他のコードより遅くなる傾向があります。
  • WebGL のスレッドや SIMD のコードをスクリプトに書き込めません。ただし、一部のエンジンのパーツはマルチスレッドや SIMD に最適化されているため、これらは WebGL 上で低パフォーマンスです。例えば、WebGL のスキニングには、マルチスレッドと SIMD の最適化の両方が適用されています。

ヒント: Unity が WebGL 以外のプラットフォームで異なるスレッドに作業を分配する方法は、Unity の新しいタイムライン プロファイラー を参照してください。

パフォーマンスに影響する WebGL の設定

パフォーマンスを向上させるには、WebGL の Player 設定で、Other Settings > Stack Trace を展開して Exception supportNone に設定します。

WebGL のプロファイリング

WebGL は、Unity のプロファイラーをサポートします。設定方法について詳しくは、プロファイラー のドキュメントを参照してください。

バックグラウンドタブでの WebGL コンテンツ

Run in backgroundWebGL プラットフォームのプレイヤー設定 で有効になっている場合、または Application.runInBackground を有効にする場合、キャンバスやブラウザーウィンドウがフォーカスを失っても、コンテンツは引き続き実行されます。

ただし、ブラウザーはバックグラウンドタブで実行されているコンテンツを減速する場合があります。コンテンツのタブが表示されない場合、コンテンツはほとんどのブラウザーで 1 秒に 1 回しか更新されません。これにより、デフォルト設定の Time.time の処理速度が通常よりも遅くなることに注意してください。なぜなら、Time.maximumDeltaTime のデフォルト値が 1 秒より短いためです。

WebGL パフォーマンスの減速

ある状況では、CPU の使用を減らすために低いフレームレートで WebGL コンテンツを実行したい場合があります。例えば、他のプラットフォームでは、Application.targetFrameRate API を使ってそれを行うことができます。

パフォーマンスを減速したくない場合、この API に高い値を置くよりもむしろ、デフォルト値 –1 を設定します。こうすることにより、ブラウザーのレンダリングループでもっとも滑らかなアニメーションにフレームレートが調整され、Unity がそのメインループでターゲットフレームレートを調整するよりもよい結果が得られる場合があります。

WebGL ビルドのデバッグとトラブルシューティング
WebGL のネットワーク