UDN
Search public documentation:

PerfStatsJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 > パフォーマンス、プロファイリング、最適化 > Unrealのパフォーマンス追跡システム
UE3ホーム > ゲームプレイプログラミング > Unrealのパフォーマンス追跡システム

Unrealのパフォーマンス追跡システム


概要


このページは、ゲームのパフォーマンスを把握するためにUE3が設けている様々な機構について解説します。システムが提供するデータは、レベルの構築やゲームプレイのシステムのチューニングにお役立ち出来ると思います。パフォーマンス情報を保存し、一定期間の保存データを比較することで、パフォーマンスのレベルの追跡にも役立ちます。

In-game Stats (ゲーム内での統計)


パフォーマンス情報には、2通りの入手法があります。ゲーム内でと、外部クライアントを使ってです。イン ゲーム ツールはコンソールからのコマンドを使って起動でき(次のセクションをご覧ください)、HUD(ヘッドアップ表示)上に表示されるため、スクリーンのスペース上の制限があります。ですから、さらに詳しい Stats (統計)をご覧になりたい場合は、外部クライアントをを使う方が賢明です。

Stats は、2通りの方法で見ることができます:グループにしてと階層構造にしてです。古い統計システムはグループでの閲覧だけが可能でした。プログラマーによってグループが設定され、"stat groupname" (統計グループ名)のコンソールからのコマンドで表示することができます。そのグループ内の全ての統計情報が表示されます。下のスクリーンショットではタイミングのデータだけを包括的 (inclusive) な値と排他的 (exclusive) な値とを含めて表示しています(このようにセットアップするためにはコンソールからのコマンドのセクションをご覧ください)。

InGameStats.jpg

Stats (統計)を見る2番目の方法は、データの階層構造によってです。この方法は、統計データをツリー(木)構造で扱い、チャイルド(子供)のデータが、ペアレント(親)の合計時間に含まれます。例えば、全てのデータは、FrameTime (フレームタイム)という統計に含まれます。この方法で統計を見ることは、ある分野のパフォーマンスが悪いことがわかっていて、いったいその中のどこが問題を起こしているかを調べるのに役立ちます。情報を掘り起こし続けて、一番時間を使っている葉っぱを見つけることができます。デフォルトでは、統計データは包括的なタイミング情報を含みます。"stat exclusive" (排他的統計)のコンソールからのコマンドを使って、排他的時間を表示することもできます。これは、Stats の子供情報を含まない、使用時間を表示します。これは、いったいそのシーンの中のどこがパフォーマンス上の問題を起こしているかを把握するために重要なツールです。

InGameHierStats.jpg

それぞれの列の意味

列名(column) 意味
# hierarchical mode (階層構造モード)のときに、統計の階層を移動するのに使用
CallCount そのフレームの中でその統計が更新された回数
IncAvg 最近の数フレームにおいて統計的に使用された包括的平均時間
IncMax 最近の数フレームにおいて Stats によって使われた最長時間
ExcAvg 子供 Stats を除いて最近の数フレームにおいてStats によって使われた平均時間
ExcMax 子供 Stats を除いて最近の数フレームにおいてStats によって使われた最長時間

'---+++ コンソールからのコマンド

コンソールからのコマンドが、ゲーム内で Stats (統計)とインターアクトする方法です。Stats システムは、簡単な一連のコマンドによって、ゲーム内でHUD上に統計情報の表示をすることをサポートします。Stats システムのコンソールからのコマンドは皆、"stat"の識別子によって始まります。例えば、エンジンのレンダリングの Stats グループをトグルする、 "stat engine"というコマンドの様にです。下にサポートされているコンソールからのコマンドと、その目的が表になっています。

コマンド 結果
inclusive Inclusive state(包括的状態)をトグルします。True (真)であれば包括的時間を表示します。
exclusive Exclusive state(排他的状態)をトグルします。True (真)であれば排他括的時間を表示します。
cycles cycle counter state(サイクルカウンターの状態)をトグルします。True (真)であればサイクルカウンターの統計を表示します。
counters counter state(カウンターの状態)をトグルします。True (真)であればカウンターの統計を表示します。
grouped レンダリングモードをグループビューモードに変更します。すでにグループモードになっている場合には、レンダリングを不可にします。
hier レンダリングモードを hierarchical view mode (階層構造ビューモード、グラフモードとも呼ばれる)に変更します。すでにhierarchical mode になっている場合には、レンダリングを不可にします。
nav "StatNum" コール グラフの階層構造を上ったり下がったりして、そのときの統計の選択を変更します。
color "Item" "Color" 特定のアイテムがレンダリングされている色を変更します。
list groups stat groups の名前を全てログに落とします。showlog を使うと見ることができます。
list group "GroupName" その名前のグループの中の統計の名前を全てログに落とします。showlog を使うと見ることができます。
name "StatName" 個々の Stat に関してレンダリングのフラッグをトグルします。True であれば Stat は所属するグループ名でレンダリングされます。
none 全てのグループの Stat レンダリングをオフにします。
"GroupName" そのグループのレンダリングのフラッグをトグルします。True であれば そのグループはレンダリングされます。

Stats (統計)の記録

Stats システムのこのバージョンは、"stats provider" (統計提供者)のフレームワーク(枠組み)を含みます。このフレームワークは Stats データを収集し、何らかの外部ストーレッジ(保存媒体)に送ります。 それぞれのフレームの終わりで、レジスターされたプロバイダーのりストにデータのスナップショットが送られます。このデータはディスクに書き込むことも、ネットワーク上のどこかに送ることも、別のAPI システムに組み込む事などができます。 Epic フレーム毎の stats のデータのファイルやネットワークを介しての記録をサポートしています。

Stats をファイルを使ってログの記録をする。

このバージョンの Stats システムはファイルへのデータの記録をサポートします。システムは2種類のフォーマットで書き込めます:1つはExcel のなかへインポートできるCSVで、もう1つは stats viewerで使われている XML のフォーマットです。CSV ふぉーまっとは前に行ったデータキャプチャの結果と素早く比べるのに便利です。そして、Excel の持つ図にして現すなどの機能が全て使えます。XML フォーマットは主に後で検討するためにデータをキャプチャするために使われます。XML フォーマットは stats viewer の元来のフォーマットであるため、単にXML ファイルをロードして、その統計データを見ることができます。n

ネットワークされた Stats

最新のバージョンではネットワークを介して Stats (統計)データを集めることができます。前にはできませんでしたが、今は専門のサーバーに統計データを集めることができます。UDP を介して Stats を集めて、われわれがサポートする様々なOSやコンソール上で機能します。Xbox 360 では PIX ツール を使ってstats をキャプチャすることもできます。

Stats の記録法の設定

MyGameEngine.ini の中の設定で Stats プロバイダーが可能化されます。 それぞれのプロバイダーは名前を与えられ、その名前を使ってINI ファイルの設定データがチェックされます。例えば、XML ファイルによる stats の記録を可能にするためには Engine.ini ファイルの中に下記のように書かれていることが必要です:

[StatNotifyProviders]
XmlStatNotifyProvider=true

下記に記されているのは、 Epic がそのデフォルトの設定で提供しているプロバイダー全てのリストです。

[StatNotifyProviders]
XmlStatNotifyProvider=false
CsvStatNotifyProvider=false
StatsNotifyProvider_UDP=true
PIXNamedCounterProvider=false

Stats のプロバイダーをコマンドラインから有効にすることもできます。これはプロバイダーの名前をパラメタ(引数)として使って行われます:

utgame ons-testmap ?CsvStatsNotifyProvider

上記によって、Stats がコンマで分けられる形で、utgame_stats.csv に書き込まれます。

Stats Viewer (統計ビュアー)


Stats Viewer はパフォーマンス(性能)データを集めて解析する外部アプリケーションです。そのUI (ユーザーインタフェース)は、3つの主なエリアに分かれています:使用可能な全てのグループ名と、そのグループを構成する Statsを全て表示するツリービュー。平均値や最小/最大値などの集積した情報を表示するリストビュー。そして線グラフによって、 Stats 情報を表示するグラフのエリアです。グラフ上のそれぞれの点は対応するフレームにおける Stats の値を表しています。グラフはスクロールによってフレームデータ間を前後に移動できます。X 軸は、ユーザーによる設定によって、フレームの番号か時間を表します。Y 軸はデフォルトでは0から100の範囲に設定されています。それぞれの Stats ごとにスケールを変えることができます。このオプションは、常に100を超えた値を示す Stats や常に0に近い値を表す Stats を見るのに便利です。

データの収集

この viewer はファイルに記録する際に保存された既存のファイルを見る為に使われます(ファイルへの記録に関する前のセクションをご覧ください)。その他に、作動しているゲームに接続して、Stats 情報をネットワークを介して収集することもできます。ネットワークを介して収集されたデータも、保存して後から検討することができます。

存在する Stats ファイルを開く

[ファイル]を| [開く] メニューオプションを選択して、あなたのゲームのログディレクトリーに進んでください。Stats の記録手段は全て game's log (ゲームのログ)ディレクトリにファイルを書き込みます。

リモートゲームへの接続

接続 | へ接続メニューオプションは下のダイアログを展開します。このダイアログは作成時に、全てのゲームにアナウンスメッセージをブロードキャストします。[リフレッシュ] ボタンは同じメッセージを再放送します。このブロードキャストは両方とも、ダイアログボックスで指定されたポートで行われます。もし複数のゲームチームがある場合や、一連のサーバを隔離したい場合は、どのポートからゲームが情報を得るかを変更できます。接続を簡単にするために、ダイアログは、作動しているゲームのタイプと、どのプラットフォーム上で行われているかのリストを表示します。下の図では、私は自分のパソコンでUTバージョンのエディタを使い、同じパソコンで Onslaught ゲームを、そしてわたしの Xbox 360 で Gears of War を作動させています。ダイアログにリストされたゲームの Stats データを収集するためには、目的のゲームをダブルクリックするか、選択した後で、[接続]ボタンを押してください。

ConnectTo.jpg

データを見る

下の図は、ネットワークを介して、大量のデータを収集した後、保存したファイルを開けたときの例です。このビューでは、2つのカウンター、 FrameTime と SkelCompose をグラフ表示に追加しました。線を識別しやすいように、選択された Stat はいつもボルド(太字)で描かれています。このエリアは150フレーム分のデータを表示しています。それぞれの Stat は独自の色で表され、グラフの下のリストの中で特定の Stat をダブルクリックすることで色が変えられます。バックグラウンドの色も同様に変えられます。どれかの Stat を 表示から除きたい場合には、その Stat を選択して、[Delete] (削除)キーを押します。

ViewingData.jpg

グラフに Stat を追加する

グラフに Stats を追加するには、ツリービューから個々の Stat をグラフのエリアにドラッグするか、 Stats のグループをグループごとドラッグしてください。グループをグラフエリアにドラッグすると、その中の全ての Stats を表示に追加します。

集積データ(統計計算値)

リストビューの中で、集積されたタイプのデータが表示されています。その統計の平均値、最大値と最小値です。デフォルトでは、これらの値はデータセット全体から計算されます。つまり、全てのフレームを含んでいます。一連のフレームからだけのデータによる計算値をご覧になりたい場合には、[View](ビュー) | [Ranged Aggregate Data] (集積データを範囲で扱う)を選択してください。範囲を指定してみる場合には、セット内をスクロールするに応じてデータが更新されます。

ビューエリアをズームする

X 軸の拡大縮小は、[F1] (View | Zoom In(ビュー、ズームイン)) と [F2] (View | Zoom Out(ビュー、ズームアウト)) キーを使って行えます。これによって、表示されるフレーム数が減少したり増加したりします。Y 軸の拡大縮小は個々の Stat ごとに行われます。

ネットワークでデータを収集しているときの自動スクロール

リモートゲームに接続しているとき、グラフ表示は、自動的に最新のデータまでスクロールします。[F3] (View | Auto-scroll Display (自動スクロールによる表示)) キーを使ってこれをトグルすることができます。

コール グラフ ビュー

どのフレームのコールグラフも、 Stats のグラフエリアの中のそのフレーム上で右クリックし、[View Frame N] (N フレームの表示)オプションを選択することで見ることができます。こうすると、 下のように、Stats のコールグラフをツリー状に表示するウィンドウが立ち上がります。

CallGraphView.jpg

フレームをクリックしての選択は厳密性にかけるため、周りのフレームも一緒に選択してビューに追加してします。これは、Stats をドリルダウンして、フレーム間の比較が容易にできるため、スパイクをトラッキング(追跡)するのに便利です。全ての時間は inclusive times (包括的時間)として報告されています。

わかっている問題点

まだ、スレッドごとのトラッキングをサポートしていません。階層的情報を完全にはサポートしていません (グループ処理しかしていません)。

今後の課題

もっと速いグリッドペインティング。ずっとスマートになります。

階層構造 Stats のサポート。.

ゲームプレイのマーカー。ゲームプレイの API call によってグラフに表示するものです。スパイクやり、ゲームプレイやカットとシーののなかでの増加をトラッキングするのに便利です。

バグを解決する。ユーザーインタフェースを改良する(グリッド、値の上にマウスをおいた場合、などなど)。

パフォーマンスの回帰テスト


Stats システムでは、2つのパフォーマンステストを別々に行って、その結果を比較することができます。StatsComparison.exe というこのアプリケーションは、異なった2つの XML ファイルを読み込み、統計値を計算します (平均など)。そして、その結果を特定のスレッシュホルド(閾値)と比較します。もしパフォーマンスがその閾値の範囲で行われていればテストは成功です(アプリケーションは0を返します)。もしパフォーマンスがその閾値の範囲から外れていれば、アプリケーションは1を返し、これはテストが失敗したことを意味します。もし0未満の数を返したときは、データに何らかの問題があったことを意味します(ファイルが見つからない、破損している、無効な統計値が指定されたなど)。