テストとパフォーマンス分析 更新日時: 2024/10/30
このガイドでは、Unity VRアプリのパフォーマンス分析と不具合修正で使用するベースラインターゲット、推奨事項、ツール、リソース、一般的なワークフローを確認します。
VRアプリプロファイリングは、アプリのパフォーマンスに関するインサイトを提供し、問題やボトルネックを特定して取り除くのに役立ちます。まずはボトルネックに焦点を当ててから、解像度、ハードウェア、品質、構成などを一度に1つずつ変えていきます。
非VRバージョンのカメラリグを作成して、VR視点と非VR視点の間を簡単に切り替えられるようにします。これによりシーンをスポットチェックすることができ、サードパーティツールを使ったプロファイリングに便利です。
デバッグ中は、[プレイヤー設定] で[マルチスレッドレンダリング] を無効にすると便利です。これにより、レンダリング速度が低下し、フレーム時間をより明確に把握できます。作業を終えたら、また有効に戻してください。
メディアアプリは60FPSを目標にするとよいでしょう。 インタラクティブアプリでは、最低でも72FPSを達成しなければなりません。 様々な要因がMeta Questデバイスでフレームごとに実行できるドローコール回数に影響を与えます。以下にその例を挙げます。
パイプライン状態の変化 : これには、シェーダー、テクスチャ、メッシュ、そのようなドロー間の変化が含まれます。
メッシュとインスタンスメッシュを可能な限り共有する。 可能ならグローバルテクスチャー配列を使う。 バリエーションを生成しない、統合されたシェーダーの最少のセットを使う。 メインスレッドとレンダースレッドの容量 : レンダースレッドと、レンダースレッドにデータを準備および供給するメインスレッドで利用可能なリソースを検討します。
アニメーション、スキンニング、ネットワークなどのプロセスは、レンダースレッドの開始を遅らせ、ターゲットFPS内で実行可能なドローコールの数を減らします。 グラフィックAPIと使い方 VulkanとOpenGL ESの比較。 マルチスレッドレンダリング - 低遅延 vs.フレームビハインド。 バインドレステクスチャーと間接ドローの使用状況。 以下の表は、ドローコール範囲の例を示しています。結果は、上記の要因に基づいて異なる場合があります。
プラットフォーム ドローコール 説明 Quest 1
50-150
重いシミュレーション
Quest 1
150-250
中程度のシミュレーション
Quest 1
200-400
軽いシミュレーション
Quest 2、Quest Pro
80-200
重いシミュレーション
Quest 2、Quest Pro
200-300
中程度のシミュレーション
Quest 2、Quest Pro
400-600
軽いシミュレーション
Quest 3、Quest 3S
200-300
重いシミュレーション
Quest 3、Quest 3S
400-600
中程度のシミュレーション
Quest 3、Quest 3S
700-1000
軽いシミュレーション
重いシミュレーション : ほかのプレイヤーまたは多数のNPCからのシミュレーション、VoIP、ネットワーク、アニメーション、スキニングが大量にあるアプリ。例えば、マルチプレイヤーのシューターや利用者の多いソーシャルアプリなどです。中程度のシミュレーション : プレイヤーまたはNPCの数が少ない、サイズが中程度のワールド。例えば、単一プレイヤーのシューターや利用者数が中程度のソーシャルゲームなどです。ほとんどのアプリはこのカテゴリに入ります。軽いシミュレーション : エスケープルームゲーム、パズルゲーム、協力型ゲームといったパイプライン状態の変化が最小限のアプリです。三角形の予算はドローコールの予算と同じく、フレームごとの要素によって変動します。そのため、使える量を決めるのは困難です。三角形数予算はもっと流動的であり、フレームごとに変化する要素に依存する度合いも高くなります(詳しくは
タイルベースのレンダリングの仕組み を参照)。
複数のタイルに広がる三角形 : これらはコストが高くなります。
三角形の頂点シェーダーは、その範囲内のタイルごとに3回(頂点ごとに1回)実行されます。 三角形が大きくなるほど範囲内のタイル数が多くなりますが、タイルの境界線を予測するのは困難です。 頂点属性のメモリーアクセスパターン : これらは、頂点シェーダーの速度に影響します。
位置データ、スキンニングの重さ、アウトプット位置を計算するために必要なその他のデータ専用の頂点属性配列を割り当てます。ほかのものは、別々のインターリーブ頂点属性配列に配置します。この設定により、出力位置に影響する属性だけが考慮されるので、ビニングフェーズのスピードが上がります。 頂点属性 : 頂点シェーダーに送信する頂点属性の数と精度に注目します。
パフォーマンスを向上させるためには、NORMAL、TANGENT、TEXCOORD*などの使われていないチャネルを削除するか、可能であればチャネルを組み合わせます。 通常、フルの精度を必要とするのは、POSITIONチャネルだけです。ほかのチャネルを半精度まで圧縮し、ビジュアルクオリティを維持できるかどうか試してみてください。 以下に内部的に推奨される範囲を示します。結果は上記の要因により異なる場合があります。
プラットフォーム 三角形の数 Quest 1
350k-500k
Quest 2、Quest Pro
750k~1m
Quest 3、Quest 3S
1.3m~1.8m
パフォーマンスの問題をデバッグする前に、パフォーマンスを調整するためのベースラインとなる、明確なターゲットを設定してください。これらのターゲットは、理想のフレームレートが達成できていない場合やパフォーマンスに問題がある場合に、どこを狙って、何を見るべきかを教えてくれます。
一般的なガイドラインとして以下のデータポイントを使うことにより、カスタマイズしたベースラインを確立してください。特に明記がある場合を除いて、おおよその範囲で示されています。
Rift Sで80 FPS、Riftで90 FPS フレームあたり500〜1,000回のドローコール 毎フレーム1〜2百万個の三角形または頂点 このセクションでは、アプリの問題とボトルネックの診断に役立つUnityのツールについて詳しく説明します。
Unityプロファイラー(CPU/GPUの使用量) Unityビルトインプロファイラーは、フレームごとのCPUとGPUのパフォーマンス指標など、ボトルネックの特定に役立つ有用な情報を提供します。一貫した結果を取得して改善結果を測定するために、プロファイリング前にCPU/GPUレベルをロックします。Unityプロファイラーについて詳しくは、
プロファイラーマニュアル をご覧ください。
UnityプロファイラーをLink PC-VRアプリで使用するには、[Build Profiles (ビルドプロフィール)] で、[Development Build (開発ビルド)] と[Autoconnect Profiler (自動接続プロファイラー)] を選択し、アプリをビルドしてください。アプリを起動すると、自動的にプロファイラーが開きます。
スタンドアローンのMeta Questヘッドセット用アプリを開発している場合、adbまたはWiFiを使ってヘッドセットで実行されているアプリのプロファイリングをすることもできます。一貫したプロファイリング結果を取得し改善結果を測定できるようにするには、プロファイリング実行の前にCPU/GPUレベルをロックしてください。CPU/GPUレベルの設定については、
Android開発 ガイドをご覧ください。Unity GPUプロファイラーの使用手順については、
GPUプロファイラー ガイドをご覧ください。
Unityプロファイラーは、アプリのパフォーマンス指標を表示します。アプリが思うように動作しない場合は、システム全体の動作に関する情報を得る必要があります。
プロファイリングのオーバーヘッドのため、GPUプロファイラーから得られるドローコール総数は必ずしも正確ではない場合があります。ビルドをプロファイリングする際は、これを比較値として使います。
Unityには、FPS、ドローコール、三角形と頂点の数、VRAM使用量などのレンダリング統計をリアルタイムで表示するオプションがあります。ゲームビューで、ゲームビューの上部にある統計ボタンを押すと、リアルタイムのレンダリング統計を示すオーバーレイが表示されます。エディターで統計を確認することで、出されているドローコールの数とバッチ処理によって保存されているドローコールの数を見ることができ、シーンのバッチ処理の分析と改善に役立ちます(OverDrawレンダリングモードも同様に便利です)。
Unityは、シーン内でオーバードローを見るための特定のレンダリングモードを提供します。シーンビューコントロールバーから、ドロップダウン形式のレンダリングモード選択ボックス内でOverDrawを選択します。
このモードでは、半透明の色が重なり合い、オーバードローの「ヒートマップ」が作られます。色が濃くなっている部分は、オーバードローの多い領域です。
Unityフレームデバッガーを使用すると、任意のシーンのドローコールの順序を確認できます。現在デバッグ中ではない場合でも、Unityがどのようにシーンを組み立て、パイプラインの問題をデバッグしているのかを理解するのに役立ちます。
Unityビルトインプロファイラー(Unityプロファイラーと混同しないこと)は、ドローコールの数、最小/最大フレーム時間、三角形と頂点の数などを含むフレームレートの統計を、logcatを通じて提供します。
このプロファイラーを使用するには、Androidのadbドキュメントの
ワイヤレス使用方法 に記載されているとおり、TCPIPを介したADBを使ってWi-Fi経由でデバイスに接続します。次に、デバイスがヘッドセットにドッキングされている状態で、
adb logcatを実行します。
フレームバッファビューアーは、データがリアルタイムで受信される際に、フレームバッファを検査するメカニズムを提供します。これは、プレイテストセッションをモニターするときに特に役立ちます。有効にすると、キャプチャライブラリが、ネットワーク全体に縮小されたプレディストーションアイバッファをストリーミングします。 パフォーマンスデータビューアーは、以下の項目に対して、単一の連続したタイムラインによるリアルタイムのオフライン点検を行います。
CPU/GPUイベント センサー測定値 コンソールメッセージ、警告、エラー フレームバッファキャプチャ ロギングビューアーは、スレッドIDによってトラッキングされているさまざまなメッセージやエラーの未加工データへのアクセスを提供します。 コード内のほぼすべての定数は、プレイテスト中にリアルタイムでアップデートできるノブとして使うこともできます。 このセクションでは、Link PC-VR開発用のパフォーマンス分析ツールについて説明します。
Oculusパフォーマンスヘッドアップディスプレイ(HUD)は、Riftでアプリを実行しているときに、レンダリング、レイテンシ、パフォーマンスのヘッドルームのタイミングをリアルタイムで確認するための重要な、かつ使いやすいツールです。HUDは、PC SDKに付属のOculus Debug Toolから簡単にアクセスできます。詳しくは、Rift開発者ガイドの
パフォーマンスヘッドアップディスプレイ と
Oculusデバッグツール のセクションをご覧ください。
コンポジターミラーは、非同期タイムワープとディストーションを適用した状態で、ヘッドセットの表示をそのまま映し出す実験的ツールです。
コンポジターミラーを使うと、開発やトラブルシューティングでヘッドセットを装着する手間が省けるため、便利です。ホームUI、境界線、ゲーム内通知、トランジションフェードなど、ヘッドセットに表示されるものがすべて表示されます。コンポジターミラーは、ネイティブPC SDKで開発されたものか、ゲームエンジンで開発されたものかを問わず、あらゆるゲームやエクスペリエンスに対応しています。
OVRメトリックツールOVR MetricsツールOVRメトリックツールは、Meta Questアプリのパフォーマンス指標を提供するアプリです。
OVR Metricsツールは、アプリのフレームレート、熱、GPUとCPUのスロットリング値、1秒あたりのティアとステイルフレームの数を報告します。これはMetaの
ダウンロードページ からダウンロードできます。
OVR Metricsツールは、2つのモードで実行できます。レポートモードでは、完了後にVRセッションに関するパフォーマンスレポートが表示されます。レポートのデータは、CSVとPNGグラフとして簡単にエクスポートできます。
パフォーマンスHUDモードでは、OVR Metricsツールはパフォーマンスグラフを、どの実行中のMeta Questアプリ上にでもVRオーバーレイとしてレンダリングします。
このセクションでは、デバッグとパフォーマンス分析に役立つその他のツールについて説明します。
ETWとGPUView
ほとんどのUnity開発者にとってはUnityプロファイラーで十分ですが、場合によっては、ETWとGPUViewが、バックグラウンドプロセスとシステムレベルで競合するなどの問題のデバッグに役立つことがあります。ネイティブRift SDKでETWを使う方法の詳しい説明については、PC SDK開発者ガイドの
VRパフォーマンスの最適化 をご覧ください。コンテンツのすべてがUnity開発者に関係するわけではないとしても、有用な概念情報が含まれています。
Systrace
NVIDIA NSight
Mac OpenGLモニター
APITrace
このセクションでは、Android開発のためのパフォーマンス分析の基本的な手法について説明します。
Gfx.WaitForPresentがOculus Remoteモニターに頻繁に表示されるのは、よく見られる問題です。これはレンダーパイプラインが停止している時間を報告しているため、Unityがシーンをどのようにアセンブルしているかを理解するところからトラブルシューティングを始めてみましょう。出発点として、Unityフレームデバッガーが最適です。詳しくは、
Unityプロファイリングツール をご覧ください。