UE5 GPU Visualizer 排查渲染负载原因的调试流程
【UE5】GPU Visualizerで描画負荷の原因を切り分ける方法|重いときの調査手順
問題点
Unreal Engine 5(UE5)でゲームを作っていると、機能を増やすうちに突然フレームレートが落ちることがあります。
「描画が重いから、とりあえずテクスチャを小さくしよう」「Naniteを切ればいいかな」と考えがちですが、原因が分からないまま設定を変えると、見た目を犠牲にしたのに改善しないこともあります。
この記事は、描画が重いときに CPU/GPUのどちらが問題かを確認し、GPU Visualizerで負荷の高い処理を探すための備忘録です。UE5.8の公式ドキュメントを参考にしています。UIや計測結果はGPU・RHI・プロジェクト設定によって異なります。
1. 最初にFPSではなくフレーム時間(ms)を見る
ゲームの目標が60 FPSなら、1フレームに使える時間は約16.7 msです。30 FPSなら約33.3 msです。
| 目標 | 1フレームの予算 |
|---|---|
| 60 FPS | 約16.7 ms |
| 30 FPS | 約33.3 ms |
FPSだけを見ていると、何が遅いのか判断しにくくなります。まずエディタ内のコンソールを開き、次を実行します。
stat unit
表示される Frame、Game、Draw、GPU に注目します。
- Game:主にゲームスレッド側の処理時間
- Draw:主に描画スレッド側の処理時間
- GPU:GPU側の処理時間の目安
- Frame:フレーム全体の時間
例えば GPU が単独で大きいなら、描画処理がボトルネックの可能性があります。一方、Game や Draw が長いなら、GPU向けの設定を削る前にCPU側を調べる方がよさそうです。
2. profilegpu でGPU Visualizerを開く
GPUが疑わしい場合は、問題が再現する場面でコンソールに次を入力します。
profilegpu
GPU Visualizer(GPU Profiler)が開き、対象フレームのGPU処理を階層的に確認できます。環境によってショートカット操作が異なることがあるため、コンソールコマンドを使うのが確実です。
私が見る順番は次の通りです。
- GPUフレーム全体の時間を確認する。
- 時間の長いイベント/パスを探す。
- そのパスが、シーンのどの要素に対応するか仮説を立てる。
- その要素だけを一時的に無効化して、もう一度計測する。
たとえば、調査候補には以下があります。
| 高負荷の候補 | 次に確認するもの |
|---|---|
| Shadow Depths / Shadow Projection | 動的ライト、影を落とすオブジェクト、Virtual Shadow Maps |
| Lumen関連 | GI・反射の設定、画面内の光源、品質設定 |
| Translucency | 半透明マテリアル、煙・炎などのパーティクル |
| Post Processing | 被写界深度、ブルーム、各種ポストプロセス |
| Niagara関連の処理 | パーティクル数、エミッタ数、GPU Simulation |
表示名やイベントの分類はUEのバージョンとレンダリング構成で変わります。この表は調査を始めるための分類であって、すべてのプロジェクトで同じ項目が出るわけではありません。
3. 描画負荷かどうかを解像度で切り分ける
画面のピクセル数に依存する処理が原因かを調べたいときは、比較用にスクリーンパーセンテージを変えます。
r.ScreenPercentage 100
これを基準に計測し、次に:
r.ScreenPercentage 50
同じ場面・カメラ位置で測定します。大きく改善する場合は、ピクセル数に依存する処理(描画・一部のポストプロセス・半透明など)を疑う手掛かりになります。
ただし、この変更は原因を探る実験です。画質やアップスケーリング条件も変わるため、改善したからといってそのまま50%固定を最終解にする必要はありません。テスト後は元の値に戻します。自動解像度設定やTSRとの組み合わせにも注意してください。
4. 半透明エフェクトが重いかを見る
煙や火花が大量に重なっている場合、オーバードローがGPU負荷の原因になることがあります。
ビューポートの View Mode から Shader Complexity を選ぶか、以下を使います。
viewmode shadercomplexity
この表示では、シェーダーの複雑さが色で可視化されます。真っ赤になっている箇所が必ず唯一のボトルネックとは限りませんが、半透明の描画が集中している場所を探す入口になります。必要に応じて Quad Overdraw 表示も確認します。
対策候補は、パーティクルの表示面積・重なり・数を減らすこと、マテリアルを見直すことです。最適化前後で同じ画面構図を撮って比較するのが大切です。
5. 「改善できた」を確かめる記録方法
以下の表を埋めておくと、設定を変更した意味が見えやすくなります。
| 条件 | 変更前 | 変更後 |
|---|---|---|
| UE / GPU / 解像度 | (記入) | 同一条件 |
| 再現したシーンとカメラ | (記入) | 同一条件 |
Frame の代表値 |
(記入) ms | (記入) ms |
Game / Draw / GPU
|
(記入) | (記入) |
profilegpu で目立ったパス |
(記入) | (記入) |
| 画質上の変化 | ― | (記入) |
エディタの再生、シェーダーコンパイル、キャッシュ状態などが結果に影響します。できればターゲットPCでStandalone/パッケージ化したゲームを使い、同じシーンを複数回測りましょう。VSyncやFPS上限によって数値が頭打ちになることもあります。
まとめ
描画が重くなったとき、最初にやるべきことは「軽そうな設定にする」ではなく、重い処理を見つけることです。
-
stat unitでCPUとGPUのどちらが疑わしいかを調べる。 -
profilegpuでGPU側の高負荷なパスを確認する。 - 一つずつ設定やシーン要素を切り替えて、原因を切り分ける。
- 同条件で再測定してから採用する。
なお、Niagaraの半透明エフェクトが原因だった場合は、別の記事で扱う「Niagaraの負荷の減らし方」も参考になります。
参考資料
来源:zenn · 游戏开发社区 · zenn.dev