94.3K Views
January 20, 23
スライド概要
2022年11月18日に行われたライセンシー様向けUE5.1勉強会の資料です。
スライドに埋め込まれた動画は下記URL先のパワポ版にてご確認ください。
https://epicgames.ent.box.com/s/gu5vwl64vxa6c6n2t6py909nwxkngsak
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
World Buliding / Core UE5.1 アップデート
Unreal Engine 5.1 Update World Bulding 編 Epic Games Japan Ken Kuwano
World Building ● Data Layer ● Level Instance ● Actor Editor Context
Data Layer World上のActorをレイヤー単位で管理し、シナリオに応じて生成するステージ を切り替えたり、ワールドのバリエーションを作成するために利用できる機能 公式ドキュメント:World Partition - データ レイヤー ● ミッション, シーケンス ● Props, AIなど特定のデータ ● 昼, 夜などバリエーションデータ などの管理
Data Layer UE5.1からData Layerは2つの構成に分割 UE5.0 Data Layer ● Data Layer Asset Data Layerの設定がアセット化されたもの → 再利用が可能 ● Data Layer Instance World上のActorを纏めて管理するレイヤー実体 → レベル毎に設定 UE5.1 DataLayer Asset DataLayer Instance
UE5.0 UE5.1
5.0 から移行する場合はコマンドレットで変換が必要 UE5.0 ではアセット化されていな かったのでコマンドレットによっ てアセット化が必要 コマンドレット [Project] -run=DataLayerToAssetCommandlet [LevelName] -DestinationFolder=[Folder] 例: C:¥Engine¥Launcher¥UE_5.1¥Engine¥Binaries¥Win64¥UnrealEditorCmd.exe C:¥Projects¥ThirdPerson¥ThirdPerson.uproject run=DataLayerToAssetCommandlet ThirdPersonMap.umap DestinationFolder=/Game/DataLayer
Level Instance レベルをインスタンス化することによって、レベルの中にレベルを配置したり 複製することができる機能 公式ドキュメント:Level Instancing Level Instance Main Level
Level Instance vs Packed Level Actor Level Instance Packed Level Actor 目的 レベル自体をインスタンス化したもの Level内のメッシュを最適化して配置できるもの Level Instance の拡張(継承) Actor 機能 ネストされた階層的なレベルのインスタンス 同じワールド内で複数のインスタンスが展開可能 SM/ISM/HISMのみを含むPacked Level Actorを出力 同じワールド内で複数のインスタンスが展開可能 使用例 拠点、住宅、独立したゲームプレイの設定など 静的な建物、同じモデルを使い回す建物など ※ Level Instance 内に Level Instance, Packed Level Instance を保存可能 (階層構造) ※ Level Instance は配置後にオーバーライドして内包されたActorの書き換え等は不可
Level Instance アップデート ● ● ● ● Level Instance 内の Actor から Data Layer を参照が可能 複数Instanceを纏めてレベル上でBreak (Actorとして分解) が可能 Content Browser から Drag&Drop でLevel Instanceとしてレベルを配置可能 “Ctrl+E” キーでLevel Instanceをショートカットから編集可能
Actor Editor Context UE5.1 でEditorのViewport右下隅に Actor Editor Contetの表示を追加 現在選択中のレベル、データレイヤー、 ディレクトリを表示/切替できる機能
World Partition 未使用時には現在選択中のレベルを表示/切替
Level Instance編集時には編集中のLevel Instance名を表示
[Make Current Data Layer(s)] を選択すると新規Actorは選択中のData Layerに追加
[Make Current Folder] を選択すると新規Actorは選択中のFolderに追加
その他、UE5.1までに修正した不具合等 200以上の修正を適用 ● ● ● ● ● WP変換のコマンドレット実行後にフォリッジがロードされない:UE-155064 PIE時にWPが有効なレベルに移行するとエラーログが出力:UE-155286 WP有効でのマルチプレイ時にサーバーから切断される : UE-163742 Level Instanceを重複して内包する : UE-167079 DataLayerのインスタンスがロードされたままになる : UE-164366 既知の問題点については今後対応予定 ● 原点から離れたアニメーションのぼやけ : UE-155378
HLOD アップデート Epic Games Japan 斎藤 修
はじめに まずは HLODについて簡単なおさらいを
はじめに まずは HLODについて簡単なおさらいを
はじめに LOD まずは HLODについて簡単なおさらいを
はじめに LOD まずは HLODについて簡単なおさらいを
はじめに LOD HLOD まずは HLODについて簡単なおさらいを
はじめに UE5.1現在 HLODを作成、運用する方法は 大きく分けて2通りに分かれます
はじめに World Partitionを 使用する場合 World Partitionを 使用しない場合 UE5.1現在 HLODを作成、運用する方法は 大きく分けて2通りに分かれます
はじめに World Partitionを 使用する場合 World Partitionを 使用しない場合 https://docs.unrealengine.com/5.0/ja/world-partition---hierarchical-level-ofdetail-in-unreal-engine/ https://docs.unrealengine.com/5.0/ja/hierarchical-level-of-detail-in-unrealengine/ UE5.1現在 HLODを作成、運用する方法は 大きく分けて2通りに分かれます
はじめに World Partitionを 使用する場合
はじめに World Partitionを 使用しない場合
はじめに World Partitionを 使用する場合 World Partitionを 使用しない場合 https://docs.unrealengine.com/5.0/ja/world-partition---hierarchical-level-ofdetail-in-unreal-engine/ https://docs.unrealengine.com/5.0/ja/hierarchical-level-of-detail-in-unrealengine/ この2つ 現時点では ワークフローが大きく異なっていますのでお気をつけください
はじめに World Partitionを 使用しない場合 https://docs.unrealengine.com/5.0/ja/hierarchical-level-of-detail-in-unrealengine/ また WPを使用しない場合のHLODは 現在あまり更新がありません
はじめに World Partitionを 使用する場合 https://docs.unrealengine.com/5.0/ja/world-partition---hierarchical-level-ofdetail-in-unreal-engine/ WPを使用する場合のHLODのアップデートは 5.1時点では多くないですが 今後様々に予定されています
HLOD アップデート 5.1ではWaterのHLOD対応が入りました Landscapeは5.0にて対応されています
HLOD アップデート ・HLODにカスタムメッシュを設定可能に ・HLODをエディタ上で確認可能に(現在はPIEが必要) ・特定グリッドのHLODのみをビルド可能に 将来的なHLODの機能予定です 5.1には間に合いませんでしたが 今後にご期待ください
HLOD アップデート また 5.0での既知の不具合として 連続したHLODビルドに不具合があることが報告されています 一度HLODを削除してから再ビルドすると安全です
Landscape & Water アップデート Epic Games Japan 斎藤 修
Landscape アップデート Landscapeには大きなアップデートはありませんが Nanite化対応が入りました
Landscape アップデート また 現在既知の問題として 広大なLandscape(8kなど)の編集が非常に重くなることがあります
Landscape アップデート landscape.EditLayersLocalMerge.Enable 1 5.0時点でLandscapeコンポーネント単位の更新が 可能となってますので こちらを是非お試しください
Landscape アップデート 一点 Water(&Landmass)を使用した場合は依然重いです こちらは将来的にBPブラシのAPIレベルでの改善が予定されています
Water アップデート Waterも同じく大きなアップデートはありませんが LOD及びHLOD対応が入りました
Water アップデート LODは一定距離からWaterテクスチャを参照せず スタティックメッシュ化されます
Water アップデート Waterテクスチャもランタイム生成となり WaterZoneが複数使用可能です メモリと処理負荷削減に貢献します
Unreal Engine 5.1 Update Virtual Asset / Unreal Cloud DDC編 Epic Games Japan Takashi Suzuki
イテレーション速度改善機能 Virtual Asset 中規模以上の全プロジェクト向け Unreal Cloud DDC 複数拠点開発やリモートワーク向け
Virtual Asset
Virtual Asset 目的 各開発者のPCのディスクスペースの削減 ソースコントロールの同期サイズを削減 ● ほとんどのアセットは各開発者のエディタで実のところほとんど使われない ● 対応するアセットを必須部分と追加データ(ペイロード)に分割 ● ソースコントロールには必須部分だけをサブミット ● ペイロードはオンデマンドで取得 ● Betaとして5.1でリリース
Virtual Asset データの流れ Structured Data 必須データ Source Control Payload 追加データ 1. アセット作成 VA Backend 2. Submit 3. Sync 4. Run 5. データ要求
現時点で Virtual Asset に対応するアセット ● [5.1] ● Texture ● [5.1では無効] ※何らかの原因でペイロードを取得できなかった場合にクラッシュする可能性があるため ● StaticMesh ● SoundWave? ● [5.2以降] ● NaniteMesh
Virtual Asset Backends ● FileSystem ● PCのローカルのファイルシステム ● テスト用 / キャッシュ用 ● DDCBackend ● メインのDDCを使う ● UnrealCloudDDC(HordeStorage)が前提 ● P4SourceControl ● 現時点ではPerforce専用
Virtual Asset用 P4Depot VA用の専用デポが必要 Localタイプ (NOT Stream デポ) デポの直下にpayload_metainfo.txtを配置すること 例) //VAStore/payload_metainfo.txt 現時点ではpayload_metainfo.txtは0byteのフ ァイル サーバー側でPertitionedタイプのクライアントを許可しておく https://portal.perforce.com/s/article/15372
Virtual Asset セットアップ (ローカルテスト) DefaultEngine.ini [Core.ContentVirtualization] ; 仮想化システム名 ; None=使わない / Default=EPIC製デフォルトシステム SystemName=Default [Core.VirtualizationModule] ; この値以下のペイロードを仮想化しない MinPayloadLength=0 ; バックエンドブラフのセクション名 BackendGraph=VABackendGraph_FileSystem ; 特定のアセットタイプの無効化 +DisabledAsset=StaticMesh +DisabledAsset=SoundWave [VABackendGraph_FileSystem] ; キャッシュ用途のストレージクラス CacheStorageHierarchy=(Entry=FileSystemCache) ; 永続データ用のストレージクラス PersistentStorageHierarchy=(Entry=FileSystemCache) FileSystemCache=(Type=FileSystem, Path="%GAMESAVEDDIR%VirtualizedPayloads/")
SourceControlBackendのセットアップ DefaultEngine.ini [Core.ContentVirtualization] ; 仮想化システム名 ; None=使わない / Default=EPIC製デフォルトシステム SystemName=Default [Core.VirtualizationModule] ; この値以下のペイロードを仮想化しない MinPayloadLength=0 ; バックエンドブラフのセクション名 BackendGraph=VABackendGraph_UsingSourceControl ; 特定のアセットタイプの無効化 +DisabledAsset=StaticMesh +DisabledAsset=SoundWave [VABackendGraph_UsingSourceControl] ; キャッシュ用途のストレージクラス CacheStorageHierarchy=(Entry=FileSystemCache) ; 永続データ用のストレージクラス PersistentStorageHierarchy=(Entry=PerforceStorage) FileSystemCache=(Type=FileSystem, Path="%GAMESAVEDDIR%VirtualizedPayloads/") PerforceStorage=(Type=P4SourceControl, DepotRoot=”//VAStore” ) 詳しい設定はEngine¥Source¥Developer¥Virtualization¥Private¥VirtualizationSourceControlBackend.hを参照
Virtual Assetの確認 Tools > Audit > Virtual Assets
Virtual Assetの解除 ●方法1 UnrealVirtualizationToolを使う Usage) -ClientSpecName=<name> [optional] -Mode=Rehydrate -Package=<string> -ClientSpecName=<name> [optional] -Mode=Rehydrate -PackageDir=<string> -ClientSpecName=<name> [optional] -Mode=Rehydrate -Changelist=<number> Sample) UnrealVirtualizationTool.exe -ClientSpecName=MYPC_MyTestStream -Mode=Rehydrate -Package=D:¥dev¥VATest¥Content¥Textures¥TestTexture.uasset ※ClientSpecNameはプロジェクトのワークスペース名 (チェックアウト用) ●方法2 エディタ上で操作 1.エディタ設定より Virtualized Asset Rehydration にチェックを入れる 2. Asset Action > Rehydrate Asset をクリック (事前にチェックアウトしておくこと)
ペイロードキャッシュのフィル ペイロードをフィルするコマンドレットがあります。 -run=VirtualizationEditor.PrecachePayloads -VABackendGraph=VA_CacheOffline
Virtual Asset とロールバック操作 Version 1 75AF2D672A… 2286AB7D54A… 75AF2D672A… 2286AB7D54A… Version 1 VA Submit Version 2 75AF2D672A… Version 2 VA Submit Version 1 VA Rollback StructuredDataとペイロードの紐づけはハッシュ値を使って行われるので、ロールバック操作が行われていても正しいペイロードを取得できます
その他TIPS DefaultEngine.ini [Core.VirtualizationModule] ;フィルタモード OptOut=全てのアセットに対してVA有効(ExcludePackagePathsで除外) OptIn=VA無効(IncludePackagePathsで有効化) FilterMode=OptOut [/Script/Virtualization.VirtualizationFilterSettings] +ExcludePackagePaths="/Game/StarterContent/Textures/" ; +IncludePackagePaths="/Game/StarterContent/Textures/"
Horde
Horde ● UnrealEngine用分散フレームワーク群 ● スケーラブル ● クラウドでの利用を想定 Horde CI ● UE用CI/CD Experimental Horde Compute ● 汎用分散コンピュート 未リリース Horde Storage ● 分散ストレージサービス Experimental
Horde ● UnrealEngine用分散フレームワーク群 ● スケーラブル ● クラウドでの利用を想定 UnrealCloudDDC Horde CI ● UE用CI/CD Experimental Horde Compute ● 汎用分散コンピュート 未リリース Horde Storage ● 分散ストレージサービス Experimental
Unreal Cloud DDC
Unreal Fest 2022 のセッション Improving Iteration in Geo-Distributed Scenarios | Unreal Fest 2022 https://www.youtube.com/watch?v=8z9bxDCrFO8
UnrealCloudDDC(Horde Strage) 目的 複数の拠点に開発者が分散するような大規模プロジェクト用DDCストア ● クラウドで動作するHTTPサーバー ● スケーリング ● データセンター間のレプリケーション ● AWS/Azure/オンプレミスなどに柔軟に対応可能 ● Ubuntu上で動作 ● OIDC認証によるセキュリティ ● Docker構成ファイルあり インフラチームと綿密な相談を
UnrealCloudDDCサーバーのソースファイル ● Hordeシリーズについて ● ¥Engine¥Source¥Programs¥Horde¥README.md ● HordeStorageのコードのルート ● ¥Engine¥Source¥Programs¥Horde¥HordeStorage ● HordeStorageについて ● ¥Engine¥Source¥Programs¥Horde¥HordeStorage¥README.md ● 共有ライブラリ群 ● ¥Engine¥Source¥Programs¥Shared ● Docker用の構成ファイル ● ¥Engine¥Source¥Programs¥Horde¥HordeStorage¥Composes¥*
UnrealCloudDDCのセットアップ 1. Docker及びDockerComposeをセットアップしておく 2. “Programs¥Horde¥HordeStorage*“ と “¥Engine¥Source¥Programs¥Shared¥*”をUbuntu上に展 開 3. “docker-compose -f Composes¥docker-compose-tests.yml -p jupiter-test up” でDBなどのサービスを起動しておく。 本番環境でのバックエンド構成は自由です。 4. “docker-compose -f Composes¥docker-compose.yml -f Composes¥docker-compose-aws.yml up --build” でHordeStorageを起動する
TIPS ●HordeStorageのコンフィグレーションファイル “Horde¥HordeStorage¥Horde.Storage¥appsettings.*.json” Docker内のASPNETCORE_ENVIRONMENT環境変数で設定ファイルを変更 デフォルトコンフィグレーションはProductionで “appsettings.Production.json”が読まれる ●テスト動作の場合 ● HordeStorageからMongoDBへの接続文字列を追加 ● Authを無効化 ●HordeStorageサービスのリッスンポートはKastrelの中
TIPS2 ●Namespace設定 CloudDDCにアクセスする際にパスの一部として使われる エディタからリクエストされたURLの例 /api/v1/refs/ue4.ddc/staticmesh/96b325e3d155f6120a099a49d6db7e02bd00b9c3/finalize/2069 51d4bb42fa0ad31277cc96d6150b038063f4 appsettings.Testing.jsonに記述例があります
動作確認 ブラウザから起動したサーバーに対して “IPアドレス/health/ready” にアクセ スしてHealthyが帰ってくればサーバーは起動しています
Editor側の設定例 DefaultEngine.ini [HordeStorageServers] MyLocal=(Host="http://localhost", Namespace="ue4.ddc") #SampleWithOAuth=(Host="https://yourcompany.com", Namespace="yourproject.ddc", StructuredNamespace="yourproject.sddc", OAuthProvider="https://yourcompany.ODIC.com/oauth2/abcdeabcde/v1/token", OAuthClientId="EfghiEfghi", OAuthSecret="file://%GAMEDIR%/Build/YourSecret.txt" ) [DerivedDataBackendGraph] Hierarchy=(Type=Hierarchical, Inner=Local, Inner=Shared, Inner=Cloud) Shared=(Type=FileSystem, DeleteUnused=false, ConsiderSlowAt=15, DeactivateAt=20, Path=¥¥yourdomain¥path¥DDC-YourProject, EnvPathOverride=UE-SharedDataCachePath, EditorOverrideSetting=SharedDerivedDataCache, CommandLineOverride=SharedDataCachePath) Cloud=(Type=Http, ServerID=MyLocal, ReadOnly=false)
Editor側の設定例 DefaultEngine.ini [HordeStorageServers] MyLocal=(Host="http://localhost", Namespace="ue4.ddc") #SampleWithOAuth=(Host="https://yourcompany.com", Namespace="yourproject.ddc", DerivedDataBackendGraphセクション StructuredNamespace="yourproject.sddc", Hierarchy設定の末尾に OAuthProvider="https://yourcompany.ODIC.com/oauth2/abcdeabcde/v1/token", OAuthClientId="EfghiEfghi", 追加のDDCストアを追加 OAuthSecret="file://%GAMEDIR%/Build/YourSecret.txt) [DerivedDataBackendGraph] Hierarchy=(Type=Hierarchical, Inner=Local, Inner=Shared, Inner=Cloud) Shared=(Type=FileSystem, DeleteUnused=false, ConsiderSlowAt=15, DeactivateAt=20, Path=¥¥yourdomain¥path¥DDC-YourProject, EnvPathOverride=UE-SharedDataCachePath, EditorOverrideSetting=SharedDerivedDataCache, CommandLineOverride=SharedDataCachePath) Cloud=(Type=Http, ServerID=MyLocal, ReadOnly=false)
Editor側の設定例 DefaultEngine.ini [HordeStorageServers] MyLocal=(Host="http://localhost", Namespace="ue4.ddc") DerivedDataBackendGraphセクション #SampleWithOAuth=(Host="https://yourcompany.com", Namespace="yourproject.ddc", 追加のDDCストア行を追加 StructuredNamespace="yourproject.sddc", Type=Http OAuthProvider="https://yourcompany.ODIC.com/oauth2/abcdeabcde/v1/token", OAuthClientId="EfghiEfghi", 及びサーバー識別名を記述 OAuthSecret="file://%GAMEDIR%/Build/YourSecret.txt) [DerivedDataBackendGraph] Hierarchy=(Type=Hierarchical, Inner=Local, Inner=Shared, Inner=Cloud) Shared=(Type=FileSystem, DeleteUnused=false, ConsiderSlowAt=15, DeactivateAt=20, Path=¥¥yourdomain¥path¥DDC-YourProject, EnvPathOverride=UE-SharedDataCachePath, EditorOverrideSetting=SharedDerivedDataCache, CommandLineOverride=SharedDataCachePath) Cloud=(Type=Http, ServerID=MyLocal, ReadOnly=false)
Editor側の設定例 DefaultEngine.ini [HordeStorageServers] MyLocal=(Host="http://localhost", Namespace="ue4.ddc") #SampleWithOAuth=(Host="https://yourcompany.com", Namespace="yourproject.ddc", StructuredNamespace="yourproject.sddc", OAuthProvider="https://yourcompany.ODIC.com/oauth2/abcdeabcde/v1/token", OAuthClientId="EfghiEfghi", OAuthSecret="file://%GAMEDIR%/Build/YourSecret.txt") [DerivedDataBackendGraph] Hierarchy=(Type=Hierarchical, Inner=Local, Inner=Shared, Inner=Cloud) HordeStorageServersセクション Shared=(Type=FileSystem, DeleteUnused=false, ConsiderSlowAt=15, DeactivateAt=20, サーバー識別名の行を追加し Host= にアドレスを追加 Path=¥¥yourdomain¥path¥DDC-YourProject, EnvPathOverride=UE-SharedDataCachePath, (http://localhost を設定でデバッグ用に認証処理を省略して動作) EditorOverrideSetting=SharedDerivedDataCache, CommandLineOverride=SharedDataCachePath) Cloud=(Type=Http, ServerID=MyLocal, ReadOnly=false)
Editor側の設定例 DefaultEngine.ini [HordeStorageServers] MyLocal=(Host="http://localhost", Namespace="ue4.ddc") #SampleWithOAuth=(Host="https://yourcompany.com", Namespace="yourproject.ddc", StructuredNamespace="yourproject.sddc", OAuthProvider="https://yourcompany.ODIC.com/oauth2/abcdeabcde/v1/token", OAuthClientId="EfghiEfghi", OAuthSecret="file://%GAMEDIR%/Build/YourSecret.txt") [DerivedDataBackendGraph] Hierarchy=(Type=Hierarchical, Inner=Local, Inner=Shared, Inner=Cloud) NameSpaceは Shared=(Type=FileSystem, DeleteUnused=false, ConsiderSlowAt=15, DeactivateAt=20, サーバー側のappsettingの中の Path=¥¥yourdomain¥path¥DDC-YourProject, EnvPathOverride=UE-SharedDataCachePath, Namespace設定に一致させる EditorOverrideSetting=SharedDerivedDataCache, CommandLineOverride=SharedDataCachePath) Cloud=(Type=Http, ServerID=MyLocal, ReadOnly=false)
Editor側の設定例 OAuth DefaultEngine.ini Localhost以外のアドレスを指定する場合OAuthによる セキュリティ設定が必要になります。 [HordeStorageServers] #MyLocal=(Host="http://localhost", Namespace="ue4.ddc") SampleWithOAuth=(Host="https://yourcompany.com", Namespace="yourproject.ddc", OAuthProvider="https://yourcompany.ODIC.com/oauth2/abcdeabcde/v1/token", OAuthClientId="EfghiEfghi", OAuthSecret="file://%GAMEDIR%/Build/YourSecret.txt" ) [DerivedDataBackendGraph] Hierarchy=(Type=Hierarchical, Inner=Local, Inner=Shared, Inner=Cloud) Shared=(Type=FileSystem, DeleteUnused=false, ConsiderSlowAt=15, DeactivateAt=20, Path=¥¥yourdomain¥path¥DDC-YourProject, EnvPathOverride=UE-SharedDataCachePath, EditorOverrideSetting=SharedDerivedDataCache, CommandLineOverride=SharedDataCachePath) Cloud=(Type=Http, ServerID=SampleWithOAuth, ReadOnly=false)
サーバー側のOAuth設定 Readme.MD内に記載があります 参照ソースファイル Engine¥Source¥Programs¥Horde¥HordeStorage¥Jupiter.Common¥BaseStartup.cs -AuthSettingsクラス -AuthSchemeEntryクラス