More Related Content
Similar to 【UE4.25 新機能】ロードの高速化機能「IOStore」について (20)
More from エピック・ゲームズ・ジャパン Epic Games Japan (20)
【UE4.25 新機能】ロードの高速化機能「IOStore」について
- 7. #UE4 | @UNREALENGINE
Build
Cook
Stage
Package
IOStoreの作用
Archive
.uasset .uasset
.uasset .uasset
.pak
暗号化や圧縮のために
1つのファイルにまとめる
パッケージ作成フロー (IOStore=OFF)
- 8. #UE4 | @UNREALENGINE
Build
Cook
Stage
Package
IOStoreの作用
Archive
.uasset .uasset
.uasset .uasset
.pak .utoc
.ucas
アセット
+高速化用のファイル
パッケージ作成フロー (IOStore=ON)
- 13. #UE4 | @UNREALENGINE
.pak:パックファイル
● IOStore=OFF時は 全てのアセットファイル を格納
● IOStore=ON時は アクセス頻度が低いファイル を格納
● .ini, .ushaderbytecode, .uproject などが保存される
● 今まで保存されていたアセットファイルは.ucasに移行
- 14. #UE4 | @UNREALENGINE
アセットファイル (.uasset, .umap, .ubulk, .uptnl, uexp)を格納
● 16Byteアライメントオーダーによるパフォーマンス向上
● アセットデータの効率的な配置によるファイルアクセスの高速化
.ucas:コンテナファイル
アセット1 00 00
0 15
アセット2
アセット2 00 00 00 00
アセット3 00 00 00 00 00 00
アセット3
アセット情報
(FIoBuffer)
- 15. #UE4 | @UNREALENGINE
目次(TOC:Table Of Contents)情報を格納
● .ucasとパッケージを紐づけるため目次情報
.utoc:目次ファイル
ChunkId OffsetAndLength
ヘッダー情報
(FIoStoreTocHeader)
アセット別情報
(FIoStoreTocEntry)
Magic Header Size Entry Count Entry Size Padding
1001 0 320
1002 320 160
1003 480 32000
- 27. #UE4 | @UNREALENGINE
Game Thread
AsyncLoader2によるロードの概念図
Async Loading
Thread2
IoService
Load
Work/Wait
Work/Wait Complete
Complete
Seek/Read
Read
.ucas
Data
ゲームのメイン処理
バックグラウンドのロードを制御
ファイルの読み込み制御
Load
Request
- 29. #UE4 | @UNREALENGINE
AsyncLoader2によるロードとファイルアクセス
① LoadPackage
IoDispatcherIoService
⑤ Seek/Read
GameThread
AsyncLoading
Thread2
Event
Queue
AsyncPackage2
③ ReadWithCallback
④ ReadFrom
BlockFile
② QueuePackage
AsyncPackage2
AsyncPackage2
AsyncPackage2
スレッド
- 30. #UE4 | @UNREALENGINE
AsyncLoader2
● Async Loading Thread2
● 新しい非同期ロード用スレッド
● IOStoreを利用するための変更
● CPUオーバーヘッドを減らし効率的な方法でIOをリクエスト
● IoDispatcher
● Async Loading ThreadとIoServiceを中継
● IoService
● FileIOのAPIを実行して.ucasファイルからアセットを読み込み
- 48. #UE4 | @UNREALENGINE
負荷要因と対策 (AsyncLoading)
負荷
● パッケージのリファレンス
● ネイティブクラスのコンストラクタ
● シリアライズ処理(テクスチャ, マテリアル, スタティックメッシュなど...)
対策
● リファレンス(ハード/ソフト)の管理
● コンストラクタ処理の最適化
● テクスチャ(Shadowmap, Cubemap, Lightmap)の解像度、Mip設定の見直し
● シェーダーが参照するリソース数の削減
● スタティックメッシュのLOD設定の削減
- 50. #UE4 | @UNREALENGINE
負荷要因と対策 (Game)
負荷
● レベルストリーミング
● アクター、コンポーネントの追加
● アニメーション処理、物理ボディのセットアップ処理
● マテリアルのポストロード処理
対策
● レベルストリーミングのタイミング調整
● 余剰なアクター、コンポーネントの整理
● アニメーションの制御、Collision設定, 物理ボディ数の調整
● 不要なマテリアルのロードチェック
- 52. #UE4 | @UNREALENGINE
まとめ
● IOStoreを利用することでロード時間の短縮
● 4.25ではExperimental, 4.26ではBetaとして利用可能
● IOのパフォーマンスとCPUのオーバーヘッドを抑制
● ロード時間は積極的に改善
● Unreal Insightsは解析の役に立ちます
● 実装の時点から注意しておきましょう