LoginSignup
9
6

More than 3 years have passed since last update.

UE4.26でのクック処理のGC設定について

Last updated at Posted at 2021-02-17

4.26でクック時のメモリ使用量に関わる処理が変更されました。若干注意点があるため情報を共有いたします。
まず大前提として、同じアセットが複数回読み込まれないようにメモリが許す限りアセットを貯めこむ方がクック時間は短く済みことが多いと思います。

(参考)UE4における大規模背景制作事例 最適化ワークフロー編
https://www.slideshare.net/EpicGamesJapan/ue4-139190804/137

クックを行うPCの性能に合わせて適切な設定を行うことが重要です。特にCIS用のPCのメモリに余裕がある場合は有効に活用してあげましょう!

GC条件について

4.25以前と4.26の設定値と動作を解説します。

4.25以前

デフォルト設定はBaseEditor.iniに記述されており

BaseEditor.ini
[CookSettings]
PackagesPerGC=0
IdleTimeToGC=20
MaxMemoryAllowance=16384
MaxConcurrentShaderJobs=8192
MinReservedMemory=1024
MaxDiffsToLog=5
IgnoreHeaderDiffs=True

; ※MinFreeMemory設定なし

となっています。
PCに刺されたメモリが16GB以上あれば、クック中にプロセスに割り当てられた物理メモリが16GBを超えたときにGCが走ります。

4.26

4.26では関係する設定値が変化しています。デフォルトでは、

BaseEditor.ini
[CookSettings]
PackagesPerGC=0
IdleTimeToGC=20
MemoryMaxUsedPhysical=16384
MemoryMinFreePhysical=1024
MaxConcurrentShaderJobs=8192
MaxDiffsToLog=5
IgnoreHeaderDiffs=True

という設定が記述されており、プロセスが使っている物理メモリが16GBを超え「かつ」システムの残り物理メモリが1GBを切ったときにGCが発生します
(具体的な実装については、CookOnTheFlyServer.cpp の UCookOnTheFlyServer::HasExceededMaxMemory() を参照してください)

システムの残り物理メモリが1GBを切ったときという条件が ORではなくANDで入っているのが大きな違いで、OSが物理メモリが枯渇しないように適切にページアウトを行っている関係上、なかなか1GBを割りません。物理メモリが残り1GBを割るときはいつOutOfMemoryが出てもおかしくない状態です。

タスクマネージャで数値を読む場合はここ
image.png

iniには記述されておらずデフォルトでは使われませんが、物理メモリでの判定ではなく 仮想メモリでの判定を行うMemoryMaxUsedVirtualMemoryMinFreeVirtual が追加されました!

おすすめ設定

前述の通り物理メモリはOSによる管理が入っている数字なので、アプリケーションがアロケートしたメモリの総量としてはVirtualMemoryの値を参照したほうが素直です。プロジェクトのDefaultEditor.iniに設定を記述してパラメータをオーバーライドします。

DefaultEditor.ini
[CookSettings]
;物理メモリによる条件を判定しない
MemoryMaxUsedPhysical=0
MemoryMinFreePhysical=0
;仮想メモリ使用量が32GBを超えたらGCを行う(PCによって設定を調整してください)
MemoryMaxUsedVirtual=32000
MemoryMinFreeVirtual=0
9
6
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
9
6