改訂バージョン: Unreal Engine 5.6
|
以前、[UE5] UnrealInsights を使ってみようという記事を公開しましたが、UE5.2からUnrealInsightsに大幅な改修が入った為、今回は改訂記事として改修後の使い方をご紹介いたします!
+αで画面の見方に関しても解説していますが、前回同様細かい内容に関しては記事の再度に添付している公式動画のリンクをご参照ください!
UnrealInsights って?
公式ドキュメント:Unreal Insights
UnrealEngine に標準で搭載されているプロファイリングシステムのことです。
プラグイン導入などは特に必要なく、すでに作成されているプロジェクトでも簡単に使用を開始することができます。
UE4.23 からサポートが行われていたのですが、UE5.0で大規模な更新が入り、そしてUE5.2にて更に大規模な更新が入りました。
また、詳細なプロファイリング方法は以下6種類に分かれています。
○ Timing Insights
・公式ドキュメント:Timing Insights
・CPU, GPUなどのパフォーマンスデータの表示、最適化など
○ Memory Insights
・公式ドキュメント:Memory Insights
・メモリ使用量の調査、メモリリークの発見など
○ Networking Insights
・公式ドキュメント:Networking Insights
・ネットワークトラフィックスの解析、最適化、デバッグなど
○ Slate Insights
・公式ドキュメント:Slate Insights の概要
・Slate及びUMGの最適化、デバッグなど
○ Asset Loading Insights
・アセットをロードするのにかかる時間、アセットタイプごとのデータセットの把握など
○ Cooking Insights
・公式ドキュメント:Unreal Cooking Insights
・パッケージの最適化(Cookにかかる時間の短縮)など
今回もTiming Insightsに話を絞って解説します!
UE4.27からUE5.6までの変更点
4.27やそれ以前からUnrealInsights を触っている方へ、5.6までで変更された箇所をいくつかまとめてご紹介します。
○ (UE5.0~)PIEでTraceコマンドを使用して実行する際に、
[Trace.Start] → [Trace.Start CPU,GPU] など、明示的な指定が必要になりました。
(下部で説明を入れていますが、Trace.Startは現在非推奨コマンドですのでご注意ください)
○ (UE5.0~UE5.1)Engine/Binaries/Win64/UnrealInsights.exe からしか開けなかったUnrealInsights が、エディタ上から開けるようになりました。Tools > Run Unreal Insights で実行可能です。
→(UE5.2~)Toolsではなく、画面下部のTrace > Unreal Insights (Session Browser) から開けるようになりました。

(Engine/Binaries/Win64 にUnrealInsights.exeは残っているので、そちらからも実行可能です)
○ (UE5.2~)画面下部にTraceというタブが追加されました。

こちらではUnrealInsightsを使用してプロファイリングする際の詳細な設定を決めることができます。
各項目の詳細は以下の通りです。
項目名 |
説明 |
Channels |
複数のChannelの中からプロファイリングしたいデータのみを選択します。
各チャンネルの詳細に関しては公式ドキュメント(リンク)をご参照ください。
デフォルトでは以下のChannelが有効になっています。
Gpu / Screenshot / Region / Bookmark / Frame / Cpu / Log
|
Trace Screenshot |
プロファイリング中の任意のタイミングでこの項目を押下もしくはショートカットキーCtrl+F9を実行すると、実行画面のスクリーンショットを撮影します。
※【Screenshot】Channelの有効化が必要
撮影したスクリーンショットはデータをUnrealInsightsで開くことで確認できます。

|
Trace Bookmark |
プロファイリング中の任意のタイミングでこの項目を押下すると、プロファイルデータにBookmarkを記録します。
付与したBookmarkはデータをUnrealInsightsで開くことで確認できます。

|
Region Name(Begin Region) |
【Region Name】部分に任意の文字列を追加した後、プロファイリング中の任意のタイミングで【Begin Region】を押下すると、プロファイルデータに指定範囲のマークを付与します。

押下後は項目名が【End Region】に変わり、押下することで指定範囲のマークを終了します。
付与したマークはデータをUnrealInsightsで開くことで確認できます。
下記画像の通り、Timingパネル上部の【TimingRegions – ConsoleCommandRegion】にて、指定したRegionNameが表示されていますね。

|
Stat Named Events |
有効化すると、プロファイルデータ内に記録されるデータ量が多くなります。
より詳細なデータが欲しいときにはこちらの有効化をお勧めします。
 |
Trace Destination |
プロファイルデータをどこに保存するかの設定です。
○ TraceStore
・UnrealTraceServer(単一のサーバーインスタンス)に接続してプロファイリングされ、データは以下のファイルパスに格納されます。
C:/Users/<user>/AppData/Local/UnrealEngine/Common/UnrealTrace/Store/001/
○ File
・プロジェクト毎のローカルフォルダにデータが格納されます。
<ProjectName>/Saved/Profiling/
|
Start Trace |
プロファイリングがスタートします。
押下後は項目名が【Stop Trace】に変わり、押下することでプロファイリングを終了します。
Traceタブの右隣りにあるアイコンでも同様の操作を行うことができます。

|
Pause Trace |
プロファイリングを一時停止します。
押下後は項目名が【Resume Trace】に変わり、押下することでプロファイリングを再開します。
|
Save Trace Snapshot |
プロファイリングは続けたまま、一度そこでデータを区切り、保存します。
StartTraceアイコンの右隣りにあるアイコンでも同様の操作を行うことができます。

|
Open Live Session on Trace Start |
有効化するとプロファイリング開始時、ライブセッションが自動的に立ち上がります。
※【Trace Destination】がTraceStoreの場合のみ |
Open Insights after Trace |
有効化するとプロファイリング終了時、計測したセッションが自動的に立ち上がります。 |
Show in Explorer after Trace |
有効化するとプロファイリング終了時、自動的にExplorerが立ち上がり計測データが格納されたフォルダを開きます。 |
Open Trace Store Directory |
【Trace Destination】がTraceStoreのときにデータが格納されるフォルダを開きます。 |
Open Profiling Directory |
【Trace Destination】がFileのときにデータが格納されるフォルダを開きます。 |
Unreal Trace Server |
UnrealTraceServerの起動状態などが確認できます。
○ Sponsored Mode
・有効化するとUnrealTraceServerを利用しているプロセスが実行中のときのみ、Serverが動作します。
○ Start / Stop
・UnrealTraceServerの起動/終了状態を切り替えます。
|
Unreal Insights (Session Browser) |
UnrealInsightsを起動します。 |
Open Live Session |
プロファイリング中のライブセッションを開きます。
※【Trace Destination】がTraceStoreの場合のみ |
Recent Traces |
最後にプロファイリングしたセッションを開きます。 |
UE5.6で使用してみる
プロファイリング方法としては3種類あります。
A. Standaloneで起動して最初~最後までプロファイリングを行う
B. 実行中の特定の部分でプロファイリングを行う(PIE)
C. 実行中の特定の部分でプロファイリングを行う(Standalone)
A. Standaloneで起動して最初~最後までプロファイリングを行う
こちらはゲーム開始から終了までをプロファイリングする方法です。
1. プロファイリングしたい対象を設定
Editor Preferences > Level Editor > Play > Play in Standalone Game > Additional Launch Parameters に、以下の計測設定のコマンドを入力します。

コマンド説明
○ trace
・任意でプロファイリングしたいChannelを指定できます。<例>-trace=Cpu,Gpu,Log
引数なしの場合はデフォルトのChannelSet(Gpu, Screenshot, Region, Bookmark, Frame, Cpu, Log)が適用されます。
○ statnamedevents
・こちらで説明した内容と同じく、指定するとプロファイルデータとして出力される量が多くなります。
2. UnrealInsightsを起動
Trace > Unreal Insights (Session Browser) でUnrealInsightsを起動します。
3. Standaloneでプロジェクトを実行
実行後、UnrealInsightsの画面に【LIVE】と表記されたセッションが追加されていたら成功です!
(この時点でダブルクリックもしくは右下の【OpenTrace】を押下してデータを開くと、リアルタイムで解析結果を確認することができます)

4. 結果を確認
実行終了後、UnrealInsights上で該当のセッションを開くことで、プロファイリング結果を見ることができます!
B. 実行中の特定の部分でプロファイリングを行う(PIE)
こちらは特定の部分のみプロファイリングを行う方法です。
1. 準備
こちらで説明した内容を元に、TraceタブからプロファイリングしたいChannelのカスタマイズやStatNamedEventsの有効化など、プロファイリングの準備を先に行っておきます。
2. プロジェクトを実行
今回はPIE(Play in Editor)でプロジェクトを実行します。
3. プロファイリング開始
任意のタイミングで、Trace > Start Trace もしくは Traceタブ右隣りにあるアイコンを押下してプロファイリングを開始します。

4. プロファイリング終了
任意のタイミングで、Trace > Stop Trace もしくは Traceタブ右隣りにあるアイコンを押下してプロファイリングを終了します。

5. 結果を確認
Trace > Unreal Insights (Session Browser) からUnrealInsightsを起動します。
Trace DestinationをTraceStoreで開始した場合、UnrealInsights上にプロファイリングしたデータが表示されます。
FileNameは【yyyymmdd+”_”+hhmmss】で自動生成されるため、その情報をもとにプロファイルデータを探します(デフォルトでは一番下が最新のデータになっています)
Trace DestinationをFileで開始した場合は、UnrealInsights上にデータが表示されません。
その場合、Trace > Open Profiling Directory で開かれたフォルダの中から上記のName命名規則を参考にプロファイルデータ(.utrace)を探し、それをUnrealInsightsにドラッグアンドドロップします。
プロファイリング結果が閲覧できれば成功です!

また、Standalone実行時に特定部分のみの計測をしたい場合は上記の方法が使用できません。
その場合はコンソールコマンドを使用して計測を行います。
C. 実行中の特定の部分でプロファイリングを行う(Standalone)
1. プロジェクトを実行
今回はStandaloneでプロジェクトを実行します。
コンソールコマンドのみで完結させることを目的としているため、Additional Launch Parametersに引数は追加せず実行します。
2. 事前準備
必要であれば、起動後に事前設定として【Stat NamedEvents】コマンドを実行します。
3. プロファイリング開始
任意のタイミングで【Trace.File】コマンドを実行しプロファイリングを開始します。

コマンドの説明
○ Trace.File [Path] [ChannelSet]
・[Path]:プロファイルデータを保存したいファイルパスを指定。省略可、デフォルトは<ProjectName>/Saved/Profiling/
パス形式によって少し振る舞いが変わります。
1. MyFile.utrace等、ファイル名を指定:<ProjectName>/Saved/Profiling/MyFile.utraceが生成される
2. C:/Path/等、絶対パスを指定:指定したパス以下にデータ(ファイル名自動生成)が生成される
3. Path/等、相対パスを指定:<ProjectName>/Saved/Profiling/Path/ 以下にデータ(ファイル名自動生成)が生成される
(指定したフォルダ(今回で言うとPath)が存在しない場合は自動的に生成される)
・[ChannelSet]:プロファイリングしたいChannelをカンマ区切りで指定。
省略可、デフォルトはGpu, Screenshot, Region, Bookmark, Frame, Cpu, Log
【Trace.Start】コマンドもありますが、こちらは現在非推奨となっておりますのでご注意ください。
4. プロファイリング終了
任意のタイミングで【Trace.Stop】コマンドを実行しプロファイリングを終了します。

5. 結果を確認
【B. 実行中の特定の部分でプロファイリングを行う(PIE)-5. 結果を確認】同様に、UnrealInsightsを起動し該当のファイルをドラッグアンドドロップします。
プロファイリング結果が閲覧できれば成功です!
+α. UnrealInsights画面の見方
あくまで軽くですが、プロファイリングしたデータの見方をご紹介します。
まず、簡単な高負荷プロジェクトを用意しました。FirstPerson TemplateのArena Shooter Variant(公式ドキュメントリンク)を使用し、そちらに改変を加えています。
内容は簡単、新しくActorを作り(命名:BP_BlogSpawnNPCArea)BeginPlayにてゲーム開始5秒後にBP_ShooterNPCをランダムな位置にスポーンさせる処理を書きます。

なんとその数200体。皆さんは間違ってもこのような破壊処理を書かないようお気を付けください。
そしてそのBP_BlogSpawnNPCAreaをレベル内に配置し、AreaSizeなどを調整したうえでプロジェクトを実行してみます。
想定通りゲーム開始5秒後にBP_ShooterNPC200体が一斉にスポーンされ、その瞬間にヒッチが発生しました。
こちらをUnrealInsightsで見てみましょう。

まずは画面上部、Framesパネルを見ていきます。ここでは各フレームの合計処理時間が棒グラフとして表示されています。
明らかに処理時間がかかっていそうなところがありましたね。
見つけたらその箇所をダブルクリックします。そうすると今後はその下のTimingパネル内で該当箇所が強調表示されます。

Timingパネル内はマウスホイールで拡大縮小、右クリックホールドで上下左右移動が行えます。
想定してはいましたが、1Tick内でOnSpawnCharactorイベントが200回呼ばれていることにより、大幅にオーバーフローしているようです。1フレーム前のTickは9.1msで完了していましたが、なんと529.7msもかかっています。
こちらの原因に対して、ではどう処理時間を短くしていくか、そもそも200体を一気に呼び出す必要はあるのか?などを考えながら最適化を進めていくことになります。
UnrealEngine公式から提供されているUnrealInsights画面の見方動画リンク:
○ UE4.25 Update – Unreal Insights –
○ Collect, Analyze, and Visualize Your Data with Unreal Insights | Unreal Fest Online 2020
参考サイト:UnrealInsights 公式ドキュメント
それでは良きUnrealInsightsライフを!