大きなマップを構築するために、これまでデベロッパーは手作業でマップをサブレベルに分割し、プレイヤーがランドスケープを横断するときにレベル ストリーミング システムを使用して、マップをロードおよびアンロードする必要がありました。この方法では、複数のユーザー間でファイルを共有する際に問題が発生することが多く、状況に応じてワールド全体を表示することは困難になります。
World Partition は、自動データ管理および距離ベースのためのレベル ストリーミング システムであり、大規模なワールドの管理のための完全なソリューションを提供します。World Partition では、グリッド セルに分割された単一のパーシスタント レベルにワールドを保存することで、大きなレベルをサブレベルに分割する必要がなくなり、ストリーミング ソースからの距離に応じてそれらのセルをロードおよびアンロードする自動ストリーミング システムを提供します。
World Partition は次の機能と緊密に連動します。
World Partition を有効にする
Unreal Engine で World Partition を有効にするには、次の 3 つの方法があります。
- [Games (ゲーム)] カテゴリのテンプレートから新規プロジェクトを作成する。
- 「Open World」テンプレートを使用して新規レベルを作成する。
- 既存のレベルを変換して World Partition を使用する。
「Games」テンプレートを使用してプロジェクトを作成する
World Partition は、[Games] カテゴリにあるプロジェクト テンプレートの多くで、デフォルトで有効になっています。
新しいプロジェクトを作成する際に複雑さを軽減し、スケーラブルなソリューションを提供するために、グリッド セル ストリーミングは、[World Settings (ワールドセッティング)] の [Enable Streaming (ストリーミングを有効化)] オプションを使用して有効または無効にすることができます。
以下のテンプレートは、World Partition を使用しているものの、デフォルトでは [Enable Streaming] が無効になっています。
- Blank
- First Person (ファースト パーソン)
- Third Person (サードパーソン)
- Top Down (トップダウン)
- Vehicle Advanced (ビークル応用)
オープン ワールド デフォルト マップを使用する
Open World デフォルト マップ タイプは、大規模なオープン ワールド マップを作成するための開始点として設計されており、デフォルトで次の機能が有効になっています。
- World Partition
- One File Per Actor
- データ レイヤー
- 階層詳細度
このマップには、屋外環境用のランドスケープ マテリアルとライティング セットアップを備える 2 km x 2 km のサンプルのランドスケープが含まれています。ライティング セットアップには、スカイ環境、スカイ ライト、ディレクショナル ライト、指数関数的高さフォグ、およびボリュメトリック クラウドが含まれています。
プロジェクト内でデフォルトの [Open World (オープン ワールド)] マップ タイプを使用するには、次の手順を実行します。
- [File (ファイル)] メニューを開き、[New Level (新規レベル)] を選択します。
- [Open World] マップ タイプを選択します。
- [Create (作成)] ボタンをクリックして、新しいマップを作成します。
既存のレベルを変換して World Partition を使用する
[Tools (ツール)] > [Convert Level (レベルを変換)] メニュー オプションを使用して変換するか、World Partition Convert コマンドレットを使用すると、任意のレベルに World Partition を追加できます。
World Partition Convert コマンドレットを使用するには、次の手順を実行します。
コマンド:UnrealEditor.exe QAGame -run=WorldPartitionConvertCommandlet Playground.umap -AllowCommandletRendering
次の手順で、既存のレベルを World Partition に変換します。
- Windows で、コマンド プロンプト ウィンドウを開きます。
- まず、プロンプトで「
UnrealEditor.exe
」実行可能ファイルが格納されているディレクトリに移動します。この例では、c:\Builds\Home_UE5_Engine\Engine\Binaries\Win64
です。
- 次に、コマンドの先頭にコマンドレットを実行する .exe ファイルの名前
UnrealEditor.exe
を指定します。 - プロジェクト名を追加します。ここでは、
QAGame
です。
- 続けて実行するコマンドレット名
-run=WorldPartitionConversionCommandlet
を指定します。 - 変換されるマップ ファイル名を追加します。この例では、
Playground.umap
です。 - コマンドの末尾に追加の引数
-AllowCommandletRendering
を指定します。
- Enter キーを押すと、コマンドレットによって、マップが World Partition を使用するように変換されます。
このコマンドレットでは、以下のオプションの引数を使用することができます。
オプションの引数 | 説明 |
---|---|
-SCCProvider=(None,Perforce...) | 使用するソース コントロール プロバイダを指定します。ソース コントロールなしで実行するには、-SCCProvider=None を指定します。 |
-Verbose | 詳細なログを表示します。 |
-ConversionSuffix | 変換されたマップに _WP サフィックスを追加します。これは、ソース レベルをそのまま保ちながら、テスト目的でレベルを変換するときに役立ちます。 |
-DeleteSourceLevels | 変換後にソース レベルを削除します。 |
-ReportOnly | 変換中に実行される内容を報告します。変換は行いません。 |
-GenerateIni | マップのデフォルトの .ini 変換ファイルを生成します。変換は行いません。 |
-SkipStableGUIDValidation | 不安定なアクタ GUID の検証をスキップします。アクタ GUID が不安定なレベルでは、数回変換すると異なる変換出力が生成されます。レベルを再保存すると、これが修正されます。 |
-OnlyMergeSubLevels | 複数のレベルおよびサブレベルを World Partition を使用することなく、One File Per Actor (1 アクタあたり 1 ファイル) に変換してマージします。変換されたレベルは、World Partition レベルのレベル インスタンスとして使用できます。 |
-FoliageTypePath=[Path] | 指定されたパスにフォリッジ タイプをアセットとして抽出します。レベルに埋め込まれているフォリッジ タイプが含まれている場合に使用します。 |
変換設定を変更する場合は、コマンドレットでデフォルトの変換 .ini
ファイルを使用します。.ini
ファイルは、マップ ファイルと同じフォルダにあり、マップと同じファイル名である必要がありますが、拡張子は .ini
です。たとえば、FirstPersonExampleMap.umap
用に記述された .ini
ファイルは、FirstPersonExampleMap.ini
という名前になります。
以下は、デフォルトの変換 .ini
ファイルの例です。
[/Script/UnrealEd.WorldPartitionConvertCommandlet]
EditorHashClass=Class'/Script/Engine.WorldPartitionEditorSpatialHash
RuntimeHashClass=Class'/Script/Engine.WorldPartitionRuntimeSpatialHash
LevelsGridPlacement=(("/Game/Maps/Highrise_Audio", Bounds),("/Game/Maps/Highrise_Collisions_Temp", Bounds),("/Game/Maps/Highrise_Gameplay", Bounds),("/Game/Maps/Highrise_Lights", Bounds),("/Game/Maps/Highrise_Vista", AlwaysLoaded))
HLODLayerAssetsPath=
DefaultHLODLayerName=
[/Script/Engine.WorldPartitionEditorSpatialHash]
CellSize=51200
WorldImage=None
WorldImageTopLeftW=(X=0.000000,Y=0.000000)
WorldImageBottomRightW=(X=0.000000,Y=0.000000)
[/Script/Engine.WorldPartitionRuntimeSpatialHash]
Grids=(GridName="MainGrid",CellSize=3200,LoadingRange=25600.000000,DebugColor=(R=0.500000,G=0.500000,B=0.500000,A=1.000000))
World Partition を使用する
World Partition システムは、ワールドを単一のパーシスタント レベル ファイルに保存し、構成可能なランタイム グリッドを使用してスペースをストリーミング可能なグリッドセルに分割することで機能します。 これらのセルは、プレイヤーなどのストリーミング ソースの存在によって、実行時にロードおよびアンロードされます。このように、Unreal Engine は、プレイヤーが特定の時間に表示および操作するレベルの部分のみをロードします。
World Partition のアクタ
ワールドを編集するときに、アクタを好きな場所に配置して、[Details] パネルの [World Partition] セクションにある Is Spatially Loaded 設定に基づいてグリッド セルを割り当てることができます。
オプション | 説明 |
---|---|
Runtime Grid | アクタがどのパーティション グリッドに配置されるかを決定します。None の場合、グリッドはパーティション システムで選択されます。 |
Is Spatially Loaded | アクタが空間的にロードされるかどうかを決定します。
|
アクタは、One File Per Actor 機能を使用して独自の個別ファイルに保存されるため、ワールドのアクタに変更を加えるために、ソース管理からレベル ファイルをチェックアウトする必要はありません。これにより、チームの他のメンバーのためにレベル ファイルが解放されます。
One File Per Actor システムと Unreal Engine に統合されたソース制御の詳細については、 One File Per Actor のドキュメントを参照してください。
レベル内の他のアクタを参照するアクタは、まとめてバンドルされ、同時にロードされます。
ストリーミング ソース
実行時のグリッド内のグリッド セルのストリーミングは、2 つの要因で決まります。
- ストリーミング ソース
- ランタイム グリッド設定
1 つはレベル内のストリーミング ソースの位置です。
ストリーミング ソースは、ワールドの位置を定義し、その周囲のセルの読み込みをトリガーするコンポーネントです。プレイヤー コントローラーは、ストリーミング ソースです。その他のストリーミング ソースは、World Partition ストリーミング ソース コンポーネントを使用してワールドに追加することができます。たとえば、ストリーミング ソース コンポーネントは、プレイヤーがテレポートする場所でアクティブ化できるため、そこにセルをロードできます。グリッド セルがロードされると、プレイヤーはその場所にテレポートし、ストリーミング ソース コンポーネントが非アクティブ化されます。プレイヤーがその前にいた場所にストリーミング ソースがなくなったため、これらのグリッド セルはアンロードされます。
プレイヤーをストリーミング ソースとして使用する
[Enable Streaming Source] オプションを使用すると、各プレイヤー コントローラーが World Partition ストリーミング ソースとして使用されます。このオプションは、次のようにデフォルトでオンになっています。
World Partition ストリーミング ソース コンポーネントを使用する
また、World Partition ストリーミングは、World Partition ストリーミング ソース コンポーネントを使用しても実行できます。
このコンポーネントには、次のオプションがあります。
オプション | 説明 |
---|---|
Default Visualizer Loading Range | ビジュアライザーが有効な場合のデバッグ ビジュアライザー グリッドのサイズを決定します。 |
Target Grid | このソースの影響を受けるストリーミング グリッドを決定します。 |
Debug Color | デバッグに使用する色を決定します。 |
Target HLOD Layer | ストリーミング ソースに影響される HLOD レイヤーを決定します。 |
Shapes | ストリーミング ソース用のカスタム形状をビルドするために使用する形状のリストを決定します。空の場合、グリッドのロード範囲と同じ半径を持つ球体を使用します。 |
Priority | ストリーミング ソースの優先度を決定します。グリッド セルが複数のストリーミング ソースと交差する場合、その優先度がすべてのストリーミング ソースの中で最も高い優先度になります。 |
Streaming Source Enabled | このコンポーネントが有効かどうかを決定します。 |
Target State | 交差するグリッド セルがどの状態 (Loaded か Activated のどちらか) である必要があるかを決定します。グリッド セルが複数のストリーミング ソースと交差する場合、ターゲットの状態は最も高いターゲット値になります (Activated は Loaded より大きい)。 |
ブループリント関数 Enable Streaming Source および Disable Streaming Source は、このコンポーネントでストリーミングを有効化および無効化します。
ブループリント関数 Is Streaming Completed は、コンポーネントが交差するグリッド セルのストリーミングが終了したときに true を返します。
ランタイム グリッド設定
グリッド セルが実行時にロードされるかアンロードされるかを決定する 2 つめの要素は、ランタイ ムグリッド自体の設定です。ランタイム グリッド設定は、[World Settings (ワールドセッティング)] パネルの [World Partition Setup (World Partition セットアップ)] セクションにあります。
デフォルトでは、2D Runtime Hash グリッドが提供されます。グリッドを 2 つ以上使用するとパフォーマンスに悪い影響を与える可能性があります。
2D Runtime Hash グリッドの推奨されるセットアップおよび設定については、City Sample プロジェクトの Big City マップを参照してください。
オプション | 説明 |
---|---|
Grid Name | ランタイム グリッド名を含みます。 |
Cell Size | ストリーミング レベルの生成に使用されるグリッド セルのサイズを決定します。この例では、Cell Size は 256 平方メートルです。 |
Loading Range | セルがロードされるストリーミング ソースからの範囲を決定します。上の画像では、ロード範囲 はストリーミング ソースの周囲 768 メートルの半径です。 |
Block on Slow Streaming | グリッド セルのロード速度が不十分な場合にロードをブロックします。 |
Priority | ストリーミング ソースの優先度を決定します。グリッド セルが複数のストリーミング ソースと交差する場合、その優先度がすべてのストリーミング ソースの中で最も高い優先度になります。 |
Debug Color | Preview Grids が有効になっているときに表示されるグリッド線の色を決定します。 |
Preview Grids | 有効にすると、ビューポートにグリッド線が表示されます。 |
Instanced Foliage Grid Size | インスタンス化されたフォリッジ アクタのグリッドのサイズを決定します。 |
Default World Partition Settings | 現在のグリッド設定をデフォルトに戻すか、現在の設定を新しいデフォルトとして保存します。 |
World Partition Editor Cell Size | World Partition エディタのセル サイズを決定します。新しいサイズは、ワールドを次にリロードするときに有効になります。 |
エディタにグリッド セルをロードまたはアンロードする
大規模なワールドの開発をサポートするために、すべてのグリッド セルは最初にアンロードされます。レベルが開くと、エディタは環境の背景やマネージャなど、[Is Spatially Loaded] 設定が [False] としてマークされているアクタのみをロードします。これは、エディタでマップ全体をロードすることが不可能な大規模なワールドの開発をサポートするためです。
[World Partition] ウィンドウで、作業する範囲を手動で選択できます。メインメニューで [Window] > [World Partition] > [World Partition Editor] を選択してウィンドウを開きます。
ウィンドウで、範囲をクリックしてドラッグし、それらを選択します。次に、右クリックで選択して、コンテキスト メニューを開き、[Load Region from Selection] を選択します。
[World Partition] ウィンドウのミニマップを生成する
[Build (ビルド)] メニューの [World Partition] セクションにある [Build Minimap (ミニマップをビルド)] オプション、または World Partition Minimap Builder コマンドレットを使用してミニマップを生成することで、[World Partition] ウィンドウを容易に操作できます。
このコマンドレットを実行すると、World Partition ワールドのミニマップの画像が作成され、[World Partition] ウィンドウに表示されます。
ミニマップをビルドしても [World Partition] ウィンドウに表示されない場合は、プロジェクトで仮想テクスチャのサポートを有効にする必要があります。仮想テクスチャを有効にするには、メインメニューで [Edit (編集)] > [Project Settings (プロジェクト設定)] を選択します。次に、[Enable Virtual Texture Support (仮想テクスチャのサポートを有効化)] チェックボックスをオンにします。
Hierarchical Levels of Detail (HLOD) を生成する
HLOD は、[Build] メニューの [World Partition] セクションにある [Build HLODs (HLOD をビルド)] オプション、または World Partition HLODs Builder コマンドレットを使用して生成されます。
このコマンドレットを実行すると、HLOD レイヤーで指定した生成設定に従って、World Partition セルの HLOD アクタが作成されます。 World Partition で Hierarchical Levels of Detail (HLOD) および World Partition HLODs Builder コマンドレットの使用方法の詳細については、「World Partition - 階層的 LOD (HLOD)」のドキュメントを参照してください。
World Partition のワールドをクックする
World Partition マップをクックするには、Cook コマンドレットを使用する必要があります。
コマンド:UnrealEditor.exe QAGame -run=cook -targetplatform=WindowsNoEditor -Unversioned -map=Playground
World Partition マップをクックするには、次の手順を実行します。
- Windows で、コマンド プロンプト ウィンドウを開きます。
- まず、プロンプトで「
UnrealEditor.exe
」実行可能ファイルが格納されているディレクトリに移動します。 - 次に、コマンドの先頭にコマンドレットを実行する .exe ファイルの名前
UnrealEditor.exe
を指定します。 - プロジェクト名を追加します。ここでは、
QAGame
です。 - 続けて実行するコマンドレット名
-run=cook
を指定します。 - 最後に次の引数をコマンドに追加します。
-targetplatform=WindowsNoEditor
は、Windows プラットフォーム用にプロジェクトをクックします。-UnVersioned
は、クックされたパッケージはバージョンなしで保存されます。これらはロード時に現在のバージョンとみなされます。-map=Playground
は、マップの名前を指定します (この場合は、Playground.umap
)。
Cook コマンドレットを使用する詳細については、「コンテンツのクック処理」を参照してください。
ブループリントで World Partition を使用する
ブループリント クラスとレベル ブループリントの両方が、World Partition のワールドでサポートされています。ただし、レベル ブループリントで参照されているアクタは常にロード済みとしてマークされるため、ブループリント クラスが推奨されます。
分割されたワールドをテストする
デバッグとランタイム オーバーライド
ランタイム時に World Partition ワールドをデバッグするために役立つコンソール コマンドがいくつかあります。
コンソール コマンド | 説明 |
---|---|
wp.Runtime.ToggleDrawRuntimeHash2D | World Partition ランタイム ハッシュの 2D デバッグ表示を切り替えます。 |
wp.Runtime.ToggleDrawRuntimeHash3D | World Partition ランタイム ハッシュの 3D デバッグ表示を切り替えます。 |
wp.Runtime.ShowRuntimeSpatialHashGridLevel | World Partition ランタイム ハッシュを表示するときに表示するグリッド レベルを選択します。 |
wp.Runtime.ShowRuntimeSpatialHashGridLevelCount | World Partition ランタイム ハッシュを表示するときに表示するグリッド レベルの数を選択します。 |
wp.Runtime.ShowRuntimeSpatialHashGridIndex | World Partition ランタイム ハッシュを表示するときに、特定のグリッドを表示します。無効なインデックスはすべてを表示します。 |
wp.Runtime.RuntimeSpatialHashCellToSourceAngleContributionToCellImportance | セルの重要度に対するストリーミング ソースからセルへのベクターとソース フォワード ベクトルの間の角度の影響を調整する 0 から 1 の間の値を取ります。0 に近くなるほど、角度がセルの重要性に影響することは少なくなります。 |
wp.Runtime.OverrideRuntimeSpatialHashLoadingRange | 実行時のロード範囲を設定します。以下の引数を指定します。
|
wp.Runtime.MaxLoadingLevelStreamingCells | 同時ロード World Partition ストリーミング セルの数を制限します。 |
wp.Runtime.HLOD 0 | wp.Runtime.HLOD を使用して、HLOD のないワールドを表示します。 |
World Partition Builder コマンドレット
World Partitionは、UWorldPartitionBuilderCommandlet と UWorldPartitionBuilder 基本クラスを使用してビルダー コマンドレット フレームワークを導入しています。
これらのコマンドレットを使用して、バッチ プロセスを自動化したり、World Partition レベルでデータを生成または変更したりできます。HLOD、AI Nav Data の生成、多数のアクタの再保存などを実行するため、大規模なワールドは一度にすべてをロードする必要はありません。
World Partition HLODs Builder
HLOD は World Partition HLODs Builder コマンドレットを使用して生成されます。このコマンドレットを実行すると、HLOD レイヤーで指定した生成設定に従って、World Partition セルの HLOD アクタが作成されます。
コマンド:UnrealEditor.exe "C:\Users\user.name\Documents\Unreal Projects\MyProject\MyProject.uproject" "/Game/ThirdPersonBP/Maps/OpenWorldTest" -run=WorldPartitionBuilderCommandlet -AllowCommandletRendering -builder=WorldPartitionHLODsBuilder
World Partitionでの Hierarchical Levels of Detail (HLOD) の使用方法および World Partition HLODs Builder コマンドレットの使用方法の詳細については、「World Partition - 階層的 LOD」のドキュメントを参照してください。
World Partition MiniMap Builder
World Partition MiniMap Builder コマンドレットは、WorldPartition エディタ ウィンドウに表示されるミニマップを生成または更新します。
コマンド:UnrealEditor.exe "C:\Users\user.name\Documents\Unreal Projects\MyProject\MyProject.uproject" "/Game/ThirdPersonBP/Maps/OpenWorldTest" -run=WorldPartitionBuilderCommandlet -AllowCommandletRendering -builder=WorldPartitionMiniMapBuilder
World Partition Rename Duplicate Builder
World Partition Rename Duplicate Builder コマンドレットは、既存の World Partition レベルとそのすべてのアクタの名前を変更または複製するプロセスを自動化します。
コマンド:UnrealEditor.exe "C:\Users\user.name\Documents\Unreal Projects\MyProject\MyProject.uproject" "/Game/ThirdPersonBP/Maps/OpenWorldTest" -run=WorldPartitionBuilderCommandlet -SCCProvider=None -builder=WorldPartitionRenameDuplicateBuilder -NewPackage=/Game/ThirdPersonBP/Maps/NewPackage
OpenWorldTest マップの World Partition レベルを NewPackage という名前で複製し、元のマップはそのまま残します。
コピーを作成するのではなく、World Partition マップの名前を変更するには、-Rename
引数を追加します。
World Partition Resave Actors Builder
World Partition Resave Actors Builder コマンドレットは、World Partition レベルのすべてのアクタを再保存し、アクタのサブセットのみを再保存するクラス フィルタをサポートします。
コマンド:UnrealEditor.exe "C:\Users\user.name\Documents\Unreal Projects\MyProject\MyProject.uproject" "/Game/ThirdPersonBP/Maps/OpenWorldTest" -run=WorldPartitionBuilderCommandlet -SCCProvider=None -builder=WorldPartitionResaveActorsBuilder
この例を実行すると、OpenWorldTest レベルにあるすべてのアクタのパッケージが再保存されます。
-ActorClass
引数を使用すると、再保存するアクタのサブセットのみを指定できます。たとえば、-ActorClass=StaticMeshActor
を追加すると、指定したレベルのスタティック メッシュ アクタのみが再保存されます。
World Partition Foliage Builder
World Partition マップでは、フォリッジ インスタンスのデフォルトのインスタンス化されたフォリッジ グリッド サイズは 256 m です。World Partition Foliage Builder コマンドレットは、既存の World Partition レベルのインスタンス化フォリッジ グリッド サイズを変更するために使用されます。
コマンド:UnrealEditor.exe QAGame Playground.umap -run=WorldPartitionBuilderCommandlet -Builder=WorldPartitionFoliageBuilder -NewGridSize=Value
World Partitionでのフォリッジ モードの使用方法の詳細については、「フォリッジ モード」を参照してください。
World Partition Navigation Data Builder
World Partition Navigation Data Builder コマンドレットは、World Partition レベルのナビメッシュを再ビルドします。
コマンド:UnrealEditor.exe "C:\Users\user.name\Documents\Unreal Projects\MyProject\MyProject.uproject" "/Game/ThirdPersonBP/Maps/OpenWorldTest" -run=WorldPartitionBuilderCommandlet -AllowCommandletRendering -builder=WorldPartitionNavigationDataBuilder -SCCProvider=None
このコマンドレットでは、次の引数をとります。
オプションの引数 | 説明 |
---|---|
-SCCProvider | 使用するソース コントロール プロバイダを指定します。ソース コントロールなしで実行するには、-SCCProvider=None を指定します。 |
-Verbose | 詳細なログを表示します。 |
-Log | 特定のファイルにログを出力します。 |
-CleanPackages | ナビゲーション データ パッケージをビルドするのではなく、ワイプします。 |
World Partition Smart Object Collection Builder
World Partition Smart Object Collection Builder コマンドレットは、World Partition レベルのすべてのスマート オブジェクト コンポーネントからスマート オブジェクト コレクションを再ビルドします。
コマンド:UnrealEditor.exe "C:\Users\user.name\Documents\Unreal Projects\MyProject\MyProject.uproject" "/Game/ThirdPersonBP/Maps/OpenWorldTest" -run=WorldPartitionBuilderCommandlet -builder=WorldPartitionSmartObjectCollectionBuilder
この例を実行すると、OpenWorldTest レベルのすべてのスマート オブジェクト コレクションが再ビルドされます。このコマンドレットで -SCCProvider
引数を指定すると、使用するソース管理プロバイダを指定することができます。