【UEFN Tokyo #4】DataLayerをUEFNで使ってみよう

18.5K Views

April 26, 24

スライド概要

2024年4月26日に開催されたUEFN.Tokyo 勉強会 04 Device Nightでの講演資料です。

講演アーカイブはこちら(55:00ごろより):
https://youtu.be/uvcPtV0t0I0?t=3302

イベントについてはこちら:
https://uefn-community-tokyo.connpass.com/event/314712/

profile-image

今:UEFN をメインにフリーランスで開発やサポートなどしてます。 前:Epic Games JapanでUEFNやUE5の教育まわり担当。その前はゲーム開発会社のレベルデザイナー。 メキシコのタコスが好きです🌮

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

UEFN Tokyo #4 DataLayerをUEFNで使ってみよう 塩⾕祐也

2.

この資料の内容 DataLayerに触れるの初めて!という⽅を対象に ● ● ● DataLayerのとは? 使い⽅ メリット、デメリット などを紹介していく資料です。 本資料はUEFN version 29.20にて検証しています。 前半は⽐較的初⼼者向けですが、後半はちょっとディープかも...?

3.

あなた誰よ? 塩⾕祐也 フリーランス UEFN 開発者 ゲーム/レベルデザイナー 国内のスタジオさん向けに UEFNの開発、サポート、ゲーム/レベルデザインの アドバイザーなどのお仕事をしています。 茜空...ああ...茜空... Ukkaの”透明”聴いたことあります?聴こ?

4.

Special Thanks wanimationさん いつも検証にお付き合いいただきありがとうございます!

5.

今⽇話すこと ● Data Layer 基本的な設定、読み込み⽅法 ● Data Layer で扱える物とつまづきポイント ● UEFN上での仕様周り ● Data Layer のメリット、デメリット

6.

今⽇話すこと ● Data Layer 基本的な設定、読み込み⽅法 ● Data Layer で扱える物とつまづきポイント ● UEFN上での仕様周り ● Data Layer のメリット、デメリット

7.

DataLayerとは? データ レイヤーは、アクタをさまざまなレイヤーに整理するために使⽤される、 UEFN にあるシステムです。 これらのレイヤーをロードおよびアンロードすることで、ワールドを整理して複 雑なレベルを管理し、独⾃のゲームプレイ体験を作り出すことができます。 ランダム化された複数のレベルを使⽤するゲームがあるとします。レイヤーごと に異なるレベル レイアウトを設定し、ゲームの開始時にそのいずれかをランダム に選択することで、体験にバリエーションと刺激を加えることができます。 https://dev.epicgames.com/documentation/ja-jp/uefn/streaming-and-hlods-i n-unreal-editor-for-fortnite

8.

こういうことができます

9.

https://youtu.be/Ki78Sqa1X-0

10.

Data Layer 基本的な設定、利⽤⽅法 ● Data Layerアセット ● レベル上での扱い ● ロードとアンロード

11.

Data Layer 基本的な設定、利⽤⽅法 ● Data Layer アセット ● レベル上での扱い ● ロードとアンロード

12.

Data Layer はアセットの1つ Content Browser上で作成可能

13.

Data Layer はアセットの1つ 必要なレイヤー分アセットを⽤意 背景の種類、ステージごとなど

14.

Data Layer 基本的な設定、利⽤⽅法 ● Data Layer アセット ● レベル上での扱い ● ロードとアンロード

15.

Data Layer を Level に追加する Data Layerを活⽤するにはLevelへの追加が必須 Data Layer OutlinerにD&Dで追加可能

16.

Data Layer Outliner が無い場合 メニューバーから表⽰可能 Windows -> World Partition -> Data Layer Outliner

17.

Data Layer のInitial Runtime Stateを確認 Initial Runtime State = ゲーム開始時のレイヤーの初期状態 設定された値に応じてゲーム開始時の挙動が変化 ロードされているのか? アンロードされているのか?

18.

各状態について Activated: データが読み込まれている & 画⾯上に表⽰されている状態 Loaded: データが読み込まれているが、画⾯上では⾮表⽰な状態 Unloaded: データを読み込んでいない状態

19.

Data Layer に Actor を追加する 追加したいData Layerをダブルクリック テキストが緑になり、(現在)と表⽰されれば編集状態

20.

Data Layer に Actor を追加する 後はActorをレベル上に追加していけばOK 適切に追加できていればアウトライナー上で どのData Layerに含まれているのか確認できる

21.

注意:Data Layer の所属について 親⼦付したActorは親が所属するData Layerのステータスが優先される ⼦Actorが所属するData Layerがアンロードされても、 親ActorのData Layerがロードされていれば表⽰されつづける ⼦Actorも Data Layerの対象になるパターン ⼦Actorは Data Layerの対象にならないパターン

22.

既に配置している Actor を Data Layer へ追加したい

23.

既に配置している Actor を Data Layer へ追加したい 追加したいActorを選択 Data Layer Outliner上で追加先のData Layerを右クリック "Add Selected Actor(s) to Selected Data Layer(s)"を押すと移動可能

24.

Level 上での表⽰管理 「このレイヤー以外は⾒えなくても良いんだけど…」って時は?

25.

Level 上での表⽰管理 ⽬⽟アイコンをクリックして可視性を切り替え可能

26.

Data Layer 基本的な設定、利⽤⽅法 ● Data Layer アセット ● レベル上での扱い ● ロードとアンロード

27.

ロードとアンロード UEFN 29.20 時点において DataLayer を読み込む⽅法は下記のみ ● Data Layer の初期設定(Initial Runtime State) ● Sequencer & Cinematic Sequence Device

28.

ロードとアンロード UEFN 29.20 時点において DataLayer を読み込む⽅法は下記のみ ● Data Layer の初期設定(Initial Runtime State) ● Sequencer & Cinematic Sequence Device

29.

Sequencer によるロード、アンロード Level Sequence内でData Layerトラックを利⽤

30.

Sequencer によるロード、アンロード Data Layerトラックの"+"ボタンから変更したい状態を選択

31.

Sequencer によるロード、アンロード トラックを右クリックして詳細を設定 1. 2. 3. 4. 終了時:Sequencer終了後の状態 状態を変更するData Layerリスト ⽬的の統計:変更後の状態 プリロール状態:変更前の状態

32.

Sequencer によるロード、アンロード オススメ: Data Layerの読み替えの場合はActivatedとUnloadedをトラックで2つ⽤意

33.

Cinematic Sequence Deviceの視認性 視認性が発信者のみだとしても Data Layerはロードされれば全てのプレイヤーに影響

34.

今⽇話すこと ● Data Layer 基本的な設定、読み込み⽅法 ● Data Layer で扱える物とつまづきポイント ● UEFN上での仕様周り ● Data Layer のメリット、デメリット

35.

Data Layer で扱える物 ● ● ● ● Static Mesh Skeletal Mesh Niagara Light ○ ● ● ● ● ● ● ● ● ● ● ○ Directional, Point, Spot, Rect, Sky Fog Decal Post Process Volume Animation Sequence Landscape Foliage Blocking Volume Building Props Building Wall Fort Playset Prop Item Definition ● Device(要注意) ○ ● 建物アセット Audio系, Patchwork含む Verse Device(要注意)

36.

Data Layer で扱える物 ● ● ● ● Static Mesh Skeletal Mesh Niagara Light ○ ● ● ● ● ● ● ● ● ● ● ○ Directional, Point, Spot, Rect, Sky Fog Decal Post Process Volume Animation Sequence Landscape Foliage Blocking Volume Building Props Building Wall Fort Playset Prop Item Definition ● Device(要注意) ○ ● 建物アセット Audio系, Patchwork含む Verse Device(要注意)

37.

Data Layer でDeviceを管理する場合 ● ● DeviceをそのままData Layerに格納することは不可能 適当なActorなどにDeviceを親⼦付けすると親を返してData Layerで管理可能 ○ ● DeviceのMobilityは親のMobilityに合わせること RootとData LayerそれぞれのDevice同⼠でEventをBindingすることも可能

38.

Data Layer でのDevice管理は 個⼈的には⾮推奨

39.

なぜか? ● 処理が複雑化しやすい ○ 「Data Layer AでこのDeviceを読み込んで、このイベントを処理して他のData Layerで...」

40.

なぜか? ● 処理が複雑化しやすい ○ ● 「Data Layer AでこのDeviceを読み込んで、このイベントを処理して他のData Layerで...」 Deviceに対してはそもそも裏技的な⽅法 ○ できる。というだけで公式にサポートされた⽅法か怪しい ○ 29.00以降、別々のData Layerに含まれたDevice同⼠を参照し合うとMap Checkでエラー

41.

なぜか? ● 処理が複雑化しやすい ○ ● ● 「Data Layer AでこのDeviceを読み込んで、このイベントを処理して他のData Layerで...」 Deviceに対してはそもそも裏技的な⽅法 ○ できる。というだけで公式にサポートされた⽅法か怪しい ○ 29.00以降、別々のData Layerに含まれたDevice同⼠を参照し合うとMap Checkでエラー 挙動が変わる場合がある ○ Creature Spawner Deviceの場合はDeviceが上⼿くロードされない ○ どうしても利⽤したい場合はDevice同⼠連携しない物に限るなどレギュレーションを決める

42.

なぜか? ● 処理が複雑化しやすい ○ ● ● 「Data Layer AでこのDeviceを読み込んで、このイベントを処理して他のData Layerで...」 Deviceに対してはそもそも裏技的な⽅法 ○ できる。というだけで公式にサポートされた⽅法か怪しい ○ 29.00以降、別々のData Layerに含まれたDevice同⼠を参照し合うとMap Checkでエラー 挙動が変わる場合がある ○ Creature Spawner Deviceの場合はDeviceが上⼿くロードされない ○ どうしても利⽤したい場合はDevice同⼠連携しない物に限るなどレギュレーションを決める ご利⽤の際は⾃⼰責任で

43.

今⽇話すこと ● Data Layer 基本的な設定、読み込み⽅法 ● Data Layer で扱える物とつまづきポイント ● UEFN上での挙動周り ● Data Layer のメリット、デメリット

44.

UEFN上での挙動周り ● ロードにかかる時間 ● 破損したBuilding WallなどをData Layerで ロードしなおした際の挙動 ● Data Layerによるメモリ使⽤量への影響

45.

UEFN上での挙動周り ● ロードにかかる時間 ● 破損したBuilding WallなどをData Layerで ロードしなおした際の挙動 ● Data Layerによるメモリ使⽤量への影響

46.

Loaded -> Activated vs Unloaded -> Activated

47.

各状態について Activated: データが読み込まれている & 画⾯上に表⽰されている状態 Loaded: データが読み込まれているが、画⾯上では⾮表⽰な状態 Unloaded: データを読み込んでいない状態

48.

各状態について Activated: データが読み込まれている & 画⾯上に表⽰されている状態 Loaded: データが読み込まれているが、画⾯上では⾮表⽰な状態 Unloaded: データを読み込んでいない状態 これら2つの状態からActivatedにした際はどちらが早いのか?

49.

検証環境 ● 検証⽤デバイスを⼀式⽤意 ● 2パターンを検証 建物を含めたData Layerを LoadedからActivatedにしたパターン ○ 建物を含めたData Layerを UnloadedからActivatedにしたパターン 建物はエクリプス‧エステートを利⽤ ○ ●

50.

https://youtu.be/4rOb7Kf63Cw

51.

結論 Loaded -> Activated:約1秒 Unloaded -> Activated:約4秒 LoadedからActivatedのパターンの⽅が早く、若⼲安定しやすい Switchでは⼤凡4500メモリであればヒッチ無しで 即読み込みができるが、 複数のData Layerを活⽤し、順序⽴ててロードするのがオススメ

52.

UEFN上での挙動周り ● ロードにかかる時間 ● 破損したBuilding WallなどをData Layerで ロードしなおした際の挙動 ● Data Layerによるメモリ使⽤量への影響

53.

Unloaded -> Activated Loaded -> Activated https://youtu.be/AvoJdIO4zX4 https://youtu.be/fCX7UHb_PQU

54.

結果 ● Unloaded -> Activated -> Unloadedの繰り返し ○ 2回⽬以降も初期状態が読み込まれる ○ 破壊可能な建築物は破壊される前が復元される ● Loaded -> Activated -> Loadedの繰り返し ○ 2回⽬以降も初期状態が読み込まれる ○ 基本的にはUnloaded -> Activatedと同じ挙動 ○ ただし、2回⽬から適切にオブジェクトが表⽰されないケースがあった 確実性の点ではUnloaded -> Activatedが良いと思われる

55.

UEFN上での挙動周り ● ロードにかかる時間 ● 破損したBuilding WallなどをData Layerで ロードしなおした際の挙動 ● Data Layerによるメモリ使⽤量への影響

56.

Data Layerを使えば メモリ使⽤量を管理できるのか?

57.

できる なんならEpicも勧めてはいる ただし、⾃⼰責任

58.

メモリ計算の検証環境 ● ● ● ● 検証⽤デバイスを⼀式⽤意 建物をData Layerに格納 建物はエクリプス‧エステートを利⽤ 4パターンを検証 ○ ○ ○ ○ ● デバイスのみを含めたレベル Data Layerの初期値をActivatedにしたレベル Data Layerの初期値をLoadedにしたレベル Data Layerの初期値をUnloadedにしたレベル 各レベルにてメモリ計算を実⾏

59.

デバイスのみを含めたレベル(Data Layerなし)

60.

建物を含めたData LayerをActivatedにしたレベル

61.

建物を含めたData LayerをLoadedにしたレベル

62.

建物を含めたData LayerをUnloadedにしたレベル

63.

つまり? ● UEFNのメモリ計算は現在Level上でロードされている物を元に計算 ○ ● Data Layerのロードによるメモリ管理は仕様 ○ ● ストリーミングの場合は現在の位置を元にロードされた物が対象 メモリ管理の⾯ではWorld Partitionのストリーミングと実質同じではある Data Layerを活⽤することでメモリ使⽤量を管理することは可能 ただし…

64.

Data Layerのロードには時間がかかる ● Data Layerはロードする総量やハード次第で⼤きなヒッチが発⽣ ● このヒッチを上⼿く回避できるように実装しなければ 島クリエイター規約に抵触する可能性 島クリエイター規約より引⽤ ご利⽤の際は⾃⼰責任で

65.

TalismanではData Layerを活⽤ TalismanではData Layerを利⽤し、メモリ管理を⾏っています また、複数のData Layerを利⽤して各レイヤーを順次読み込むことで ⼀気に⼤量のデータをロードした際に発⽣するヒッチを回避している 該当プロジェクトでは部屋ごとのDataLayerと 部屋内のPropグループ別にDataLayerを切り分けている様⼦

66.

今⽇話すこと ● Data Layer 基本的な設定、読み込み⽅法 ● Data Layer で扱える物とつまづきポイント ● UEFN上での仕様周り ● Data Layer のメリット、デメリット

67.

DataLayerのメリット、デメリット メリット: ● Level上のアセットをパーツごとに切り分け可能 ○ ○ ● ステージごとにData Layerを分けることで管理、制作、プレビューしやすい ステージバリエーションのあるゲームで活躍 Data Layerを扱うことで島のメモリ管理を⾏うことが可能 ○ ただし乱⽤は注意

68.

DataLayerのメリット、デメリット メリット: ● Level上のアセットをパーツごとに切り分け可能 ○ ○ ● ステージごとにData Layerを分けることで管理、制作、プレビューしやすい ステージバリエーションのあるゲームで活躍 Data Layerを扱うことで島のメモリ管理を⾏うことが可能 ○ ただし乱⽤は注意 デメリット: ● Deviceの挙動が変わる/使えなくなるDeviceがある。 ○ Deviceを管理する場合のみ

69.

塩⾕が取っているData Layerレギュレーション ● Data Layerは背景に対してのみ利⽤ ○ ● ステージ、切り替えたい背景単位、ゲーム内での分岐によるステージ変化など DeviceやVerse DeviceはLevelのRootに配置 ○ Data Layerには含めない ■ ○ それ単体で済む(他のDeviceと連携しない)Deviceは例外 ■ ● Deviceから参照が必要な物はGameplayTagを利⽤するなどで⼯夫 ExplosionやChest and Ammo Galleryなど Daya Layerによるメモリ使⽤量の管理はプロジェクト開始時に検討 ○ プロジェクトの規模感や要件を考慮して最初に検討 ○ そもそも後から対応は⼤変

70.

まとめ ● ● ● ● Data Layerは⼤きく島の印象や体験を変化させる時に有⽤ ゲームフローに関わるDeviceを管理すると複雑化しやすい ご利⽤の際は事前にルールを決めておきましょう ご利⽤は計画的に

71.

参考⽂献 ● ● ● ● ● Memory Management in UEFN and Fortnite Creative | Unreal Fest 2023 ○ https://youtu.be/gtX0gPOSkbU?si=g5OzhcrYsBKwSpF9 Achieving Realistic Visual Styles in UEFN with MetaHumans and Marvelous Designer | GDC 2024 ○ https://youtu.be/aoLFt6bBWbU?si=ZalIEHqpZZDyg6j7 ストリーミングと HLOD | UEFN公式ドキュメント ○ https://dev.epicgames.com/documentation/ja-jp/uefn/streaming-and-hlods-in-unreal-ed itor-for-fortnite メモリ管理 | UEFN公式ドキュメント ○ https://dev.epicgames.com/documentation/ja-jp/uefn/memory-management-in-unreal-e ditor-for-fortnite 【UE5】WorldPartitionのDataLayerについてあれやらこれやら【★★】 ○ https://kinnaji.com/2022/12/24/worldpartition-datalayer/