Mesh のパフォーマンス ガイドライン
パフォーマンス
この記事では、Mesh でコンテンツを作成するときのパフォーマンスの重要性について説明します。 フレームレートは、パフォーマンスを合理化する最も簡単な単位です。 通常、フレームレートは "フレーム/秒" (fps)、またはアプリケーションが 1 秒あたりに画像をレンダリングできる回数で測定されます。 コンテンツが最適なフレーム レートで動作しないと、ユーザー エクスペリエンスは大きく損なわれる可能性があります。 Meshには、品質フレームレートの追跡と達成に役立つさまざまなツールとレコメンデーションが用意されています。
次の表に、Mesh がサポートするプラットフォームごとのターゲット フレームレートを示します。
PC | Android (Quest) |
---|---|
更新レートの監視 (最小 30fps) | 72fps |
単純なシーンと複雑なシーン
すべての 3D 開発と同様に、Mesh では、視覚的な忠実性とパフォーマンスの間にトレードオフがあります。 Mesh を実行しているマシンによっては、特にシーンが複雑な場合にパフォーマンスが低下することがあります。
パフォーマンスは財務予算と考えてください。 もし 100 ドルの予算があるとしたら、複雑な環境のレンダリングに 60 ドル、高度な物理をシミュレートするのに 40 ドル、ビジュアル スクリプトに 20 ドルを費やすことはできません。最終的に予算を超過することになります。 開発者は、視覚的な忠実性、相互作用の複雑さ、ユーザーの数、およびその他のシステムの間でトレードオフを行う必要があります。 Mesh チームは、 パフォーマンスしきい値の一覧を生成しましたが、これはルールではなく、開発ガイドです。
プロファイリング手法
通常、Mesh の作成環境には 3 つの手順が含まれます。
- Unity でコンテンツを作成する
- Microsoft Mesh にアップロードする
- Mesh アプリでコンテンツを実行する
手順 1 では、Mesh 環境の生成に使用する Unity プロジェクトに必要な Mesh ツールキット パッケージにあるコンテンツ パフォーマンス アナライザー (CPA) とパフォーマンス プロファイラーの組み合わせを使用することをお勧めします。 手順 2 の間に、CPA ツールが自動的に実行されます。 最後に、手順 3 の最終段階で、Mesh の組み込みのパフォーマンス プロファイラーを使用してプロファイリングを行う必要があります。
パフォーマンスを分析するためのツール
コンテンツ パフォーマンス アナライザー (CPA)
Mesh エクスペリエンスのパフォーマンスを最大化するには、コンテンツ パフォーマンス アナライザー (CPA) を使用することをお勧めします。 CPA ツールは、作成時にコンテンツを静的に分析できます。 CPA を使用して、三角形の数、バッチ、テクスチャ メモリ使用率などを監査できます。 これにより、コンテンツが Mesh にアップロードされる前に、コンテンツの最適化の問題と機会をキャッチできます。
CPA ツールを実行するには、メニュー項目から Mesh ツールキット>、コンテンツ パフォーマンス アナライザーを選択します。
問題と提案は、Unity のエディター ウィンドウから報告されます。
重要
コンテンツを Mesh にアップロードすると、CPA アナライザーの一部が自動的に実行されます。 すべてのテストを自動的に実行できるわけではないため、開発プロセスの一部として手動で CPA を実行することをお勧めします。
パフォーマンス プロファイラー
パフォーマンス プロファイラーは、Mesh プロジェクトのフレーム レート、シーンの複雑性、すべてのプラットフォームでのメモリ使用量を確認するためのシンプルなウィンドウを表示します。 パフォーマンス プロファイラーには、Mesh アプリ内およびMesh ツールキット 内からアクセスできます。
Mesh アプリでパフォーマンス プロファイラーを表示するには、設定パネルを開き、 For developers>、パフォーマンス プロファイラーを選択します。 パフォーマンス プロファイラーがウィンドウの上部中央に表示されます。
パフォーマンス プロファイラーを使用する場合は、赤いボックスで表示され、'x' とマークされた 見つからないフレーム を探します。 見つからないフレームがある場合、コンテンツが Mesh のターゲット フレームレートに達していないことが示され、最適化作業が必要な場合があります。 シーンの複雑性とメモリ使用量は、見つからないフレーム インジケーターの下に表示されます。 これらの数値は、コンテンツが Mesh のターゲット フレーム レートを満たしていない理由を示している可能性があります。
メトリックが Mesh の推奨パフォーマンスのしきい値を満たしていない場合、パフォーマンス プロファイラーのテキストは赤に変わります。 パフォーマンスのしきい値についての詳細は、次のセクションで一覧表示されています。
重要
バッチは Mesh アプリ内に表示できません。 Unity エディター内でのみ使用できます。
また、メモリ使用量が急速に変化したり、アプリケーションのメモリ制限に近づいたりするのを防ぐために、下部のメモリ バーにも注意する必要があります。
Unity エディターでパフォーマンス プロファイラーを表示するには、シーンに Mesh Emulator Setup コンポーネント があることを確認します。 [Initial Screen Count] の設定が 0 になっていることを確認します。 この値が 1 以上の場合、再生時にパフォーマンス プロファイラーを切り替えることはできません。
Unity の [Play] ボタンをクリックして再生モードに切り替え、'v' キーを使用してパフォーマンス プロファイラーをオンに切り替えます。 パフォーマンス プロファイラーは、ゲーム ウィンドウの上部中央に表示されます。
重要
Unity エディターでパフォーマンス プロファイラーを表示すると、バッチ数や、特定のサブシステムの実行にかかる時間 (ミリ秒) など、詳細な情報が表示されます。 これらのメトリックはパフォーマンスの相対的な近似値であるため、最終的なプロファイリングは Mesh アプリ内で行う必要があることに注意してください。
パフォーマンス プロファイラーの下部で測定されているミリ秒の時間について興味がある場合は、パフォーマンスしきい値のセクションの情報をご覧ください。
その他のツール
CPA とパフォーマンス プロファイラーはどちらも Mesh 用にカスタム ビルドされていますが、Unity のコンテンツをプロファイリングするための優れたツールもいくつかあります。
- Unity の Profiler
- Unity の Fram Debugger
- RenderDoc (重要: RenderDoc は Unity エディターからのみキャプチャを実行できます。Mesh アプリのビルドは機能しません)。
パフォーマンスしきい値
パフォーマンスの最適化は、開発しているシナリオと実現したいエクスペリエンスに応じて、バランスを取る動作になります。 Mesh でのシーンのレンダリングは、環境のコンテンツの作成方法が直接影響します。 現在のプラットフォームに対するレンダリングの提案を次に示します。
PC のレンダリングしきい値
Polycount | バッチ | 後処理 |
---|---|---|
<~500k Triangles | ~200 バッチ | 無効 |
テクスチャ | ライトマップ | Skybox の解像度 |
< ~160 MB | < ~80 MB | 2048x4096 |
Android (Quest) のレンダリングしきい値
Polycount | バッチ | 後処理 |
---|---|---|
<~80k Triangles | ~50 バッチ | 無効 |
テクスチャ | ライトマップ | Skybox の解像度 |
< ~16 MB | < ~20 MB | 1024x2048 |
上記の表ではシェーダーの制限が指定されていないことに気付かれるかもしれません。 Mesh は Unity の Universal Render Pipeline (URP) を使用するため、より安価な標準の URP シェーダー (Universal Render Pipeline/Baked Lit や Universal Render Pipeline/Simple Lit など) を使用することをお勧めします。 また、カスタム シェーダーの値についても理解しています。 通常は、ほとんどの環境のカスタム シェーダーを次のしきい値の範囲内に維持するようにしています。
Vertex math | Fragment math | テクスチャ |
---|---|---|
< 30 operation | < 120 operation | < 2 lookup |
重要
シェーダー操作のカウントは、シェーダーのパフォーマンスを計算するには不完全なメトリックです。シェーダー開発者は、Mesh で実行している自分のシェーダーをプロファイリングし、高いパフォーマンスで実行されていることを確認する必要もあります。
URP のレンダリング パイプラインを Mesh アプリ用に構成する方法に興味がある場合は、プロジェクトの \Library\PackageCache\com.microsoft.mesh.toolkit\mesh.toolkit.uploader\Assets\URP ディレクトリでプラットフォーム固有のレンダラーを調べることができます。
スクリプトのしきい値
Mesh を使用すると、Visual Scripting、Cloud Scripting、Mesh Physics、WebSlate を使用して対話型コンテンツを作成できます。 Unity エディターでパフォーマンス プロファイラーを表示すると、特定のサブシステムの実行にかかる時間 (ミリ秒) がプロファイラーの下部に表示されます。 テキストの色が緑から赤に変わった場合は、サブシステムがバジェットを超える可能性があることを示しています。 次の表は、これらのバジェットの詳細を示しています。
サブシステム名 | 最大フレーム バジェット | 説明 |
---|---|---|
動作 | 該当なし | すべてのローカルの MonoBehaviour スクリプト (C# と Visual) の更新にかかった時間 (ミリ秒) |
レンダー | 25% | シーンの CPU レンダリングの時間 (ミリ秒) |
WebSlate | 該当なし | シーン内の WebSlate を更新してレンダリングする時間 (ミリ秒) |
Phys Sim | 15% | PhysX シミュレーションのステップ実行時間 (ミリ秒) |
Phys Sync | 15% | すべての物理ボディの同期にかかる時間 (ミリ秒) |
Phys Effx | 10% | 特注の物理動作の更新にかかる時間 (ミリ秒) |
VS User | 15% | シーンでの Visual Script グラフの配置にかかった時間 (ミリ秒) |
VS Env | 10% | Visual Script インフラストラクチャの更新にかかった時間 (ミリ秒) |
VS Net | 10% | Visual Script のネットワーク状態の同期にかかった時間 (ミリ秒) |
上記に一覧表示した "Max Frame Percentage" の値は、一般的なコンテンツに基づいて推奨される値です。 開発者は、割り当てられた時間内にフレームを更新できるように、これらのシステムのバランスを取る必要があります。
パフォーマンスと最適化に関するリソース
Graphics performance fundamentalshttps://docs.unity3d.com/Manual/OptimizingGraphicsPerformance.html
Universal Render Pipeline (URP)https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@14.0/manual/index.html
SRP Batcherhttps://docs.unity3d.com/Manual/SRPBatcher.html
Single-pass instanced rendering and custom shadershttps://docs.unity3d.com/Manual/SinglePassInstancing.html