UE5にて動作がカクツクとき、何が原因で負荷が発生しているのか調べる必要があります。

本記事では統計データであるstat unitの項目の読み方、統計データから負荷ボトルネックを特定する基本、統計データの毎回自動表示する方法を説明します。

動作のボトルネック調査の第一歩は「stat unit」など統計データです。コンソールに「stat unit」を入力する方法もありますが、①画面の左上のメニューをクリックします。②統計データ、③Engine、④FPSにチェック、⑤UnitとUnitGraphにチェックを入れます。簡単な方をお使いください。

右側に細かい数字が出てきます。Frame、Game、Draw、RHIT、GPU time、DynRes、Draws、Primsなどの項目です。

これら数字からゲームスレッド(ゲームロジックやプレイヤーの入力処理など)、レンダリングスレッド(3Dモデルのレンダリング、テクスチャの適用、シェーダーの計算、光源の処理など)、またはGPUのいずれかにパフォーマンスのボトルネックがあるか判別に役立ちます。

公式の説明
https://dev.epicgames.com/documentation/en-us/unreal-engine/stat-commands-in-unreal-engine#unit

Frame(フレーム)
フレーム時間は、ゲームの1フレームを生成するのにかかった総時間です。ゲームスレッドと描画スレッドはフレームを終える前に同期するため、フレーム時間はこれらのスレッドのいずれかの表示時間に近くなることが多いです。

Game(ゲーム:)
フレーム時間がゲーム時間に近い場合、ゲームのパフォーマンスはおそらくゲームスレッドによってボトルネック(負の影響を受けている)になっています。

Draw(描画)
フレーム時間が描画時間に近い場合、ゲームのパフォーマンスはおそらくレンダリングスレッドによってボトルネックになっています。

GPU time(GPU時間)
デオカードがシーンをレンダリングするのにかかる時間を測定します。GPU時間はフレームに同期されているため、フレーム時間と似たようなものになる可能性が高いです。

RHIT
RHIスレッド時間はフレームに同期され、フレーム時間と似ている可能性が高いです。

DynRes
サポートされている場合(および有効になっている場合)、動的解像度は主画面のパーセンテージを副画面のパーセンテージで表示します。

以下画面の一番上に数値が、このプロジェクトの実際のfpsです。60fps出るはずが、何かがボトルネックになっており、48fpsしか出ていません。何がボトルネックなのでしょうか。

 

まずフレーム時間とゲームスレッドの比較

フレーム時間がゲーム時間に近い場合、それはゲームスレッドがパフォーマンスのボトルネックになっている可能性が高いです。ゲームスレッドは、ゲームロジック、AIの計算、物理演算などを処理します。この時間が全体のフレーム時間に占める割合が大きい場合、ゲームスレッドの最適化が必要です。

実際に以下を見ると、FrameとGameは近くないので、ゲームスレッドがボトルネックではないと判断できます。

 

フレーム時間と描画スレッドの比較

フレーム時間が描画時間に近い場合、描画スレッドがボトルネックであることを示します。描画スレッドは、3Dモデルのレンダリング、テクスチャのマッピング、シェーダーの適用など、画面に表示するための計算を行います。この時間がフレーム時間に占める割合が大きければ、描画関連の最適化が求められます。

実際に以下を見ると、FrameとDrawはとても近いです。レンダリングスレッドがボトルネックになっている可能性が高いです。

 

GPU時間の確認(GPU time)

GPU時間もフレーム時間と同様に、グラフィックカードがシーンをレンダリングするのにかかる時間です。GPU時間がフレーム時間に近い場合、GPU処理がボトルネックとなっている可能性があります。

 

RHIスレッドの時間(RHIT)

RHI(Render Hardware Interface)スレッドは、レンダリングを制御するための低レベルAPIと通信します。この時間がフレーム時間に近い場合、レンダリングAPIの呼び出しに問題がある可能性が指摘されます。以下は近くないので問題がなさそうです。

 

動的解像度の監視(DynRes)

無効になっていますが動的解像度が有効な場合、パフォーマンスを維持するために解像度が動的に変更されます。この設定の有効化とその効果もパフォーマンス分析に重要です。

 

毎回自動でエディタに統計データを表示する方法

エディタを再起動すると表示が消えてしまいます。消えないようにする方法はエディタの環境設定から、ビューポート、ルック&フィール、エンジン統計の保存をクリックします。これでエディタを再起動しても再表示されます。

 

アプリで書き出したり実行しながら統計データを確認

簡易なプレビューではなく、実際にアプリで書き出した時にも統計データをチェックしたいことがあります。実際に操作するとまた挙動が異なるものです。ブループリントにて、stat unitが実行されるようにします。Execute Console Commandを設定して、そこにstat unitなど統計データのコマンドを入力します。