🪐

[UE5] 仮想アセット(Virtual Assets)を有効化する with Perforce Helix Core

2023/03/06に公開

前置き

  • 以下の記事で構築・セットアップしていたPerforce環境を前提として進めていきます

Perforce Helix Core 構築編 (個人環境向け)

https://zenn.dev/174/articles/189c2e49185d08

UE5とのセットアップ編

https://zenn.dev/174/articles/02a05251c1cce8

参考情報

紹介記事、レポなど

https://www.unrealengine.com/ja/tech-blog/virtual-assets-in-unreal-engine-5-1-smaller-faster-data-syncs

https://shuntaendo.hatenablog.com/entry/uefest2022_2#Virtual-Asset

公式ドキュメント(日本語準備中)

https://docs.unrealengine.com/5.1/ja/virtual-assets-in-unreal-engine/

  • クイックスタートガイドに "DDCCache=(Type=DDCBackend)"の設定項目が確認できる
    • 「共有 DCC を指しており」[1]「UnrealCloudDDC(HordeStorage)が前提」[2]とあるので"Type=DDCBackend"ではなく、"Type=FileSystem"を使う
DDC(Derived Data Cache)について
  • 公式ドキュメント

https://docs.unrealengine.com/5.1/ja/derived-data-cache/

  • Perforce利用時の参考イメージ (+パブリッククラウドでの利用ケース)

https://shuntaendo.hatenablog.com/entry/uefest2022_2#Unreal-Cloud-DDC

  • ヒストリアさん記事

https://historia.co.jp/archives/9294/

  • メモ
    • DDCを共有する、共有DDCというソリューションがあり、キャッシュデータを複数ユーザ・複数クライアント間で共有することで無駄なビルドをなくせる
    • "Unreal Cloud DDC"は、これのマネージドサービス版(AWS・Azureの選択肢あり)
    • 個人で使う分には考えなくてよさそう(あんまりよくわかってない...)

Epicのライセンシー向け勉強会の公開(?)資料

https://www.docswell.com/s/EpicGamesJapan/53P8EK-UE5_1_World Buliding_Core#p44

  • "Type=DDCBackend"ではなく、"Type=FileSystem"の設定項目が確認できる
  • ちなみにUE5.1現時点では、テクスチャのみの利用が推奨とのこと
  • 基本的にはこちらのスライドの内容をもとに進めていきます

やりたいこと

  • 仮想アセットを有効化する
    • 仮想アセットペイロード用の Perforce Depot(Localタイプ)作成
    • 作成したDepotに"payload_metainfo.txt"を格納
    • Perforce Helix Core Serverで Pertitionedタイプのクライアント許可
    • "DefaultEngine.ini"を編集
  • 仮想アセットが有効化されていることを確認

手順

環境

  • UE5 5.1.1
  • P4D 2022.2/2369846
  • P4V 2022.3/2370885

Perforce側作業

  • 以下のスライドの作業です

https://www.docswell.com/s/EpicGamesJapan/53P8EK-UE5_1_World Buliding_Core#p49

仮想アセット用にLocalタイプのDepot作成

  1. P4Adminを起動

  2. "File > New... > Depot..."をクリックし、作成したいDepot名を入力して"OK"をクリック

  1. "Depot type"で"local"を選択して"OK"をクリック

Workspaceの作成

  1. P4Vを起動

  2. 画面左の "Depot"をクリックして "Depot Tree"タブを表示し、"(no workspace selected)" をクリックして表示されるプルダウンメニューから "New Workspace..." をクリック

"Depot Tree"タブがどこにあるかわからない場合
  • "View > Depot Tree"をクリック

"Workspaces"タブから行う場合
  • "View > Workspaces" で "Workspaces"タブを表示

  • "Workspaces"タブの中で右クリックし、"New Workspace..."をクリック

  1. ポップアップウィンドウが開くので、以下の通り設定
    • Workspace name:
      • 任意のWorkspace名を入力
    • Workspace root:
      • ローカルのディレクトリを選択[3]
    • Workspace Mappings:(任意)
      • 一番右のハンバーガーメニューみたいなアイコンをクリックしてマニュアル入力に切り替え
      • 以下の内容で上書き
Workspace Mappings
//<今回作成したDepot名>/... //<今回作成したWorkspace名>/...

  1. "OK"をクリック

payload_metainfo.txtを Depotに追加

  1. "payload_metainfo.txt"の名前で空のテキストドキュメントを作成し、Workspaceで指定したローカルディレクトリに配置

  1. P4Vを起動

  2. 画面左の "Workspace"をクリックして "Workspace Tree"タブを表示

"Workspace Tree"タブがどこにあるかわからない場合
  • "View > Workspace Tree"をクリック

  1. "payload_metainfo.txt"を右クリックし、"Mark for Add.."をクリック

  1. Changelistを選択するよういわれるが、特に運用で決まってなければ"default"のまま"OK"をクリック

  1. "payload_metainfo.txt"を右クリックし、今度は"Submit..."をクリック

  1. コメントを入力し、"Submit"をクリック

  • Submit後のDepot Treeはこんな感じになります

Workspaceの削除

  1. "View > Workspaces" で "Workspaces"タブを表示

  1. 今回作成したWorkspacesを右クリックし、"Delete Workspace '<Workspace名>'"をクリック

  1. 確認されるので"OK"をクリック

  1. Workspaceに設定していたローカルフォルダと "payload_metainfo.txt"は不要なので削除してOKです

Perforce Helix Core Serverで Pertitionedタイプのクライアント許可

  1. コマンドプロンプトを管理者として実行[4]

  2. 以下のコマンドで"client.readonly.dir"を有効化

C:\WINDOWS\system32>p4 configure set client.readonly.dir=part-db-have
For server 'any', configuration variable 'client.readonly.dir' set to 'part-db-have'

C:\WINDOWS\system32>

UE5側作業

DefaultEngine.iniを編集

  • 以下のスライドの作業です

https://www.docswell.com/s/EpicGamesJapan/53P8EK-UE5_1_World Buliding_Core#p51

  1. P4Vで"DefaultEngine.ini"をCheck Out
Workspaceの切り替え方
  • 画面左の "Depot"もしくは"Workspace"をクリックしてタブを表示し、"(no workspace selected)" をクリックして表示されるプルダウンメニューからWorkspaceを切り替えられます

  1. "DefaultEngine.ini"の末尾に以下を追加して保存
[Core.ContentVirtualization]
;仮想化システム名
;None=使わない / Default=EPIC製デフォルトシステム
SystemName=Default

[Core.VirtualizationModule]
;この値以下のペイロードを仮想化しない
MinPayloadLength=0
;バックエンドブラフのセクション名
BackendGraph=VABackendGraph_UsingSourceControl
;特定のアセットタイプの無効化
;UE5.1時点ではペイロードを取得できなかった場合にクラッシュする可能性があるため
+DisabledAsset=StaticMesh
+DisabledAsset=SoundWave

[VABackendGraph_UsingSourceControl]
;キャッシュ用途のストレージクラス
CacheStorageHierarchy=(Entry=FileSystemCache)
;永続データ用のストレージクラス
PersistentStorageHierarchy=(Entry=PerforceStorage)

FileSystemCache=(Type=FileSystem, Path="%GAMESAVEDDIR%VirtualizedPayloads/")
PerforceStorage=(Type=P4SourceControl, DepotRoot="//DarkBallade_VirtualAssets") 


  1. P4Vで"DefaultEngine.ini"をSubmit

UE5エディタで確認

  1. アセットを右クリックして"Asset Actions > Export"でエクスポート

  2. エクスポートしたファイルをコンテンツブラウザにドラッグアンドドロップして別ファイルとしてインポート

  3. インポートしたアセットを右クリックして"Source Control > Mark for Add"でChangelistに追加

  4. "Tools > View Changelists"を開き、Changelists内のリストを右クリックして、"Submit Changelists..."をクリック

  5. コメントを入力し、"Submit"をクリック

  6. アセットにマウスオーバーして"Disk Size"が小さくなっていること、"Has Virtualized Data"がTrueとなっていることを確認

既存で追加済みのアセット(仮想アセット無効)

再インポートし、Submitしたアセット(仮想アセット有効)

そのほか、UE5エディタの "Tools > Audit > Virtual Assets"から表示できる統計パネルやコマンドラインでも確認できるようです

https://docs.unrealengine.com/5.1/ja/debugging-virtual-assets-in-unreal-engine/

その他補足情報

仮想アセットの利用をやめたいとき

  • UE5.1 アップデート ~ World Buliding/ Core ~
    • 53頁「Virtual Assetの解除」に記載があります

https://www.docswell.com/s/EpicGamesJapan/53P8EK-UE5_1_World Buliding_Core#p53

Unreal Virtualization Toolについて

Engine\Source\Programs\UnrealVirtualizationTool\にあるソースコードからコンパイルすることで、コマンドラインでの柔軟な操作が可能になるようです

  • 仮想化アセット クイックスタート ガイド
    • 「3. パッケージを仮想化する」に若干記載があります

https://docs.unrealengine.com/5.1/ja/virtual-assets-quickstart-in-unreal-engine/

  • UE5.1 アップデート ~ World Buliding/ Core ~
    • 53頁「Virtual Assetの解除」に記載があります

https://www.docswell.com/s/EpicGamesJapan/53P8EK-UE5_1_World Buliding_Core#p53

  • 書式 ※上記を勘案してのエアプ想定
UnrealVirtualizationTool.exe -ClientSpecName=<name> [optional] -Mode=<mode> -Package=<string>
UnrealVirtualizationTool.exe -ClientSpecName=<name> [optional] -Mode=<mode> -PackageDir=<string>
UnrealVirtualizationTool.exe -ClientSpecName=<name> [optional] -Mode=<mode> -Changelist=<number> 

以上

脚注
  1. 引用元 https://docs.unrealengine.com/5.1/ja/backend-graphs-for-virtual-assets-in-unreal-engine/ ※"共有 DCC"は恐らく翻訳による誤植(日本語版のみ) ↩︎

  2. 引用元 https://www.docswell.com/s/EpicGamesJapan/53P8EK-UE5_1_World Buliding_Core#p48 ↩︎

  3. 場所はどこでもよいので空のフォルダを作成し、指定するとよいです ↩︎

  4. サーバーを別にデプロイしてる場合はそちらでコマンドを実行してください ↩︎

Discussion