World Partition

World Partition システムの概要と使用方法の説明です。

Windows
MacOS
Linux

大きなマップを構築するために、これまでデベロッパーは手作業でマップをサブレベルに分割し、プレイヤーがランドスケープを横断するときにレベル ストリーミング システムを使用して、マップをロードおよびアンロードする必要がありました。この方法では、複数のユーザー間でファイルを共有する際に問題が発生することが多く、コンテキストで全世界を表示することは困難な作業になります。

image alt text

World Partition は、データ管理および距離ベースのための新しいレベル ストリーミング システムであり、大規模な世界管理のための完全なソリューションを提供します。World Partition は、グリッド セルに分割された単一の永続レベルにワールドを保存することで、大きなレベルをサブレベルに分割するという必要性を排除し、ストリーミング ソースからの距離に応じてそれらのセルをロードおよびアンロードする自動ストリーミング システムを提供します。

World Partition は次の機能と連動します。

ワールドで World Partition を有効にする

World Partition を有効にする方法は 3 通りあります。

ワールド設定

単一レベルまたはワールドで World Partition を有効にするには、[World Settings] パネルを使用します。

単一レベルまたはワールドで World Partition を有効にするには、以下の手順に従います。

  1. [World Settings] パネルを開きます。[Window] > [World settings] を選択します。

  2. [World Settings] パネルの [World Partition Setup] セクションで [Enable World Partition] のチェックボックスをクリックします。

image alt text

プロジェクト設定

グローバルに World Partition を有効にするには、[Project Settings] を使用します。[Engine] > [World Partition] セクションの [Enable World Partition] チェックボックスをクリックします。

image alt text

World Partition 変換コマンドレット

既存のワールドを World Partition を使用するように変換するには、WorldPartitionConvert コマンドレットを使用します。

  1. Windows で、コマンド プロンプト ウィンドウを開きます。

    image alt text

  2. まず、プロンプトで、「UE4Editor.exe」ファイルが格納されているディレクトリに移動します。例:C:\Program Files\Epic Games\UE_4.26\Engine\Binaries\Win64

    image alt text

  3. 次に、コマンドの先頭にコマンドレットを実行する .exe ファイルの名前 UE4Editor.exe を指定します。

  4. コマンドレットの名前と次の引数を追加します。

    -run=WorldPartitionConvertCommandlet mapname options -AllowCommandletRendering

    mapname はマップの名前です。

    image alt text

  5. Enter キーを押すと、コマンドレットがプロジェクトを World Partition を使用するように変換します。

以下の任意の引数を使用することができます。

オプション

説明

-SCCProvider=[None|Perforce|...]

使用するソース コントロール プロバイダを指定します。

-Verbose

詳細なログを表示します。

-ConversionSuffix

変換されたマップに _WP サフィックスを追加します。これは、ソース レベルをそのまま保ちながら、テスト目的でレベルを変換するときに役立ちます。

-DeleteSourceLevels

変換後にソース レベルを削除します。

-ReportOnly

変換中に何が行われたかを報告します。変換は行いません。

-GenerateIni

このマップのデフォルトの .ini 変換ファイルを生成します。変換は行いません。

-SkipStableGUIDValidation

不安定なアクタ GUID の検証をスキップします。 アクタ GUID が不安定なレベルでは、数回変換すると異なる変換出力が生成されます。レベルを保存すると、これが修正されます。

変換設定を変更する場合は、コマンドレットでデフォルトの変換 .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 システムは、ワールドを単一の永続レベルファイルに保存し、構成可能なランタイム グリッドを使用してスペースをストリーミング可能なグリッドセルに分割することで機能します。

これらのセルは、プレイヤーなどのストリーミング ソースの存在によって、実行時にロードおよびアンロードされます。このように、エンジンは、プレイヤーが特定の時間に表示および操作するレベルの部分のみをロードします。

World Partition のアクタ

ワールドを編集するときに、アクタを好きな場所に配置して、[Details] パネルの World Partition セクションの中にある [Grid Placement] 設定に基づいてグリッド セルを割り当てることができます。

image alt text

設定

説明

Bounds

境界ボリュームと交差するすべてのグリッド セルにアクタを配置します。

Location

アクタを、境界ボリュームの中心点を含むグリッドセルに配置します。

Always Loaded

常にアクタをロードします。

アクタは、One File Per Actor 機能を使用して独自の個別ファイルに保存されるため、ワールドのアクタに変更を加えるために、ソース管理からレベル ファイルをチェックアウトする必要はありません。これにより、チームの他のメンバーのためにレベル ファイルが解放されます。

One File Per Actor システムと Unreal Engine に統合されたソース制御の詳細については、One File Per Actor のドキュメントを参照してください。

レベル内の他のアクタを参照するアクタは、まとめてバンドルされ、同時にロードされます。

World Partition のソース ストリーミング

実行時のグリッド内のグリッド セルのストリーミングは、2 つの要因で決まります。1 つはレベル内のストリーミング ソースの位置です。

Streaming Sources

ストリーミング ソースは、実行時にグリッド セルをロードおよびアンロードします。

ストリーミング ソースは、ワールドの位置を定義し、その周囲のセルの読み込みをトリガーするコンポーネントです。プレイヤーは常にストリーミング ソースとして機能します。ストリーミング ソースは、ストリーミング ソース コンポーネントを使用してワールドに追加することができます。たとえば、ストリーミング ソース コンポーネントは、プレイヤーがテレポートする場所でアクティブ化できるため、そこにセルをロードできます。グリッド セルがロードされると、プレイヤーはその場所にテレポートし、ストリーミング ソース コンポーネントが非アクティブ化されます。プレイヤーがその前にいた場所にストリーミング ソースがなくなったため、これらのグリッド セルはアンロードされます。

ランタイム グリッド設定を変更する

グリッド セルが実行時にロードされるかアンロードされるかを決定する 2 つめの要素は、ランタイ ムグリッド自体の設定です。ランタイム グリッド設定は、[World Settings] パネルの [World Partition Setup] セクションにあります。

image alt text

設定

説明

Grid Name

ランタイム グリッド名を含みます。

Cell Size

ストリーミング レベルの生成に使用されるグリッド セルのサイズを決定します。この例では、セル サイズは32平方メートルです。

Loading Range

セルがロードされるストリーミング ソースからの範囲を決定します。上の画像では、読み込み範囲はストリーミング ソースの周囲 256 メートルの半径です。

Debug Color

Preview Grids が有効になっているときに表示されるグリッド線の色を決定します。

Preview Grids

有効にすると、ビューポートにグリッド線が表示されます。

エディタにグリッド セルをロードまたはアンロードする

大規模なワールドの開発をサポートするために、すべてのグリッド セルは最初にアンロードされます。レベルが開くと、エディタは環境の背景やマネージャなど、[Grid Placement (グリッド配置)] 設定が [Always Loaded (常にロード)] としてマークされているアクタのみをロードします。これは、エディタでマップ全体をロードすることが不可能な大規模なワールドの開発をサポートするためです。

[World Partition] ウィンドウで、作業するグリッド セルを手動で選択できます。[Window] > [World Partition] を選択してウィンドウを開きます。

image alt text

ウィンドウで、グリッ ドセルをクリックしてドラッグし、それらを選択します。次に、右クリックで選択して、コンテキスト メニューを開き、セルをロードおよびアンロードします。

image alt text

Hierarchical Levels of Detail (HLOD) を生成する

HLOD は WorldPartitionHLODsBuilder コマンドレットを使って生成されます。このコマンドレットを実行すると、HLOD レイヤーで指定した生成設定に従って、ワールド パーティション セルの HLOD アクタが作成されます。

World Partition で World Partition - Hierarchical Levels of Detail (HLODs) を使用する方法、および WorldPartitionHLODsBuilder コマンドレットの使用方法に関する詳細については、「Hierarchical Level of Detail」のドキュメントを参照してください。

ブループリントのサポート

ブループリント クラスとレベル ブループリントの両方が、World Partition のワールドでサポートされています。ただし、レベル ブループリントで参照されているアクタは常にロード済みとしてマークされるため、ブループリント クラスが推奨されます。

分割されたワールドをテストする

デバッグとランタイム オーバーライド

実行時にワールド パーティション ワールドをデバッグするために使用できる便利なコンソール コマンドがいくつかあります。

コマンド

説明

wp.Runtime.ToggleDrawRuntimeHash2D

ワールド パーティション ランタイム ハッシュの 2D デバッグ表示を切り替えます。

wp.Runtime.ToggleDrawRuntimeHash3D

ワールド パーティション ランタイム ハッシュの 3D デバッグ表示を切り替えます。

wp.Runtime.ShowRuntimeSpatialHashGridLevel

ワールド パーティション ランタイム ハッシュを表示するときに表示するグリッド レベルを選択します。

wp.Runtime.ShowRuntimeSpatialHashGridLevelCount

ワールド パーティション ランタイム ハッシュを表示するときに表示するグリッドレベルの数を選択します。

wp.Runtime.ShowRuntimeSpatialHashGridIndex

ワールド パーティション ランタイム ハッシュを表示するときに、特定のグリッドを表示します。無効なインデックスはすべてを表示します。

wp.Runtime.RuntimeSpatialHashCellToSourceAngleContributionToCellImportance

セルの重要度に対するストリーミング ソースからセルへのベクトルとソース フォワード ベクトルの間の角度の影響を調整する 0 から 1 の間の値を取ります。0 に近くなるほど、角度がセルの重要性に影響することは少なくなります。

wp.Runtime.OverrideRuntimeSpatialHashLoadingRange

実行時のロード範囲を設定します。以下の引数を指定します。

  • -grid=[index]:影響を与えるランタイム グリッドを設定します。

  • -range=[override_loading_range]:実行時のロード範囲を新しく設定します。

wp.Runtime.MaxLoadingLevelStreamingCells

同時ロード ワールド パーティション ストリーミング セルの数を制限します。

wp.Runtime.HLOD 0

wp.Runtime.HLOD を使用して、HLOD のない世界を表示します。