大きなマップを構築するために、これまでデベロッパーは手作業でマップをサブレベルに分割し、プレイヤーがランドスケープを横断するときにレベル ストリーミング システムを使用して、マップをロードおよびアンロードする必要がありました。 この方法では、複数のユーザー間でファイルを共有する際に問題が発生することが多く、状況に応じてワールド全体を表示することは困難になります。
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] が無効になっています。
空白
First Person (ファースト パーソン)
Third Person (サードパーソン)
Top Down (トップダウン)
Vehicle Advanced (ビークル応用)
オープン ワールド デフォルト マップを使用する
Open World デフォルト マップ タイプは、大規模なオープン ワールド マップを作成するための開始点として設計されており、デフォルトで次の機能が有効になっています。
World Partition
One File Per Actor
データレイヤー
Hierarchical Levels of Detail
このマップには、屋外環境用のランドスケープ マテリアルとライティング セットアップを備える 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=WorldPartitionConvertCommandlet
」を指定します。変換されるマップ ファイル名を追加します。 上記の例では、「
Playground.umap
」です。コマンドの末尾に、追加の引数「
-AllowCommandletRendering
」を指定します。Enter キーを押すと、コマンドレットによって、World Partition を使用するようにマップが変換されます。
このコマンドレットでは、以下のオプションの引数を使用することができます。
任意指定の引数 | 説明 |
---|---|
-SCCProvider=(None,Perforce...) | 使用するソース コントロール プロバイダを指定します。 ソース コントロールを使用せずに実行するには、「 |
-Verbose | 詳細なログを表示します。 |
-ConversionSuffix | 変換されたマップに _WP サフィックスを追加します。 これは、ソース レベルをそのまま保ちながら、テスト目的でレベルを変換するときに役立ちます。 |
-DeleteSourceLevels | 変換後にソース レベルを削除します。 |
-ReportOnly | 変換中に実行される内容を報告します。 変換は行いません。 |
-GenerateIni | このマップ用のデフォルトの変換 |
-SkipStableGUIDValidation | 不安定なアクタ GUID の検証をスキップします。 アクタ GUID が不安定なレベルでは、数回変換すると異なる変換出力が生成されます。 レベルを再保存すると、これが修正されます。 |
-OnlyMergeSubLevels | 複数のレベルおよびサブレベルを World Partition を使用することなく、One File Per Actor (1 アクタあたり 1 ファイル) に変換してマージします。 変換されたレベルは、World Partition レベルのレベル インスタンスとして使用できます。 |
-FoliageTypePath=[Path] | 指定されたパスにフォリッジ タイプをアセットとして抽出します。 レベルに埋め込まれているフォリッジ タイプが含まれている場合に使用します。 |
変換の設定を変更する場合は、コマンドレットでデフォルトの変換 .ini
ファイルを使用します。 .ini
ファイルは、マップ ファイルと同じフォルダにあって、マップと同じファイル名であり、.ini
拡張子が付いている必要があります。 たとえば、.ini
ファイルがFirstPersonExampleMap.umap
用に記述されている場合は、「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
World Partition を使用する
World Partition システムは、ワールドを単一のパーシスタント レベル ファイルに保存し、構成可能なランタイム グリッドを使用してスペースをストリーミング可能なグリッドセルに分割することで機能します。 これらのセルは、プレイヤーなどのストリーミング ソースの存在によって、ランタイム時にロードおよびアンロードされます。 このように、Unreal Engine は、プレイヤーが特定の時間に表示および操作するレベルの部分のみをロードします。
World Partition のアクタ
ワールドを編集する際に、アクタを任意の場所に追加して、[Details (詳細)] パネルの [World Partition] セクションにある [Is Spatially Loaded (空間的にロードされている)] 設定に基づいてグリッド セルに自動的に割り当てることができます。
オプション | 説明 |
---|---|
ランタイムグリッド | アクタがどのパーティション グリッドに配置されるかを決定します。 None に設定されていれば、パーティション システムによってグリッドが選択されます。 |
空間的にロードされている | アクタが空間的にロードされるかどうかを決定します。
|
アクタは、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 レイヤー) | ストリーミング ソースに影響される 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 m x 256 m x 256 m です。 |
Loading Range (ロード範囲) | セルがロードされるストリーミング ソースからの範囲を決定します。 上の画像での [Loading Range] は、ストリーミング ソースの周りの半径 768 メートルです。 |
Block on Slow Streaming (低速ストリーミング時にブロック) | グリッド セルのロード速度が不十分な場合にロードをブロックします。 |
Priority (優先度) | ストリーミング ソースの優先度を決定します。 グリッド セルが複数のストリーミング ソースと交差する場合、その優先度がすべてのストリーミング ソースの中で最も高い優先度になります。 |
Debug Color (デバッグ カラー) | [Preview Grids (プレビューグリッド)] が有効になっている場合に表示されるグリッド線の色を決定します。 |
Preview Grids (プレビューグリッド) | 有効にすると、ビューポートにグリッド線が表示されます。 |
エディタに領域をロードまたはアンロードする
大規模なワールドの開発をサポートするために、ワールドは最初にアンロードされます。 レベルが開かれると、エディタは、[Is Spatially Loaded] 設定が [False] としてマークされているアクタ (環境の背景やマネージャーなど) のみをロードします。 これは、エディタでマップ全体をロードすることが不可能な大規模なワールドの開発をサポートするためです。
[World Partition] ウィンドウを使用して領域をロードおよびアンロードする
[World Partition] ウィンドウでは、作業する領域を手動で選択できます。 メインメニューで [Window] > [World Partition] を選択すると、ウィンドウが開きます。
ウィンドウで、範囲をクリックしてドラッグします。 次に、選択項目を右クリックして開いたコンテキスト メニューで、[Load Region from Selection (選択項目から領域をロード)] を選択します。
位置ボリュームを使用して範囲をロードおよびアンロードする
[Location Volumes (ロケーション ボリューム)] を使用して領域をロードおよびアンロードすることもできます。
位置ボリュームは、[World Partition] ウィンドウでマップの領域を表すレベルに配置されたエディタ専用のボリュームです。
レベルに位置ボリュームを追加するには、次の手順を実行します。
[Place Actors (アクタを配置)] ウィンドウを開きます (まだ開いていない場合)。
「Location Volume」を検索します。 クリックしてレベルにドラッグします。
レベルを保存します。
レベルが保存されると、[World Partition] ウィンドウに位置ボリュームと同じ名前の新しい領域が表示されます。
範囲を選択して、右クリックしてコンテキスト メニューを開きます。 [Load Selected Region (選択中の領域をロード)] をクリックすると、その領域がロードされます。 ドラッグで複数の領域を選択するか、Ctrl キーを押しながらクリックすることで、複数の領域を同時にロードまたはアンロードすることができます。
位置ボリュームには次のサポートされている設定があります。
Brush Settings (ブラシ設定)
設定 | 説明 |
---|---|
Display Shaded Volume (シェーディング ボリュームを表示) | シェーディング ボリュームとともにブラシを表示します。 |
Shaded Volume Opacity Value (シェーディング ボリュームのオパシティ値) | 共有ボリュームのオパシティを 0.0~1.0 の値を使用して設定します。 |
[Brush Settings] セクションにあるオプションの多くは、選択している [Brush Shape (ブラシ形状)] に応じて異なります。
World Partition
設定 | 説明 |
---|---|
Load and Unload (ロードおよびアンロード) | 選択したボリューム内の領域をロードまたはアンロードします。 |
[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 (バーチャル テクスチャのサポートを有効化)] チェックボックスをオンにします。
[World Partition] ウィンドウの便利なショートカットとオプション
ホットキー | 説明 |
---|---|
Shift キーを押したままでドラッグ | 現在のランタイム グリッド サイズに選択範囲をスナップします。 |
ダブルクリック | すべてのビューポートでその位置にカメラを移動します。 |
Shift キーを押したままでダブルクリック | クリックした位置で PIE セッションを開始します。 |
Ctrl キーを押したままでダブルクリック | クリックした位置の周りの領域をロードします。 |
マウスの中ボタンを押したままでドラッグ | クリックしたポイントから終了ポイントまでの距離を Unreal 単位で表示します。 |
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 - Hierarchical Level of Detail」を参照してください。
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 |
|
World Partition Builder コマンドレット
World Partition では、UWorldPartitionBuilderCommandlet と UWorldPartitionBuilder 基本クラスによるビルダー コマンドレット フレームワークを導入しています。
これらのコマンドレットを使用して、バッチ プロセスを自動化したり、World Partition レベルでデータを生成または変更したりできます。 HLOD、AI Nav Data の生成、多数のアクタの再保存などを実行するため、大規模なワールドは一度にすべてをロードする必要はありません。
World Partition ビルダー コマンドレットの使用方法の詳細については、「World Partition ビルダー コマンドレットのリファレンス」を参照してください。