Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
Unversioned Property
Serialization
Epic Games Japan
Software Engineer - Developer Relations
Takashi Suzuki
#UE4 | @UNREALENGINE
はじめに
#UE4 | @UNREALENGINE
はじめに
#UE4 | @UNREALENGINE
はじめに
#UE4 | @UNREALENGINE
はじめに
#UE4 | @UNREALENGINE
はじめに
UE4.25でクック済みゲームのアセットシリアライゼーションに
改善された処理方法を選択できるようになりました。
本プレゼンテーションでは「シリアライゼーション」について解説した後
新しいシリ...
#UE4 | @UNREALENGINE
https://docs.unrealengine.com/ja/Support/Builds/ReleaseNotes/4_25/index.html
#UE4 | @UNREALENGINE
目次
● シリアライズとは
● 二つのシリアライズ処理
● UPSの有効化
● パフォーマンス測定
● まとめ
#UE4 | @UNREALENGINE
目次
● シリアライズとは
● 二つのシリアライズ処理
● UPSの有効化
● パフォーマンス測定
● まとめ
#UE4 | @UNREALENGINE
シリアライズとは
RuntimeObject
c++変数
UPROPERTY付き
変数
#UE4 | @UNREALENGINE
シリアライズとは
ABananaCharacter
#UE4 | @UNREALENGINE
シリアライズとは
ABananaCharacter
#UE4 | @UNREALENGINE
シリアライズとは
ABananaCharacter
プロパティ
c++変数
#UE4 | @UNREALENGINE
シリアライズとは
UClassABananaCharacter
FProperty
UPROPERTY付き
変数
FProperty
FProperty
FProperty
UClassはオブジェクトの...
#UE4 | @UNREALENGINE
シリアライズとは
UClassABananaCharacter
FProperty
UPROPERTY付き
変数
FProperty
FProperty
FProperty
直列化済みデータ
シリアライ...
#UE4 | @UNREALENGINE
シリアライズとは
UClassABananaCharacter
FProperty
UPROPERTY付き
変数
c++変数
FProperty
FProperty
FProperty
Archive
...
#UE4 | @UNREALENGINE
シリアライズとは
UClassABananaCharacter
FProperty
UPROPERTY付き
変数
c++変数
FProperty
FProperty
FProperty
直列化済みデータ...
#UE4 | @UNREALENGINE
シリアライズとは
メモリ上のオブジェクトが持つパラメーターを
クラスが持つプロパティ情報を参照しながら収集し
扱いやすいように直列化すること
#UE4 | @UNREALENGINE
デシリアライズ
UClassABananaCharacter
FProperty
UPROPERTY付き
変数
c++変数
FProperty
FProperty
FProperty
直列化済みデータ
#UE4 | @UNREALENGINE
デシリアライズ
UClassABananaCharacter
FProperty
UPROPERTY付き
変数
c++変数
FProperty
FProperty
FProperty
直列化済みデータ
#UE4 | @UNREALENGINE
デシリアライズ
UClassABananaCharacter
FProperty
UPROPERTY付き
変数
c++変数
FProperty
FProperty
FProperty
直列化済みデータ
#UE4 | @UNREALENGINE
シリアライズはどのような場面で
利用されているのでしょうか?
#UE4 | @UNREALENGINE
シリアライズの用途
シリアライズRuntimeObject
#UE4 | @UNREALENGINE
シリアライズの用途
シリアライズRuntimeObject
アセットの保存、読込
DuplicateObject
Undo
ネットワークコードの送受信データ
Cook済みアセットの保存・読込
などなど
#UE4 | @UNREALENGINE
シリアライズの用途
シリアライズRuntimeObject
アセットの保存、読込
DuplicateObject
Undo
ネットワークコードの送受信データ
Cook済みアセットの保存・読込
などなど
#UE4 | @UNREALENGINE
目次
● シリアライズとは
● 二つのシリアライズ処理
● UPSの有効化
● パフォーマンス測定
● まとめ
#UE4 | @UNREALENGINE
二つのシリアライズ処理
#UE4 | @UNREALENGINE
二つのシリアライズ処理
TaggedPropertySerializer
(TPS)
エディタでアセットを保存したり読み込む
Cook済みビルドでアセットを読み込む
4.24以前
Cook時にアセットを...
#UE4 | @UNREALENGINE
二つのシリアライズ処理
UnversionedPropertySerializer
(UPS)
4.25から
TaggedPropertySerializer
(TPS)
エディタでアセットを保存したり...
#UE4 | @UNREALENGINE
TPSのシリアライズ
TaggedPropertySerializerUClass
アセットファイル
uassetプロパティ
#UE4 | @UNREALENGINE
TaggedPropertySerializer
TPSのシリアライズ
プロパティ
UClass
アセットファイル
uasset
FProperty
#UE4 | @UNREALENGINE
TaggedPropertySerializer
TPSのシリアライズ
UClass
FPropertyTagFProperty
アセットファイル
uassetプロパティ
#UE4 | @UNREALENGINE
PropertyTag
● 型
● コンテナ型のサイズ
● 構造体の名前
● 名前
● GUID
● プロパティのリネーム追跡
● 型の変化への追従 float->int など
● プロパティリダイレクタ
#UE4 | @UNREALENGINE
TaggedPropertySerializer
TPSのシリアライズ
UClass
FPropertyTagFProperty
アセットファイル
uasset
FPropertyTag
直列データ
プ...
#UE4 | @UNREALENGINE
TaggedPropertySerializer
TPSのデシリアライズ
UClass
FProperty
アセットファイル
uasset
FPropertyTag
直列データ
プロパティ
#UE4 | @UNREALENGINE
TaggedPropertySerializer
TPSのデシリアライズ
UClass
FProperty
アセットファイル
uasset
FPropertyTag
直列データ
プロパティ
#UE4 | @UNREALENGINE
プロパティ
TPSのデシリアライズ
直列データ
アセットファイル
uasset
TaggedPropertySerializerUClass
検索!
FProperty FPropertyTag
#UE4 | @UNREALENGINE
TPSのデシリアライズ
FProperty FPropertyTag
TaggedPropertySerializerUClass
アセットファイル
uasset
直列データ
プロパティ
#UE4 | @UNREALENGINE
TaggedPropertySerializer
TPSのシリアライズ
変数
UClass
FPropertyTag
FPropertyTag
FProperty
アセットファイル
uasset
#UE4 | @UNREALENGINE
TaggedPropertySerialization
● プロパティタグによってデータの互換性をサポート
● 変数毎にプロパティタグを付加
● データをメモリに戻す際に検索を行う
#UE4 | @UNREALENGINE
UnversionedPropertySerializationへ
● 昨今は差分パッチによる配布が利用可能
● そのため実装が追加に伴い対応データも変更する
● 次世代機の高速ストレージ
高効率な
U...
#UE4 | @UNREALENGINE
UPSのシリアライズ
Unversioned
PropertySerializer
オブジェクト UClass
変数A
変数B
変数C
Unversioned
PropertySerializer
アセ...
#UE4 | @UNREALENGINE
UPSのシリアライズ
Unversioned
PropertySerializer
オブジェクト UClass
変数A
変数B
変数C
FProperty
FProperty
FProperty
アセッ...
#UE4 | @UNREALENGINE
UPSのシリアライズ
Unversioned
PropertySerializer
アセットファイルオブジェクト UClass
変数A
変数B
変数C
FProperty
FProperty
FProp...
#UE4 | @UNREALENGINE
UPSのシリアライズ
Unversioned
PropertySerializer
アセットファイルオブジェクト UClass
変数A
変数B
変数C
FProperty
FProperty
直列データ...
#UE4 | @UNREALENGINE
UPSのシリアライズ
Unversioned
PropertySerializer
アセットファイルオブジェクト UClass
変数A
変数B
変数C
FProperty
FProperty
直列データ...
#UE4 | @UNREALENGINE
UPSのデシリアライズ
Unversioned
PropertySerializer
アセットファイルオブジェクト UClass
変数A
変数B
変数C
FProperty
FProperty
直列デー...
#UE4 | @UNREALENGINE
UPSのデシリアライズ
Unversioned
PropertySerializer
アセットファイルオブジェクト UClass
変数A
変数B
変数C
直列データ
直列データ
直列データ
FPrope...
#UE4 | @UNREALENGINE
つまりUPSは、、、
#UE4 | @UNREALENGINE
つまりUPSは、、、
超シンプルで速い実装です!
UPS
#UE4 | @UNREALENGINE
オブジェクト
UPSでのアセットの読み込み(失敗)
A
アセットファイル
C
D
A
B
C
D
このプロパティが
パッケージビルドの
バイナリから無く
なってしまった
#UE4 | @UNREALENGINE
オブジェクト
UPSでのアセットの読み込み(失敗)
A
アセットファイル
C
D
A
B
C
D
#UE4 | @UNREALENGINE
UPSでのアセットの読み込み(失敗)
オブジェクト
A
アセットファイル
C
D
A
B
C
D
#UE4 | @UNREALENGINE
UPSでのアセットの読み込み(失敗)
旧来のTaggedPropertySerializationであれば、
このようなプロパティが増減しているケースでも
名前の照合などを使ってロードに成功しますが、
...
#UE4 | @UNREALENGINE
目次
● シリアライズとは
● 二つのシリアライズ処理
● UPSの有効化
● パフォーマンス測定
● まとめ
#UE4 | @UNREALENGINE
有効化方法
● (Default)Engine.iniファイルで以下のフラグを有効化する
● パッケージ作成時に ‘Save packages without versions’にチェックを入れる
○ ...
#UE4 | @UNREALENGINE
-unversionオプションについて
各アセットに対して保存可能なエンジンのバージョンを示す数値を無効化し、
最新のバージョンでアセットが保存されていると仮定するオプションです。
この設定はエンジンを...
#UE4 | @UNREALENGINE
目次
● シリアライズとは
● 二つのシリアライズ処理
● UPSの有効化
● パフォーマンス測定
● まとめ
#UE4 | @UNREALENGINE
パフォーマンス測定
同じプロジェクトをUPSのON/OFFでそれぞれパッケージを行い
パフォーマンスを検証しました。
● パッケージ設定
● Win64 test configuration
● 設定等
...
#UE4 | @UNREALENGINE
検証用レベル
#UE4 | @UNREALENGINE
BP読み込み検証用アセット
下のようなたくさんのプロパティを持ったBPをレベルに配置して検証
UCLASS()
class LOADINGTEST425_API AActorWithManyProper...
#UE4 | @UNREALENGINE
ファイルサイズ測定(レベル)
WithoutUPS WithUPS
ParagonSample.umap 338,567 Byte 338,567 Byte
ParagonSample.uexp 8,0...
#UE4 | @UNREALENGINE
ファイルサイズ測定(BP)
WithoutUPS WithUPS
ManyProperties.uasset 5,980 Byte 5,980 Byte
ManyProperties.uexp 7,20...
#UE4 | @UNREALENGINE
ファイルサイズ測定(BP-ThirdPersonBP)
WithoutUPS WithUPS
ThirdPersonBP.uasset 10,610 Byte 10,610 Byte
ThirdPers...
#UE4 | @UNREALENGINE
ファイルサイズ測定(マテリアル)
WithoutUPS WithUPS
M_Down_Reference.uasset 4,204 Byte 4,204 Byte
M_Down_Reference.ue...
#UE4 | @UNREALENGINE
BPデシリアライズ時間
UPS無効
#UE4 | @UNREALENGINE
BPデシリアライズ時間
UPS有効
#UE4 | @UNREALENGINE
レベルデシリアライズ時間
UPS無効
#UE4 | @UNREALENGINE
レベルデシリアライズ時間
UPS有効
#UE4 | @UNREALENGINE
デシリアライズ時間
Without UPS With UPS
umap processing time 4.70 ms 1.60 ms
ManyProperties x 18 0.27 ms 0.12 ...
#UE4 | @UNREALENGINE
目次
● シリアライズとは
● 二つのシリアライズ処理
● UPSの有効化
● パフォーマンス測定
● まとめ
#UE4 | @UNREALENGINE
UPSまとめ
● UPSはプロパティのデシリアライズを効率化します
● アセットサイズの削減
● デシリアライズ時間の短縮(特にAsyncLoadingThreadのCPU処理時間に効果)
● 高速SS...
#UE4 | @UNREALENGINE
リンク
http://unrealengine.jp/unrealfest/
#UE4 | @UNREALENGINE
リンク
EGJオンラインラーニングシリーズ
https://www.unrealengine.com/ja/blog/connect-with-the-unreal-engine-community-o...
Prochain SlideShare
Chargement dans…5
×

【UE4.25 新機能】新しいシリアライゼーション機能「Unversioned Property Serialization」について

542 vues

Publié le

講演動画はこちら:https://youtu.be/V5tUNlfiJ5s

UE4.25でクック済みゲームのアセットシリアライゼーションに
改善された処理方法を選択できるようになりました。
本プレゼンテーションでは「シリアライゼーション」について解説した後
新しいシリアライゼーションの有効化方法、
どのような部分が改善されたのかを説明いたします。

Software Engineer Developer Relations, 鈴木 孝司 ( https://twitter.com/wankotank )

Publié dans : Ingénierie
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

【UE4.25 新機能】新しいシリアライゼーション機能「Unversioned Property Serialization」について

  1. 1. Unversioned Property Serialization Epic Games Japan Software Engineer - Developer Relations Takashi Suzuki
  2. 2. #UE4 | @UNREALENGINE はじめに
  3. 3. #UE4 | @UNREALENGINE はじめに
  4. 4. #UE4 | @UNREALENGINE はじめに
  5. 5. #UE4 | @UNREALENGINE はじめに
  6. 6. #UE4 | @UNREALENGINE はじめに UE4.25でクック済みゲームのアセットシリアライゼーションに 改善された処理方法を選択できるようになりました。 本プレゼンテーションでは「シリアライゼーション」について解説した後 新しいシリアライゼーションの有効化方法、 どのような部分が改善されたのかを説明いたします。
  7. 7. #UE4 | @UNREALENGINE https://docs.unrealengine.com/ja/Support/Builds/ReleaseNotes/4_25/index.html
  8. 8. #UE4 | @UNREALENGINE 目次 ● シリアライズとは ● 二つのシリアライズ処理 ● UPSの有効化 ● パフォーマンス測定 ● まとめ
  9. 9. #UE4 | @UNREALENGINE 目次 ● シリアライズとは ● 二つのシリアライズ処理 ● UPSの有効化 ● パフォーマンス測定 ● まとめ
  10. 10. #UE4 | @UNREALENGINE シリアライズとは RuntimeObject c++変数 UPROPERTY付き 変数
  11. 11. #UE4 | @UNREALENGINE シリアライズとは ABananaCharacter
  12. 12. #UE4 | @UNREALENGINE シリアライズとは ABananaCharacter
  13. 13. #UE4 | @UNREALENGINE シリアライズとは ABananaCharacter プロパティ c++変数
  14. 14. #UE4 | @UNREALENGINE シリアライズとは UClassABananaCharacter FProperty UPROPERTY付き 変数 FProperty FProperty FProperty UClassはオブジェクトの構造を表現するデータ構造です。
  15. 15. #UE4 | @UNREALENGINE シリアライズとは UClassABananaCharacter FProperty UPROPERTY付き 変数 FProperty FProperty FProperty 直列化済みデータ シリアライズされた データのコンテナ
  16. 16. #UE4 | @UNREALENGINE シリアライズとは UClassABananaCharacter FProperty UPROPERTY付き 変数 c++変数 FProperty FProperty FProperty Archive シリアライズされた データのコンテナ
  17. 17. #UE4 | @UNREALENGINE シリアライズとは UClassABananaCharacter FProperty UPROPERTY付き 変数 c++変数 FProperty FProperty FProperty 直列化済みデータ UE4におけるシリアライズはメモリ上のオブジェクトから UClassで表現されるプロパティを通してデータを収集し直列化する処理です。 シリアライズされた データのコンテナ
  18. 18. #UE4 | @UNREALENGINE シリアライズとは メモリ上のオブジェクトが持つパラメーターを クラスが持つプロパティ情報を参照しながら収集し 扱いやすいように直列化すること
  19. 19. #UE4 | @UNREALENGINE デシリアライズ UClassABananaCharacter FProperty UPROPERTY付き 変数 c++変数 FProperty FProperty FProperty 直列化済みデータ
  20. 20. #UE4 | @UNREALENGINE デシリアライズ UClassABananaCharacter FProperty UPROPERTY付き 変数 c++変数 FProperty FProperty FProperty 直列化済みデータ
  21. 21. #UE4 | @UNREALENGINE デシリアライズ UClassABananaCharacter FProperty UPROPERTY付き 変数 c++変数 FProperty FProperty FProperty 直列化済みデータ
  22. 22. #UE4 | @UNREALENGINE シリアライズはどのような場面で 利用されているのでしょうか?
  23. 23. #UE4 | @UNREALENGINE シリアライズの用途 シリアライズRuntimeObject
  24. 24. #UE4 | @UNREALENGINE シリアライズの用途 シリアライズRuntimeObject アセットの保存、読込 DuplicateObject Undo ネットワークコードの送受信データ Cook済みアセットの保存・読込 などなど
  25. 25. #UE4 | @UNREALENGINE シリアライズの用途 シリアライズRuntimeObject アセットの保存、読込 DuplicateObject Undo ネットワークコードの送受信データ Cook済みアセットの保存・読込 などなど
  26. 26. #UE4 | @UNREALENGINE 目次 ● シリアライズとは ● 二つのシリアライズ処理 ● UPSの有効化 ● パフォーマンス測定 ● まとめ
  27. 27. #UE4 | @UNREALENGINE 二つのシリアライズ処理
  28. 28. #UE4 | @UNREALENGINE 二つのシリアライズ処理 TaggedPropertySerializer (TPS) エディタでアセットを保存したり読み込む Cook済みビルドでアセットを読み込む 4.24以前 Cook時にアセットを保存する
  29. 29. #UE4 | @UNREALENGINE 二つのシリアライズ処理 UnversionedPropertySerializer (UPS) 4.25から TaggedPropertySerializer (TPS) エディタでアセットを保存したり読み込む Cook済みビルドでアセットを読み込む Cook時にアセットを保存する
  30. 30. #UE4 | @UNREALENGINE TPSのシリアライズ TaggedPropertySerializerUClass アセットファイル uassetプロパティ
  31. 31. #UE4 | @UNREALENGINE TaggedPropertySerializer TPSのシリアライズ プロパティ UClass アセットファイル uasset FProperty
  32. 32. #UE4 | @UNREALENGINE TaggedPropertySerializer TPSのシリアライズ UClass FPropertyTagFProperty アセットファイル uassetプロパティ
  33. 33. #UE4 | @UNREALENGINE PropertyTag ● 型 ● コンテナ型のサイズ ● 構造体の名前 ● 名前 ● GUID ● プロパティのリネーム追跡 ● 型の変化への追従 float->int など ● プロパティリダイレクタ
  34. 34. #UE4 | @UNREALENGINE TaggedPropertySerializer TPSのシリアライズ UClass FPropertyTagFProperty アセットファイル uasset FPropertyTag 直列データ プロパティ
  35. 35. #UE4 | @UNREALENGINE TaggedPropertySerializer TPSのデシリアライズ UClass FProperty アセットファイル uasset FPropertyTag 直列データ プロパティ
  36. 36. #UE4 | @UNREALENGINE TaggedPropertySerializer TPSのデシリアライズ UClass FProperty アセットファイル uasset FPropertyTag 直列データ プロパティ
  37. 37. #UE4 | @UNREALENGINE プロパティ TPSのデシリアライズ 直列データ アセットファイル uasset TaggedPropertySerializerUClass 検索! FProperty FPropertyTag
  38. 38. #UE4 | @UNREALENGINE TPSのデシリアライズ FProperty FPropertyTag TaggedPropertySerializerUClass アセットファイル uasset 直列データ プロパティ
  39. 39. #UE4 | @UNREALENGINE TaggedPropertySerializer TPSのシリアライズ 変数 UClass FPropertyTag FPropertyTag FProperty アセットファイル uasset
  40. 40. #UE4 | @UNREALENGINE TaggedPropertySerialization ● プロパティタグによってデータの互換性をサポート ● 変数毎にプロパティタグを付加 ● データをメモリに戻す際に検索を行う
  41. 41. #UE4 | @UNREALENGINE UnversionedPropertySerializationへ ● 昨今は差分パッチによる配布が利用可能 ● そのため実装が追加に伴い対応データも変更する ● 次世代機の高速ストレージ 高効率な UPSを提供
  42. 42. #UE4 | @UNREALENGINE UPSのシリアライズ Unversioned PropertySerializer オブジェクト UClass 変数A 変数B 変数C Unversioned PropertySerializer アセットファイル FProperty FProperty FProperty
  43. 43. #UE4 | @UNREALENGINE UPSのシリアライズ Unversioned PropertySerializer オブジェクト UClass 変数A 変数B 変数C FProperty FProperty FProperty アセットファイル
  44. 44. #UE4 | @UNREALENGINE UPSのシリアライズ Unversioned PropertySerializer アセットファイルオブジェクト UClass 変数A 変数B 変数C FProperty FProperty FProperty 直列データ
  45. 45. #UE4 | @UNREALENGINE UPSのシリアライズ Unversioned PropertySerializer アセットファイルオブジェクト UClass 変数A 変数B 変数C FProperty FProperty 直列データ 直列データ 直列データFProperty
  46. 46. #UE4 | @UNREALENGINE UPSのシリアライズ Unversioned PropertySerializer アセットファイルオブジェクト UClass 変数A 変数B 変数C FProperty FProperty 直列データ 直列データ 直列データFProperty ヘッダ
  47. 47. #UE4 | @UNREALENGINE UPSのデシリアライズ Unversioned PropertySerializer アセットファイルオブジェクト UClass 変数A 変数B 変数C FProperty FProperty 直列データ 直列データ 直列データFProperty ヘッダ
  48. 48. #UE4 | @UNREALENGINE UPSのデシリアライズ Unversioned PropertySerializer アセットファイルオブジェクト UClass 変数A 変数B 変数C 直列データ 直列データ 直列データ FProperty FProperty FProperty
  49. 49. #UE4 | @UNREALENGINE つまりUPSは、、、
  50. 50. #UE4 | @UNREALENGINE つまりUPSは、、、 超シンプルで速い実装です! UPS
  51. 51. #UE4 | @UNREALENGINE オブジェクト UPSでのアセットの読み込み(失敗) A アセットファイル C D A B C D このプロパティが パッケージビルドの バイナリから無く なってしまった
  52. 52. #UE4 | @UNREALENGINE オブジェクト UPSでのアセットの読み込み(失敗) A アセットファイル C D A B C D
  53. 53. #UE4 | @UNREALENGINE UPSでのアセットの読み込み(失敗) オブジェクト A アセットファイル C D A B C D
  54. 54. #UE4 | @UNREALENGINE UPSでのアセットの読み込み(失敗) 旧来のTaggedPropertySerializationであれば、 このようなプロパティが増減しているケースでも 名前の照合などを使ってロードに成功しますが、 UPSはシンプルに処理しているので問題が出るケースがあります。
  55. 55. #UE4 | @UNREALENGINE 目次 ● シリアライズとは ● 二つのシリアライズ処理 ● UPSの有効化 ● パフォーマンス測定 ● まとめ
  56. 56. #UE4 | @UNREALENGINE 有効化方法 ● (Default)Engine.iniファイルで以下のフラグを有効化する ● パッケージ作成時に ‘Save packages without versions’にチェックを入れる ○ コマンドラインでパッケージしている場合はオプションに ‘-unversioned’ を追加する ● UATを利用している場合は、 常にクッカーに-Unversionedが指定されるため特別な操作は不要です。 ○ CIでクッカーを直接呼び出している場合、-unversioned指定が必要です。 [Core.System] CanUseUnversionedPropertySerialization=True 以下 2020/11/15 追記
  57. 57. #UE4 | @UNREALENGINE -unversionオプションについて 各アセットに対して保存可能なエンジンのバージョンを示す数値を無効化し、 最新のバージョンでアセットが保存されていると仮定するオプションです。 この設定はエンジンを変更しながら運営を続けるようなタイトルでデータの破損 を検出、防止するために使われることがありますが、 バイナリ差分パッチ利用時は逆にサイズを増加させてしまうことがあります。 詳しくは アセットとパッケージのバージョンを管理する をご覧ください。 これから開発されるタイトルではunversionでのご利用をお勧めします。 https://docs.unrealengine.com/ja/Programming/UnrealArchitecture/VersioningAssetsAndPackages/index.html
  58. 58. #UE4 | @UNREALENGINE 目次 ● シリアライズとは ● 二つのシリアライズ処理 ● UPSの有効化 ● パフォーマンス測定 ● まとめ
  59. 59. #UE4 | @UNREALENGINE パフォーマンス測定 同じプロジェクトをUPSのON/OFFでそれぞれパッケージを行い パフォーマンスを検証しました。 ● パッケージ設定 ● Win64 test configuration ● 設定等 ● IOStore無効 ● AsyncLoadingThread/EventDrivenLoader有効 ● ハードウェア ● PCIe接続のSSD上にパッケージを配置して計測
  60. 60. #UE4 | @UNREALENGINE 検証用レベル
  61. 61. #UE4 | @UNREALENGINE BP読み込み検証用アセット 下のようなたくさんのプロパティを持ったBPをレベルに配置して検証 UCLASS() class LOADINGTEST425_API AActorWithManyProperties : public AActor { GENERATED_BODY() public: // Sets default values for this actor's properties AActorWithManyProperties(); UFUNCTION(BlueprintCallable) static void RandomizeProperty( UObject* Ptr ); UPROPERTY(EditDefaultsOnly) int32 Value1; UPROPERTY(EditDefaultsOnly) int32 Value2; UPROPERTY(EditDefaultsOnly) int32 Value3; UPROPERTY(EditDefaultsOnly) int32 Value4; UPROPERTY(EditDefaultsOnly) int32 Value5; UPROPERTY(EditDefaultsOnly) int32 Value6; UPROPERTY(EditDefaultsOnly) int32 Value7; //以下略(232個) ...
  62. 62. #UE4 | @UNREALENGINE ファイルサイズ測定(レベル) WithoutUPS WithUPS ParagonSample.umap 338,567 Byte 338,567 Byte ParagonSample.uexp 8,044,260 Byte 7,254,589 Byte
  63. 63. #UE4 | @UNREALENGINE ファイルサイズ測定(BP) WithoutUPS WithUPS ManyProperties.uasset 5,980 Byte 5,980 Byte ManyProperties.uexp 7,203 Byte 1,137 Byte
  64. 64. #UE4 | @UNREALENGINE ファイルサイズ測定(BP-ThirdPersonBP) WithoutUPS WithUPS ThirdPersonBP.uasset 10,610 Byte 10,610 Byte ThirdPersonBP.uexp 9,310 Byte 5,815 Byte
  65. 65. #UE4 | @UNREALENGINE ファイルサイズ測定(マテリアル) WithoutUPS WithUPS M_Down_Reference.uasset 4,204 Byte 4,204 Byte M_Down_Reference.uexp 234,498 Byte 225,087 Byte
  66. 66. #UE4 | @UNREALENGINE BPデシリアライズ時間 UPS無効
  67. 67. #UE4 | @UNREALENGINE BPデシリアライズ時間 UPS有効
  68. 68. #UE4 | @UNREALENGINE レベルデシリアライズ時間 UPS無効
  69. 69. #UE4 | @UNREALENGINE レベルデシリアライズ時間 UPS有効
  70. 70. #UE4 | @UNREALENGINE デシリアライズ時間 Without UPS With UPS umap processing time 4.70 ms 1.60 ms ManyProperties x 18 0.27 ms 0.12 ms
  71. 71. #UE4 | @UNREALENGINE 目次 ● シリアライズとは ● 二つのシリアライズ処理 ● UPSの有効化 ● パフォーマンス測定 ● まとめ
  72. 72. #UE4 | @UNREALENGINE UPSまとめ ● UPSはプロパティのデシリアライズを効率化します ● アセットサイズの削減 ● デシリアライズ時間の短縮(特にAsyncLoadingThreadのCPU処理時間に効果) ● 高速SSDやフラッシュメモリを利用可能でCPU側にボトルネックが発生する ハードウェアで特に効果が見込める ● 効果の大きさはアセット毎に変化 ● 大量のノードを含むブループリントは相対的に改善効果が低いが 大半のアセットがプロパティを持っているため少なからず恩恵がある ● レベルの配置情報のデシリアライズ時間には効果が大きい ● 有効化には ● iniの編集が必要 (4.25 / 4.25plus) ● パッケージ作成時に-unversion指定が必要
  73. 73. #UE4 | @UNREALENGINE リンク http://unrealengine.jp/unrealfest/
  74. 74. #UE4 | @UNREALENGINE リンク EGJオンラインラーニングシリーズ https://www.unrealengine.com/ja/blog/connect-with-the-unreal-engine-community-online UE5 https://www.unrealengine.com/en-US/blog/a-first-look-at-unreal-engine-5 UnrealEngine Twitter @UnrealEngine UnrealEngineJP Twitter @UnrealEngineJP EGJ SlideShare https://www.slideshare.net/EpicGamesJapan/presentations

×