LoginSignup
10
7

More than 3 years have passed since last update.

[UE4] ロード周りの設定と検証

Last updated at Posted at 2016-12-18

この記事は裏 Unreal Engine 4 (UE4) Advent Calendar 2016の19日目の記事です。

UE4ではBlueprintやMaterialEditorなどを利用することで素早くイテレーションを回すことができますが、
PIE(Play In Editor)時の起動時間やPersistentLevel間を移動する際のロード時間が長い点に関して、
もう少し改善できないかなと考えていました。
4.14で「高速同期ロードシステムEDL(EventDrivenLoder)」というロードの高速化が期待できる機能が追加されたので、EDLを含めたロード周りの設定に関して幾つか検証してみました。

設定内容

ロードに関連の設定はエディタのProjectSetting->Streamingから設定できます。
改めてソース見てて気づいたのですが、ここで「PackageStreaming」と書かれている項目はパッケージでの動作時にしか影響を及ぼしません。なので、4.14で追加されたEDLもパッケージでの動作時のみ有効となります(残念...)。

set.png

# 項目 説明
1 AsyncLoadingThreadEnabled 非同期ロード用のスレッドの有無設定
2 EventDrivenLoaderEnabled 高速同期ロードシステムEDL(EventDrivenLoder)の有効/無効設定
3 WarnIfTimeLimitExceeded タイムアウト時の警告通知の有無設定
4 TimeLimitExceededMultiplier タイムアウト時の閾値
5 TimeLimitExceededMinTime タイムアウト時の警告通知の最短時間
6 MinBulkDataSizeForAsyncLoading 非同期ロードの最小データ容量
7 AsyncIOBandwidthLimit 非同期ロード帯域制限(MByte/s)
8 UseBackgroundLevelStreaming レベル非同期ロードの許可設定
9 AsyncLoadingUseFullTimeLimit 非同期ロード時の読み込み制限時間の有無設定
10 AsyncLoadingTimeLimit 非同期ロード時の読み込み制限時間(s)
11 PriorityAsyncLoadingExtraTime HighLevelPriority(WorldSettings)がある場合の非同期ロード延長時間
12 LevelStreamingActorsUpdateTimeLimit レベルストリーミング中の1Actorの最大登録時間(ms/f)
13 LevelStreamingComponentsRegistrationGranularity レベルストリーミング中にActorComponentを登録するために使用されるバッチ処理の粒度

検証

方法

SeemlessTravel機能を利用して、中間レベルで遷移先のアセット/レベルをロードします。開始時のレベル(StatMap)と中間のレベル(Maps)はデフォルトシーンを使用、遷移先のレベル(Elemental)は学習用コンテンツから入手できるものを使用し、DevelopmentでパッケージしたBuildの動作を確認します。SeemlessTravel機能はドキュメントにも記載されていますが、予めGameModeと中間レベルの設定が必要で、Standalone時の動作が前提となります。詳しくはリンク先をご覧下さい。

-検証手順
・以下の構成を用意し、0キーを押してレベル遷移させています。
 やりたいこととしてはStartMapからElementalへ遷移することで、SeemlessTravel機能によりElementalをオープンする前に中間レベル(Map2)で遷移先の読み込みを行います。ロード完了後、Map2→Elementalに自動で遷移します。

-検証構成
・レベル構成
Test.png

・StartMapのBP
BP.png

-検証イメージ
IMAGE ALT TEXT HERE

(1) デフォルト設定

デフォルト設定の状態からレベル遷移を5回実行します。
他の設定と比較する用の基準値としています。

<結果>
遷移完了してレベルロード完了まで平均時間:2.9sec

test1.png

(2) 非同期ロードスレッドを使用

項目1を有効化(AsyncLoadingThreadEnabled = true;)します。
この設定が無効の状態だとメインスレッドで非同期ロードも処理するのですが、有効にすることで非同期ロード専用にスレッドを立てて非同期ロード処理を行います。

<結果>
(1)よりも短時間でロード完了していることが分かります。
遷移完了してレベルロード完了まで平均時間:1.9sec
test2.png

(3) EDLを使用する

項目2を有効化(EventDrivenLoaderEnabled= true;)します。
が、4.14ではEditorからの設定内容が反映されない問題があるため、直接コードを書き換えます。

AsyncLoading.cpp の145行目付近に設定項目があるので、
検証する際はGitHubからソースを落として以下の修正を行ってください。
※変更後はプロジェクトのRebuildが必要

AsyncLoading.cpp
//static int32 GEventDrivenLoaderEnabled = 0;
static int32 GEventDrivenLoaderEnabled = 1;

<結果>
目に見えて早くなったというわけではないですが、(2)よりも平均して良い数値が得られました。
遷移完了してレベルロード完了まで平均時間:1.7sec
test3.png

さいごに

バージョンアップと共に色々な便利機能が追加されていますが、併せて様々な設定項目も追加されています。
バージョンアップ時にはエディタの設定項目の変化や、コンフィグの差分など、一度見直してみると良いかもしれませんね。

明日は@sinobuさんの「キャラクターについて何か書かせてもらいます。」です。

10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7