21.3K 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/
今:UEFN をメインにフリーランスで開発やサポートなどしてます。 前:Epic Games JapanでUEFNやUE5の教育まわり担当。その前はゲーム開発会社のレベルデザイナー。 メキシコのタコスが好きです🌮
UEFN Tokyo #4 DataLayerをUEFNで使ってみよう 塩⾕祐也
この資料の内容 DataLayerに触れるの初めて!という⽅を対象に ● ● ● DataLayerのとは? 使い⽅ メリット、デメリット などを紹介していく資料です。 本資料はUEFN version 29.20にて検証しています。 前半は⽐較的初⼼者向けですが、後半はちょっとディープかも...?
あなた誰よ? 塩⾕祐也 フリーランス UEFN 開発者 ゲーム/レベルデザイナー 国内のスタジオさん向けに UEFNの開発、サポート、ゲーム/レベルデザインの アドバイザーなどのお仕事をしています。 茜空...ああ...茜空... Ukkaの”透明”聴いたことあります?聴こ?
Special Thanks wanimationさん いつも検証にお付き合いいただきありがとうございます!
今⽇話すこと ● Data Layer 基本的な設定、読み込み⽅法 ● Data Layer で扱える物とつまづきポイント ● UEFN上での仕様周り ● Data Layer のメリット、デメリット
今⽇話すこと ● Data Layer 基本的な設定、読み込み⽅法 ● Data Layer で扱える物とつまづきポイント ● UEFN上での仕様周り ● Data Layer のメリット、デメリット
DataLayerとは? データ レイヤーは、アクタをさまざまなレイヤーに整理するために使⽤される、 UEFN にあるシステムです。 これらのレイヤーをロードおよびアンロードすることで、ワールドを整理して複 雑なレベルを管理し、独⾃のゲームプレイ体験を作り出すことができます。 ランダム化された複数のレベルを使⽤するゲームがあるとします。レイヤーごと に異なるレベル レイアウトを設定し、ゲームの開始時にそのいずれかをランダム に選択することで、体験にバリエーションと刺激を加えることができます。 https://dev.epicgames.com/documentation/ja-jp/uefn/streaming-and-hlods-i n-unreal-editor-for-fortnite
こういうことができます
https://youtu.be/Ki78Sqa1X-0
Data Layer 基本的な設定、利⽤⽅法 ● Data Layerアセット ● レベル上での扱い ● ロードとアンロード
Data Layer 基本的な設定、利⽤⽅法 ● Data Layer アセット ● レベル上での扱い ● ロードとアンロード
Data Layer はアセットの1つ Content Browser上で作成可能
Data Layer はアセットの1つ 必要なレイヤー分アセットを⽤意 背景の種類、ステージごとなど
Data Layer 基本的な設定、利⽤⽅法 ● Data Layer アセット ● レベル上での扱い ● ロードとアンロード
Data Layer を Level に追加する Data Layerを活⽤するにはLevelへの追加が必須 Data Layer OutlinerにD&Dで追加可能
Data Layer Outliner が無い場合 メニューバーから表⽰可能 Windows -> World Partition -> Data Layer Outliner
Data Layer のInitial Runtime Stateを確認 Initial Runtime State = ゲーム開始時のレイヤーの初期状態 設定された値に応じてゲーム開始時の挙動が変化 ロードされているのか? アンロードされているのか?
各状態について Activated: データが読み込まれている & 画⾯上に表⽰されている状態 Loaded: データが読み込まれているが、画⾯上では⾮表⽰な状態 Unloaded: データを読み込んでいない状態
Data Layer に Actor を追加する 追加したいData Layerをダブルクリック テキストが緑になり、(現在)と表⽰されれば編集状態
Data Layer に Actor を追加する 後はActorをレベル上に追加していけばOK 適切に追加できていればアウトライナー上で どのData Layerに含まれているのか確認できる
注意:Data Layer の所属について 親⼦付したActorは親が所属するData Layerのステータスが優先される ⼦Actorが所属するData Layerがアンロードされても、 親ActorのData Layerがロードされていれば表⽰されつづける ⼦Actorも Data Layerの対象になるパターン ⼦Actorは Data Layerの対象にならないパターン
既に配置している Actor を Data Layer へ追加したい
既に配置している Actor を Data Layer へ追加したい 追加したいActorを選択 Data Layer Outliner上で追加先のData Layerを右クリック "Add Selected Actor(s) to Selected Data Layer(s)"を押すと移動可能
Level 上での表⽰管理 「このレイヤー以外は⾒えなくても良いんだけど…」って時は?
Level 上での表⽰管理 ⽬⽟アイコンをクリックして可視性を切り替え可能
Data Layer 基本的な設定、利⽤⽅法 ● Data Layer アセット ● レベル上での扱い ● ロードとアンロード
ロードとアンロード UEFN 29.20 時点において DataLayer を読み込む⽅法は下記のみ ● Data Layer の初期設定(Initial Runtime State) ● Sequencer & Cinematic Sequence Device
ロードとアンロード UEFN 29.20 時点において DataLayer を読み込む⽅法は下記のみ ● Data Layer の初期設定(Initial Runtime State) ● Sequencer & Cinematic Sequence Device
Sequencer によるロード、アンロード Level Sequence内でData Layerトラックを利⽤
Sequencer によるロード、アンロード Data Layerトラックの"+"ボタンから変更したい状態を選択
Sequencer によるロード、アンロード トラックを右クリックして詳細を設定 1. 2. 3. 4. 終了時:Sequencer終了後の状態 状態を変更するData Layerリスト ⽬的の統計:変更後の状態 プリロール状態:変更前の状態
Sequencer によるロード、アンロード オススメ: Data Layerの読み替えの場合はActivatedとUnloadedをトラックで2つ⽤意
Cinematic Sequence Deviceの視認性 視認性が発信者のみだとしても Data Layerはロードされれば全てのプレイヤーに影響
今⽇話すこと ● Data Layer 基本的な設定、読み込み⽅法 ● Data Layer で扱える物とつまづきポイント ● UEFN上での仕様周り ● Data Layer のメリット、デメリット
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(要注意)
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(要注意)
Data Layer でDeviceを管理する場合 ● ● DeviceをそのままData Layerに格納することは不可能 適当なActorなどにDeviceを親⼦付けすると親を返してData Layerで管理可能 ○ ● DeviceのMobilityは親のMobilityに合わせること RootとData LayerそれぞれのDevice同⼠でEventをBindingすることも可能
Data Layer でのDevice管理は 個⼈的には⾮推奨
なぜか? ● 処理が複雑化しやすい ○ 「Data Layer AでこのDeviceを読み込んで、このイベントを処理して他のData Layerで...」
なぜか? ● 処理が複雑化しやすい ○ ● 「Data Layer AでこのDeviceを読み込んで、このイベントを処理して他のData Layerで...」 Deviceに対してはそもそも裏技的な⽅法 ○ できる。というだけで公式にサポートされた⽅法か怪しい ○ 29.00以降、別々のData Layerに含まれたDevice同⼠を参照し合うとMap Checkでエラー
なぜか? ● 処理が複雑化しやすい ○ ● ● 「Data Layer AでこのDeviceを読み込んで、このイベントを処理して他のData Layerで...」 Deviceに対してはそもそも裏技的な⽅法 ○ できる。というだけで公式にサポートされた⽅法か怪しい ○ 29.00以降、別々のData Layerに含まれたDevice同⼠を参照し合うとMap Checkでエラー 挙動が変わる場合がある ○ Creature Spawner Deviceの場合はDeviceが上⼿くロードされない ○ どうしても利⽤したい場合はDevice同⼠連携しない物に限るなどレギュレーションを決める
なぜか? ● 処理が複雑化しやすい ○ ● ● 「Data Layer AでこのDeviceを読み込んで、このイベントを処理して他のData Layerで...」 Deviceに対してはそもそも裏技的な⽅法 ○ できる。というだけで公式にサポートされた⽅法か怪しい ○ 29.00以降、別々のData Layerに含まれたDevice同⼠を参照し合うとMap Checkでエラー 挙動が変わる場合がある ○ Creature Spawner Deviceの場合はDeviceが上⼿くロードされない ○ どうしても利⽤したい場合はDevice同⼠連携しない物に限るなどレギュレーションを決める ご利⽤の際は⾃⼰責任で
今⽇話すこと ● Data Layer 基本的な設定、読み込み⽅法 ● Data Layer で扱える物とつまづきポイント ● UEFN上での挙動周り ● Data Layer のメリット、デメリット
UEFN上での挙動周り ● ロードにかかる時間 ● 破損したBuilding WallなどをData Layerで ロードしなおした際の挙動 ● Data Layerによるメモリ使⽤量への影響
UEFN上での挙動周り ● ロードにかかる時間 ● 破損したBuilding WallなどをData Layerで ロードしなおした際の挙動 ● Data Layerによるメモリ使⽤量への影響
Loaded -> Activated vs Unloaded -> Activated
各状態について Activated: データが読み込まれている & 画⾯上に表⽰されている状態 Loaded: データが読み込まれているが、画⾯上では⾮表⽰な状態 Unloaded: データを読み込んでいない状態
各状態について Activated: データが読み込まれている & 画⾯上に表⽰されている状態 Loaded: データが読み込まれているが、画⾯上では⾮表⽰な状態 Unloaded: データを読み込んでいない状態 これら2つの状態からActivatedにした際はどちらが早いのか?
検証環境 ● 検証⽤デバイスを⼀式⽤意 ● 2パターンを検証 建物を含めたData Layerを LoadedからActivatedにしたパターン ○ 建物を含めたData Layerを UnloadedからActivatedにしたパターン 建物はエクリプス‧エステートを利⽤ ○ ●
https://youtu.be/4rOb7Kf63Cw
結論 Loaded -> Activated:約1秒 Unloaded -> Activated:約4秒 LoadedからActivatedのパターンの⽅が早く、若⼲安定しやすい Switchでは⼤凡4500メモリであればヒッチ無しで 即読み込みができるが、 複数のData Layerを活⽤し、順序⽴ててロードするのがオススメ
UEFN上での挙動周り ● ロードにかかる時間 ● 破損したBuilding WallなどをData Layerで ロードしなおした際の挙動 ● Data Layerによるメモリ使⽤量への影響
Unloaded -> Activated Loaded -> Activated https://youtu.be/AvoJdIO4zX4 https://youtu.be/fCX7UHb_PQU
結果 ● Unloaded -> Activated -> Unloadedの繰り返し ○ 2回⽬以降も初期状態が読み込まれる ○ 破壊可能な建築物は破壊される前が復元される ● Loaded -> Activated -> Loadedの繰り返し ○ 2回⽬以降も初期状態が読み込まれる ○ 基本的にはUnloaded -> Activatedと同じ挙動 ○ ただし、2回⽬から適切にオブジェクトが表⽰されないケースがあった 確実性の点ではUnloaded -> Activatedが良いと思われる
UEFN上での挙動周り ● ロードにかかる時間 ● 破損したBuilding WallなどをData Layerで ロードしなおした際の挙動 ● Data Layerによるメモリ使⽤量への影響
Data Layerを使えば メモリ使⽤量を管理できるのか?
できる なんならEpicも勧めてはいる ただし、⾃⼰責任
メモリ計算の検証環境 ● ● ● ● 検証⽤デバイスを⼀式⽤意 建物をData Layerに格納 建物はエクリプス‧エステートを利⽤ 4パターンを検証 ○ ○ ○ ○ ● デバイスのみを含めたレベル Data Layerの初期値をActivatedにしたレベル Data Layerの初期値をLoadedにしたレベル Data Layerの初期値をUnloadedにしたレベル 各レベルにてメモリ計算を実⾏
デバイスのみを含めたレベル(Data Layerなし)
建物を含めたData LayerをActivatedにしたレベル
建物を含めたData LayerをLoadedにしたレベル
建物を含めたData LayerをUnloadedにしたレベル
つまり? ● UEFNのメモリ計算は現在Level上でロードされている物を元に計算 ○ ● Data Layerのロードによるメモリ管理は仕様 ○ ● ストリーミングの場合は現在の位置を元にロードされた物が対象 メモリ管理の⾯ではWorld Partitionのストリーミングと実質同じではある Data Layerを活⽤することでメモリ使⽤量を管理することは可能 ただし…
Data Layerのロードには時間がかかる ● Data Layerはロードする総量やハード次第で⼤きなヒッチが発⽣ ● このヒッチを上⼿く回避できるように実装しなければ 島クリエイター規約に抵触する可能性 島クリエイター規約より引⽤ ご利⽤の際は⾃⼰責任で
TalismanではData Layerを活⽤ TalismanではData Layerを利⽤し、メモリ管理を⾏っています また、複数のData Layerを利⽤して各レイヤーを順次読み込むことで ⼀気に⼤量のデータをロードした際に発⽣するヒッチを回避している 該当プロジェクトでは部屋ごとのDataLayerと 部屋内のPropグループ別にDataLayerを切り分けている様⼦
今⽇話すこと ● Data Layer 基本的な設定、読み込み⽅法 ● Data Layer で扱える物とつまづきポイント ● UEFN上での仕様周り ● Data Layer のメリット、デメリット
DataLayerのメリット、デメリット メリット: ● Level上のアセットをパーツごとに切り分け可能 ○ ○ ● ステージごとにData Layerを分けることで管理、制作、プレビューしやすい ステージバリエーションのあるゲームで活躍 Data Layerを扱うことで島のメモリ管理を⾏うことが可能 ○ ただし乱⽤は注意
DataLayerのメリット、デメリット メリット: ● Level上のアセットをパーツごとに切り分け可能 ○ ○ ● ステージごとにData Layerを分けることで管理、制作、プレビューしやすい ステージバリエーションのあるゲームで活躍 Data Layerを扱うことで島のメモリ管理を⾏うことが可能 ○ ただし乱⽤は注意 デメリット: ● Deviceの挙動が変わる/使えなくなるDeviceがある。 ○ Deviceを管理する場合のみ
塩⾕が取っているData Layerレギュレーション ● Data Layerは背景に対してのみ利⽤ ○ ● ステージ、切り替えたい背景単位、ゲーム内での分岐によるステージ変化など DeviceやVerse DeviceはLevelのRootに配置 ○ Data Layerには含めない ■ ○ それ単体で済む(他のDeviceと連携しない)Deviceは例外 ■ ● Deviceから参照が必要な物はGameplayTagを利⽤するなどで⼯夫 ExplosionやChest and Ammo Galleryなど Daya Layerによるメモリ使⽤量の管理はプロジェクト開始時に検討 ○ プロジェクトの規模感や要件を考慮して最初に検討 ○ そもそも後から対応は⼤変
まとめ ● ● ● ● Data Layerは⼤きく島の印象や体験を変化させる時に有⽤ ゲームフローに関わるDeviceを管理すると複雑化しやすい ご利⽤の際は事前にルールを決めておきましょう ご利⽤は計画的に
参考⽂献 ● ● ● ● ● 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/