World Partition - Hierarchical Level of Detail

World Partition ワールドで Hierarchical LOD を使用する方法の説明

Windows
MacOS
Linux

World Partition システムは、グリッドを使用して、ワールドを実行時に動的にロードおよびアンロードができるセルに分離します。さらに、遠くの山、木、崖など、遠くにあり、インタラクティブではないアクタを引き続き表示したい場合があります。

HLODs Off

HLODs On

HLODs オフ。ロードされたセルのコンテンツのみ表示。

HLODs オン。ロードされていないセルのコンテンツを HLOD で置き換え。

World Partition - Hierarchical Level of Detail (HLOD) システムは、カスタム HLOD レイヤーを使用して、大量のスタティックメッシュ アクタを編成し、単一のプロキシメッシュとマテリアルを生成します。この手法は、アンロードされた World Partition グリッド セルを視覚化し、フレームあたりの描画呼び出しの数を減らします。大規模なオープン ワールドで使用する場合は特にパフォーマンス向上のために使用されます。

ランドスケープやウォーター コンポーネントなどの一部のワールド コンポーネントは、現在 HLOD アクタによってサポートされていません。

HLOD レイヤーを作成する

World Partition HLOD は、HLOD レイヤー アセットによって制御されます。これらの特殊なアセットには設定が含まれており、プロジェクトは複数の HLOD レイヤーを使用することができます。

image alt text

  1. コンテンツ ドロワー を開き、[+ Add] をクリックしてメニューを開き、新しい HLOD レイヤー アセットを作成します。[Miscellaneous (その他)] メニューに移動し、[HLOD Layer] アセットを選択します。(コンテンツ ドロワー を右クリックしても、同じメニューが開きます。)

  2. 作成された HLOD レイヤーをダブルクリックして、アセット エディタで開きます。

image alt text

設定

説明

Layer Type

次のオプションからレイヤー タイプを選択します。

  • Instancing (インスタンス化)

  • Merged Mesh (マージされたメッシュ)

  • Simplified Mesh (簡略化されたメッシュ)

Mesh Merge Settings/Proxy Settings

Merged Mesh または Simplified Mesh レイヤー タイプが選択されている場合、追加のオプションを表示します。

Always Loaded

このレイヤーによって生成された HLOD プロキシ メッシュを常にロードするかどうかを決定します。

Cell Size

このレイヤーに HLOD アクタを含めるために作成されたランタイム グリッドのセル サイズを設定します。HLOD レイヤを [Always Loaded] に設定している場合、このオプションは使用できません。

Loading Range

ランタイム グリッドがセルをストリーミングする距離を設定します。HLOD レイヤを Always Loaded に設定している場合、このオプションは使用できません。

Parent Layer

この HLOD レイヤによって作成されたアセットを、指定された HLOD レイヤに自動的に割り当てることができます。

HLODMaterial

Merged Mesh および Simplified Mesh レイヤー タイプのマテリアルのベイク処理に使用するベースマテリアルを設定します。

これは詳細設定です。ほとんどのユースケースでは、デフォルトのマテリアルで十分です。

レイヤー タイプを選択する

HLOD レイヤを使用するためには、まず初めにレイヤー タイプを選択します。

image alt text

レイヤータイプ

説明

Instancing

このタイプのレイヤのスタティックメッシュ アセットは、それらのアセットでの最低の詳細レベル (LOD) 設定を使用して、インスタンス化されたスタティックメッシュ (ISM) コンポーネントに置き換えられます。このタイプは、木や葉などのインポスタ メッシュに最適です。

Merged Mesh

このタイプのレイヤのスタティックメッシュ アセットは、単一のプロキシ メッシュを作成するためにマージされます。

Simplified Mesh

このタイプのレイヤーのスタティックメッシュ アセットは、単一のプロキシ メッシュにマージされ、メッシュの簡略化が実行されます。

メッシュ マージ設定

これらの設定は、マージされたメッシュが選択されている場合にのみ使用できます。

image alt text

設定

説明

Generate Lightmap UV

マージされたメッシュのライトマップ UV を生成します。この新しいレイアウトは、ターゲット ライトマップ UV チャネルに配置されます。

Target Lightmap Resolution

生成されたスタティックメッシュでライトマップ UV 座標を生成するために使用されるライトマップ解像度を指定します。これにより、UV アイランド間の距離が制御されます。解像度が高いほど、各 UV アイランド間のスペースが狭くなります。

Computed Lightmap Resolution

入力メッシュ コンポーネントのライトマップ解像度を合計して、ライトマップ解像度を計算する必要があるかどうかを決定します。

Pivot Point at Zero

マージされたメッシュのピボットポイントの位置がワールド原点にあるか、最初にマージされたコンポーネントにあるかを決定します。

Merge Physics Data

メッシュ コンポーネント、特にコリジョン プリミティブの物理データをマージするかどうかを決定します。

Merge Materials

ソース マテリアルを単一のフラット マテリアルにマージします。これは、LODSelection Type によって決定されるため、単一の LOD レベルをマージする場合にのみ使用できます

Material Settings

Merge Materials が有効になっている場合に作成される簡略化されたマテリアルのマテリアル設定が含まれます。

Gutter Size

トップミップ レベルのベイク処理されたマテリアルのサブチャートにスペースを追加します。テクセルで測定されます。

Create Merged Materials

すべてのソース コンポーネント マテリアル、および新しい UV 座標のセットからフラット マテリアルを作成します。この資料は、デフォルトではどのセクションにも適用されません。

Bake Vertex Data to Mesh

頂点の色や法線などの頂点データを、結果のプロキシ メッシュにベイクします。

Output UVs

指定された UV チャネルをマージされたメッシュに出力します。ソース メッシュ コンポーネントには、指定されたチャネルの有効な UV が含まれている必要があります。

LODSelection Type

マージされたスタティックメッシュを生成するときに使用する LOD 選択モードを決定します。

  • Use all LOD levels:アクタをマージするときに使用可能なすべての LOD レベルを使用します

  • Use specific LOD level:アクタをマージするときに選択した LOD レベルを使用します。

  • Calculate correct LOD level:指定された画面サイズに適した LOD モデルを計算します。

  • Always use lowest detail LOD:アクタをマージするときに最も詳細度の低い LOD を使用します。

Specific LOD

ソース メッシュからエクスポートする LOD レベルを指定します。

Use Vertex Data for Baking Material

頂点の色や法線などの頂点データを、ベイクアウトされたマテリアルにベイク処理します。Merge Materials が選択されている場合にのみ使用できます。

Use Texture Binning

最終的なアトラス テクスチャでの重要性に応じて、さまざまな出力テクスチャ サイズを計算します。Merge Materials が選択されている場合にのみ使用できます。

Reuse Mesh Lightmap UVs

マテリアルをベイク処理するときに、ソースメッシュからのライトマップ UV を再利用するかどうかを決定します。False の場合、エンジンは新しい UV セットを生成します。

Merge Equivalent Materials

同等と見なされるマテリアルをマージしようとします。ワールド位置またはアクタ位置を使用して出力カラーを決定する場合、このプロセスにより、マージされたメッシュにアーティファクトが発生する可能性があります。

Use Landscape Culling

使用可能なランドスケープ ジオメトリを用いて、非表示の三角形をカリングします。たとえば、最も低い三角形がランドスケープの表面の下になる位置にツリー メッシュが配置されている場合、遮られた三角形はマージ時に削除されます。

Include Imposters

ソース メッシュ コンポーネントの一部であるインポスタ LOD が含まれます。

Allow Distance Fields

このメッシュの距離フィールドを計算できるようにします。これを無効にすると、マージされたメッシュが遠くにのみレンダリングされる場合にメモリが節約されます。

Generate Nanite Enabled Mesh

生成されたメッシュで Nanite を有効にします。

プロキシ設定

これらの設定は、SimplifiedMesh が選択されている場合にのみ使用できます。

image alt text

設定

説明

Screen Size

結果のプロキシ メッシュのサイズをピクセル単位で決定します。

Calculate Correct LODModel

指定された画面サイズに基づいて、どの LOD モデルで十分かを計算します。これは、各入力メッシュを分析し、各 LOD 遷移サイズに基づいて正しい LOD を選択することによって行われます。

Override Spatial Sampling Distance

プロキシ LOD マージのために複数のソースメッシュを変換するときにオーバーライドします。

サンプリングが少ない大きなジオメトリは、メモリ コストが非常に高くなります。

Material Settings

材料を簡略化するための設定が含まれています。

Merge Distance

メッシュをマージする必要がある距離。これにより、離れた形状のドアや窓などの隙間を埋めることができます。

Unresolved Geometry Color

マージ距離によって閉じられたドアや窓など、マージされたジオメトリをソースジオメトリに関連付けることができない場合に表示されるベース カラーを割り当てます。

Transfer Distance Override

簡略化されたジオメトリのテクスチャ値を検出するときに使用される検索距離をオーバーライドします。ゼロ以外の Merge Distance 設定が凹状のコーナーに新しいジオメトリを生成する場合に使用されます。

Hard Edge Angle

面の間にハードエッジが導入される角度。これにより、頂点の数が増え、UV シームが追加される可能性があります。法線マップを使用しない場合にのみ推奨されます。

Normal Calculation Method

簡略化されたジオメトリの法線を計算するために使用される方法を制御します。

  • Angle Weighted:法線は、周囲の面の角度を使用して加重されます。

  • Area Weighted:法線は、周囲の面の面積を使用して加重されます。

  • Equal Weighted:法線は、周囲の面の法線の平均を使用して加重されます。

Lightmap Resolution

新しく生成されたライトマップの解像度を設定します。

Compute Lightmap Resolution

マージ プロセスに含まれる各メッシュの寸法を合計することにより、ライトマップの解像度を計算します。

Enable Volume Culling

ボリュームをカリングしてジオメトリを除外できるようにします。

Allow Distance Fields

このメッシュの距離フィールドを計算できるようにします。これを無効にすると、マージされたメッシュが遠くにのみレンダリングされる場合にメモリが節約されます。

Reuse Mesh Lightmap UVs

マテリアルをベイク処理するときに、ソースメッシュからのライトマップ UV を再利用するかどうかを決定します。False の場合、エンジンは新しい UV セットを生成します。

Group Identical Meshes for Baking

同一のメッシュまたはメッシュ インスタンスを 1 回だけベイクします。焼きたてのテクスチャの品質が向上し、焼き時間が短縮されます。マージされたメッシュとソースメッシュのビジュアルの間に不一致が生じる可能性があります。

Create Collision

マージされたメッシュのコリジョンを生成します。

Allow Vertex Colors

マージされたメッシュに頂点の色を保存することができます。

Generate Lightmap UVs

マージされたメッシュのライトマップ UV を生成します。

Generate Nanite Enabled Mesh

生成されたメッシュで Nanite を有効にします。

HLOD レイヤーを使用する

HLOD プロキシ メッシュを生成するには、アクタを HLOD レイヤーに追加して、HLOD を生成するように指示する必要があります。これが完了すると、コマンドレットが実行されてプロキシ ジオメトリが生成されます。

現在、コマンドレットは HLOD プロキシ ジオメトリを生成する唯一の方法です。

アクタを追加する

アクタは現在、次の方法で HLOD レイヤーに追加されています。

  1. アクタの [Details] パネルの HLOD プロパティ。

    image alt text

  2. Data Layer の Default HLOD Layer プロパティ。

    image alt text

  3. ワールド設定の Default HLOD Layer プロパティ。

    image alt text

WorldPartitionConvertCommandlet を使用する場合にも、HLOD レイヤー オプションを使用できます。変換 ini ファイルを使用して、HLOD レイヤーのプロパティを指定できます。

[/Script/UnrealEd.WorldPartitionConvertCommandlet]
EditorHashClass=Class'/Script/Engine.WorldPartitionEditorSpatialHash'
RuntimeHashClass=Class'/Script/Engine.WorldPartitionRuntimeSpatialHash'
HLODLayerAssetsPath="/Game/WorldPartition/HLODLayers"
DefaultHLODLayerName="HLODLayer_Default"
HLODLayersForActorClasses=(ActorClass=/Game/Blueprint/Base_Tree.Base_Tree_C,HLODLayer="HLODLayer_Tree")

[HLODLayer_Default HLODLayer]
LayerType=MeshMerge
MeshMergeSettings=(TargetLightMapResolution=256,OutputUVs[0]=OutputChannel, ...)
HLODMaterial=/Engine/EngineMaterials/BaseFlattenMaterial.BaseFlattenMaterial
RuntimeGrid="HLODGrid_Default"
LoadingRange=30000.000000

[HLODLayer_Tree HLODLayer]
LayerType=Instancing
RuntimeGrid="HLODGrid_Trees"
LoadingRange=30000.000000

この構成で変換されたワールドは、 DefaultHLODLayerName (この例では HLODLayer_Default ) を指定します。これは、一致する .ini セクションで指定されたプロパティを使用して作成されます。HLODLayer_Default によって作成されたアクタは、.ini ファイルのそのセクションで定義されたプロパティを使用して HLODLayer_Tree に割り当てられます。

HLOD を生成する

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

ソース アクタに変更が加えられていない場合、HLOD アクタは再作成またはビルドされません。アクタ自体、またはそのメッシュ、マテリアル、テクスチャに変更を加えると、コマンドレットを再実行したときに HLOD が再構築されます。

次の手順でコマンドレットを使用します。

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

    image alt text

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

    ライト距離最小 1000

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

  4. 次の引数を追加します。

    YourProject YourMap -run=WorldPartitionBuilderCommandlet -AllowCommandletRendering -Builder=WorldPartitionHLODsBuilder

    YourProject はプロジェクト フォルダの名前であり、 YourMap は HLOD をビルドするマップ ファイルの名前です。

    image alt text

  5. さらに、このコマンドの動作を変更するために、次のオプションのいずれかを提供できます。

オプション

説明

-SetupHLODs

World Partition セルの HLOD アクタを設定しますが、それらのジオメトリは作成しません。新しいアクタを更新、削除、または作成できる可能性があります。

-BuildHLODs

既存のすべての HLOD アクタのジオメトリを構築します。

-DeleteHLODs

すべての HLOD アクタを削除します。

HLOD を視覚化する

HLOD アクタはエディター ビューポートで視覚化でき、HLOD セルのステータスは実行時に視覚化できます。

エディタ内

エディタで、[View Mode (表示モード)] を [Level of Detail Coloration (LOD の色付け)] に変更し、[Hierarchical LOD Coloration (階層 LOD の色付け)] を選択します。HLOD レイヤーに割り当てられたアクタは緑色になります。ビューをズームアウトすると、HLOD が青色で表示されます。

ビューポートで、[View Mode] を [Level of Detail Coloration] に変更し、[Hierarchical LOD Coloration] を選択すると、HLOD レイヤーに割り当てられたアクタが緑色で表示されます。

image alt text

カメラをアクタから遠ざけると、HLOD プロキシ メッシュが青色で表示されます。

image alt text

ランタイム

実行時にコンソール コマンド wp.Runtime.ToggleDrawRuntimeHash2D を実行すると、緑色で読み込まれた HLOD セルが表示されます。

image alt text