【UE5】既存レベルを World Partition 化する手順やトラブルシューティング

UE5 からオープンワールドプロジェクト向けのレベルストリーミング機能として World Partition という仕組みが追加されました。

docs.unrealengine.com


レベル作成時のテンプレートでも OpenWorld が追加されており、World Partition 有効のレベルを作成できます。

ただ、まだ UE5 はリリースしたばかりで UE4 プロジェクトから移行して既存のレベルを World Partition 化するケースも少なくないはずです。
今回はその手順や実際に躓いたポイントなどを書いていきます。

※ 変換後の World Partition の運用方法(Data Layer や Level Instanceなど)については今回は書きません。


・World Partition 有効化方法

既存レベルを World Partition 化するには主に「エディター」か「コマンドプロンプト」から変換する方法があります。

どちらの方法でも同じようなオプションが使え、エディターからの変換がお手軽ですが変換に失敗する場合は詳細なログを取れるコマンドプロンプトからの変換をおすすめします。

エディターからの変換

Tools > Convert Level... から変換を実行できます。

レベルを選択後、下のようなウィンドウが出るのでオプションを設定して、[OK] で変換が始まります。

コマンドプロンプトからの変換

こちらは手順がドキュメントにまとまっているので詳細は省きますが、最終的に下記のようなコマンドで変換ができます。

cd [Engine Dir]\Engine\Binaries\Win64

UnrealEditor.exe [Project Dir]\Robot.uproject -run=WorldPartitionConvertCommandlet [Project Dir]\Content\[Level Dir]\[Level Name].umap -AllowCommandletRendering -Verbose


どちらの方法でもコマンドレット(WorldPartitionConvertCommandlet)を叩くことは同じです。


・変換時のトラブルシューティング

チェックアウトによるエラー

World Partition 変換時には初めに以前変換時に生成したアセット郡を削除する処理が走ります。
主に以下のアセットをチェックし、存在する場合は削除されます。

・"__ExternalActors__" フォルダ以下のアセット
・"__ExternalObjects__" フォルダ以下のアセット
・以前変換したレベル(.umap)

これらのアセットが他者にチェックアウトされている場合、削除できずにエラーが出ます。

○ 対策
対策としてはチェックアウトを外してもらうのが一番良いですが、ローカル上でのみ World Partition 変換のテストをしたい場合などは "-SCCProvider=None" というオプションを付けることでソースコントロール無しで実行できます。


変換したいレベルが World Partition 済み判定される

World Partition 変換していないレベルが World Partition 済みという判定で変換ができない場合があります。

このケースのエラーが出た場合は、以前変換時に生成したアセットが残っている可能性が高いです。
上記のように変換時にアセット郡は削除されますが、「[LevelName]_HLODLayer_Instanced」「[LevelName]_HLODLayer_Merged」に関しては、変換時に生成はされるものの削除はされません。

これらのアセットが残っていると World Partition 済み判定になるようです。

○ 対策
面倒ですがこのようなケースの場合は、手動でアセットを削除する必要があります。


外部プラグインが対応していない

こちらはあまりないかもですが、プロジェクトで有効にしている外部プラグインが World Partition 変換に対応しておらず、変換が失敗するケースがあります。
特にエディター標準の BP や Material ではなく プラグイン固有のアセットがある場合は引っかかる可能性が高いです。

変換時には RequestLevel 関数を通り、レベルから紐づいている各オブジェクトが非同期ロードされます。その際に未対応のアセットのロード結果が false を返し続けるなどで変換が終わらないといった現象が発生する可能性があります。

○ 対策
こちらはケースバイケースなので一概に対策は書けないですが、コマンドプロンプトからではなく、Visual Studio から直接 Unreal Editor.exe を WorldPartitionConvertCommandlet の引数付きで実行するとデバッグがしやすく原因を突き止めやすいかと思われます。


Foliage を使用してる場合のエラー

Error: Level contains embedded FoliageType settings: please save the FoliageType setting assets, use the SaveFoliageTypeToContentFolder switch, specify FoliageTypePath in configuration file or the commandline.

変換元のレベルで Foliage を使用している場合は、"-FoliageTypePath=[Path]" 引数で Foliage Type アセットのパスを指定する必要があります。
指定していない場合、上記のエラーで World Partition 化できません。




UE Version : 5.0.2-20280985