パフォーマンス最適化の第一歩
Unreal Engine 5(UE5)でゲーム開発を進めていると、誰もが一度は「フレームレートが落ちる 」「動作がカクカクする 」といったパフォーマンスの問題に直面します。しかし、どこに原因があるのか、闇雲に設定を変えても解決には至りません。
パフォーマンス最適化の第一歩は、「どこがボトルネックになっているのか 」を正確に特定することです。UE5には、この問題特定のために非常に強力で基本的なツールが用意されています。それが、コンソールコマンドのStatsです。
本記事では、UE5初心者から中級者の方を対象に、パフォーマンス問題解決の鍵となるStatsコマンドの基本的な使い方から、具体的なボトルネックの特定手順までを、実践的な視点から徹底的に解説します。
Statsコマンドとは
Statsコマンドは、ゲームの実行中にCPUやGPUが各処理にどれだけの時間を費やしているかをリアルタイムで画面に表示するためのデバッグツールです。これを使うことで、レンダリング、ゲームロジック、物理演算など、どの部分がフレームレート低下の主犯であるかを視覚的に把握できます。
専門用語解説:フレームレートとボトルネック
| 用語 | 意味 |
|---|---|
| フレームレート (FPS) | 1秒間に画面が更新される回数。値が高いほど滑らかに動きます。 |
| フレームタイム (ms) | 1フレームを描画するのにかかった時間(ミリ秒)。目標FPS(例: 60FPS)を達成するには、フレームタイムがその逆数(例: 16.67ms)を下回る必要があります。 |
| ボトルネック | システム全体のパフォーマンスを制限している最も遅い要素。CPUかGPUのどちらか、あるいは特定の処理(例: 描画、物理)がボトルネックになります。 |
stat unitコマンドの使い方
パフォーマンス調査の出発点となるのが、stat unitコマンドです。これは、CPUとGPUの処理時間を大まかに比較し、どちらがボトルネックになっているかを瞬時に判断できます。
実行方法
ゲーム実行中(PIEまたはスタンドアロン)に、キーボードの `(バッククォート/チルダ)キー を押してコンソールを開き、以下のコマンドを入力します。
💡 コンソールキーについて
デフォルトではバッククォートキーでコンソールが開きます。日本語キーボードの場合、半角/全角キーが干渉して開けないことがあります。その場合は
プロジェクト設定→Input→Console Keysでキーを追加するか、DefaultInput.iniにConsoleKeys=^などを追加してください。
stat unit
また、stat unitgraphを使用すると、フレームタイムの変動をグラフで視覚的に確認することもできます。
表示される情報と解釈
画面右上に以下のような情報が表示されます。
| 表示項目 | 意味 | ボトルネックの可能性 |
|---|---|---|
| Frame | 1フレーム全体の処理時間(ms)。この値が目標フレームタイムを超えるとFPSが低下します。 | 全体 |
| Game | ゲームロジック(BlueprintやC++コード)の処理時間(ms)。 | CPU (ゲームスレッド) |
| Draw | ドローコール(描画命令)の処理時間(ms)。 | CPU (レンダリングスレッド) |
| GPU | グラフィックボード(GPU)の処理時間(ms)。 | GPU |
解釈のポイント:
Gameが高い場合(例: 15ms以上): CPUのゲームロジックがボトルネックです。複雑なBlueprint、大量のティック処理、AI処理などを見直す必要があります。Drawが高い場合(例: 15ms以上): CPUのレンダリングスレッドがボトルネックです。ドローコールが多すぎる(オブジェクトが多すぎる)、またはマテリアルの複雑さが原因かもしれません。GPUが高い場合(例: 15ms以上): GPUがボトルネックです。シェーダーの複雑さ、ポストプロセス、高解像度テクスチャ、オーバードローなどが原因です。
詳細Statsコマンド
stat unitで大まかなボトルネックが特定できたら、次はより詳細なコマンドで原因を特定します。
CPUボトルネック(GameまたはDrawが高い場合)
stat game
ゲームスレッドの詳細な処理時間(AI、物理、ティックなど)を表示します。
stat scenerendering
レンダリングスレッドの詳細な処理時間(シャドウ、ライティング、カリングなど)を表示します。Drawが高い場合に特に有効です。
stat streaming
テクスチャやジオメトリのストリーミング状況を表示します。ロード時のカクつきの原因特定に役立ちます。
GPUボトルネック(GPUが高い場合)
stat gpu
GPUの処理を詳細に表示します。どのパス(Base Pass、Shadow Depths、Post Processingなど)に時間がかかっているかが分かります。
stat rhi
RHI(Rendering Hardware Interface)レベルでの描画コマンドの実行状況を表示します。ドローコール数やプリミティブ数などを確認できます。
実践的な組み合わせ例
| ボトルネック | 最初に試すコマンド | 次に試すコマンド |
|---|---|---|
| CPU (Game) | stat unit | stat game |
| CPU (Draw) | stat unit | stat scenerendering |
| GPU | stat unit | stat gpu |
よくある間違いとベストプラクティス
よくある間違い
- 最適化を始める前に
stat unitを確認しない: GPUがボトルネックなのに、ゲームロジック(Blueprint)の最適化に時間を費やすなど、見当違いの努力をしてしまいます。必ずstat unitでCPU/GPUのどちらがボトルネックかを確認しましょう。 - エディタ内で計測する: エディタ内での実行(PIE)は、エディタ自体の負荷やデバッグ機能の影響を受けるため、正確なパフォーマンス計測には向きません。スタンドアロンゲーム またはパッケージ化されたビルド で計測するのがベストプラクティスです。
stat fpsで満足する:stat fpsはフレームレート(FPS)しか表示しません。フレームタイム(ms)やCPU/GPUの内訳が分からないため、ボトルネックの特定には不十分です。必ずstat unitを使いましょう。
ベストプラクティス
- 問題の再現性を確保する: パフォーマンスが低下する特定の場所や状況(例: 特定の敵が出現した瞬間、特定の視点)で計測を行いましょう。
- 変動を考慮する: 瞬間的な値だけでなく、数秒間観察して平均的な値や最大値を把握しましょう。
- プロファイラと連携する:
Statsコマンドはリアルタイムの概要把握 に優れていますが、より詳細な関数レベルの分析には、UE5標準のUnreal Insights などのプロファイリングツールと組み合わせて使用することが不可欠です。
Statsコマンド活用のポイント
UE5のパフォーマンス最適化は、勘や経験ではなく、正確なデータに基づいて行うべきです。そのための最も基本的なツールがStatsコマンドです。
| ステップ | コマンド | 目的 |
|---|---|---|
| 1. 大まかな特定 | stat unit | CPU(Game/Draw)とGPUのどちらがボトルネックかを判断する。 |
| 2. 詳細な深掘り | stat game / stat gpu など | ボトルネックとなっている処理(AI、描画パスなど)を特定する。 |
| 3. 最適化 | なし | 特定された問題箇所(Blueprint、マテリアル、設定など)を修正する。 |
| 4. 再計測 | stat unit | 最適化の効果を確認する。 |
このStatsコマンドを使いこなすことが、UE5での快適なゲーム体験を実現するための第一歩となります。まずはあなたのプロジェクトでstat unitを実行し、現在のボトルネックがどこにあるのかを確認してみましょう。