GPU、レンダリング スレッド、ゲーム スレッドの問題を特定する
UE4 には、エフェクト アーティストがパフォーマンス問題のトラブルシューティングを行うための機能がいくつかあります。まず、エフェクトのどの部分がボトルネックを作り出しているかを特定することが、真の問題を最適化する長いプロセスの始まりとなります。それにより、ビジュアル的な完成度と品質を保ちます。
レベル全体をプレイしながら問題をモニタリングする方法の 1 つとして、 STAT UNIT (統計ユニット) デバッグ オーバーレイを表示させるということがあります。
- ゲームを起動します。
-
` (バックスラッシュ) キーを押して、コンソールに
stat unit
を入力します。
stat unit
コマンドによって、ゲームスレッド上で現在のフレームのために使われた時間、レンダリングスレッドのために使われた時間、GPU のために使われた時間が表示されます。stat unit によって更新されるこれらの異なる時間をモニタリングすることによって、パフォーマンス問題をかかえるレベルの部分を調べることが可能です。
これらの異なるスレッド時間を監視し、目標のフレームレートが 30 fps である場合は、すべてのスレッドが 33.3 ms よりも低い値を保たなければなりません。
33 ms を超えるスレッドがあり、パーティクルが元凶と目される場合は、 STAT PARTICLES
(パーティクルの統計) コマンドを使用して、それぞれのスレッド上におけるパーティクルの時間を判定します。
STAT PARTICLES
によって、ゲーム スレッドおよびレンダリング スレッドに関係する複数の統計項目がリスト表示されます。Draw Calls (描画コール) (レンダリング スレッド) と Tick Time (ティック時間) (ゲームスレッド) に注目してください。
ゲーム スレッド関連の問題に的を絞る
ゲーム スレッド関連の問題があるとわかったら、STAT PARTICLES
コマンドを使用してその問題を検証します。
この統計では、かなりの情報が提供されるため、リンク付けされたページの説明を参照して何が最も負荷が高いかを判断してください。パーティクルの Tick Time (ティック時間) と数に注意してください。
パーティクル システムはエフェクトを構成するコンポーネント (エミッタ / モジュール) の合計であることを覚えておくことは重要です。システムで使用するユニークなエミッタとモジュールが多くなるにしたがって、あるいは、このシステムがシーン内に増えるにしたがって、ゲームスレッドの負荷は高くなります。
原因となっているゲームスレッドのシステムを特定したら、取るべき手段がいくつかあります。
- 使用中のシステム上にあるパーティクル エミッション数を減らす。
- シーン内にあるパーティクル システムの数を減らす。
- エミッタのいくつかのライフタイム (パーティクルの評価を計算する時間の量) を減らす。
- コリジョンなどの負荷が高い計算をチェックすることによって、使用している設定値が最適になるようにするとともに、コリジョンまたはパーティクル / メッシュがコリジョンする量を減らす。
- 必要に応じて、コリジョンや動的なパラメータなどの負荷が高い計算を取り除く。
- 可能な場合、ゲームスレッドで計算されるパーティクル エフェクトの代わりに、静的メッシュのエフェクトを使う。
- パーティクル システム上に固定した領域を設定することによって、フレーム毎に計算しないようにする。
- LodDistanceCheckTime (LOD 距離チェック時間) を増やして、LOD のチェック回数を減らす(LODMethod が自動に設定されたループエフェクトのため)。