ランドスケープのテクニカル ガイド

ランドスケープの技術的な設定

Windows
MacOS
Linux

ランドスケープ システムで最高のパフォーマンスを実現するには、特定の技術的制約に順守する必要があります。以下のドキュメントでは、こうした制約について説明すると共に、ランドスケープで美しさとパフォーマンスとの間で最適な均衡をとるために重要な情報を示します。

技術的な詳細

最初からランドスケープの有効なサイズについてすぐに理解できる人などいません。ハイトマップの有効なサイズを判断する (最適なサイズの判断を可能にする) には、ランドスケープの基本的なアーキテクチャについて十分に理解していなければなりません。メモリおよびパフォーマンス上の効率を下げずに巨大なテレインを実現するシステムを構築するためにアーキテクチャによって暗黙の制限がハイトマップのサイズに対して課せられることになります。つまり、あるものに有効であっても別のものには無効な場合もあるということです。これまでのアンリアル エンジンのテレインシステムには、制限はまったくない (あらゆるサイズが有効であり、機能した)、あるいは、あってもかなり単純なものでした (2 つの高さマップの平方のみを許可など)。ランドスケープのハイトマップには、もっと複雑で厳格な制限が課せられます。

Landscape アクタは、各セクションが行うことが簡単に分かるように色分けされています。ランドスケープのエッジは黄色、各コンポーネントのエッジは明るい緑、セクションのエッジ (2x2 セクションの場合) は普通の緑、ランドスケープの個々のクワッドは深緑でハイライトされます。

カラー:

Landscape コンポーネント

黄色:

Landscape アクタのエッジ

明るい緑:

Landscape コンポーネントのエッジ

普通の緑:

ランドスケープ セクションのエッジ

深緑:

ランドスケープの個々のクワッド

Landscape_Create_Preview.png

Landscape コンポーネント

ランドスケープは複数のコンポーネントに分割されます。コンポーネントは、レンダリングおよびビジビリティの計算、コリジョンにおいて、「Unreal」の基本単位となります。ランドスケープのコンポーネントは、すべて同じサイズで、常に正方形です。ランドスケープのコンポーネント サイズは作成時に決定されます。作成するランドスケープのサイズと詳細度に合わせて選択します。

各コンポーネントの高さデータは 1 つのテクスチャに格納されます。そのため、サイズを表す頂点の数は 2 の累乗でなければなりません。2 つの隣り合うコンポーネントが接するエッジ上で共有する頂点の列は、各コンポーネント内で複製されて格納されます。このため、各コンポーネント内のクワッド数について検討することが有効となります。

下図は非常に単純なランドスケープです。全体の輪郭が緑で示され、4 つのコンポーネントが含まれています。各コンポーネントは 1 つのクワッドからできています。これはコンポーネント同士の接触部分の頂点がどのように複製されるかを示すために 1 つのコンポーネントを分離させたところです。

Landscape_Components.jpg

コンポーネント セクション

コンポーネントはオプションで 1 つ、または 4 つ (2x2) のサブセクションに分割することができます。サブセクションはランドスケープの LOD 計算の基本単位となります。

4 つ (2x2) のサブセクション オプションを利用すれば 1 つのサブセクションで 4 倍のコンポーネントを使用して同じサイズの高さマップに分割することができますが、コンポーネントの使用数が少ない方が通常は高いパフォーマンスを得られます。

頂点で表した各セクションのサイズも、 2 の累乗でなければなりません (最大値は 256 です)。これによって、異なる LOD レベルをテクスチャのミップマップに保存することが可能になります。こうすることで、1 つのコンポーネント内のクワッド数が、2 の累乗から 1 を引いた数 (1 コンポーネントにつき 1 セクションの場合) となるか、あるいは、2 の累乗から 2 を引いた数 (1 コンポーネントにつき 4 セクションの場合) となります。

次の図では、独立した 1 つのコンポーネントにセクションが 4 つ含まれています (全体の輪郭が緑で示されています)。各セクションは 9 個 (3x3) のクワッドからできています。ここでも、セクション同士が接している部分の頂点が、複製されていると分かります。

Landscape_Component_Sections.jpg

ハイトマップのサイズを計算する

このように、ランドスケープのサイズは、各セクションに含まれるクワッド数、および、各コンポーネントに含まれるセクション数、ランドスケープ内にあるコンポーネント数に基づきます。コンポーネントの数とそれらコンポーネントそれぞれの解像度が決まれば、ランドスケープ全体のサイズの計算は基本的な計算になります。

以下はその計算手順の例です。

サンプル 1

まず 1 つのコンポーネントが 64x64 の頂点を含んでいる場合、このコンポーネントのサイズは 63x63 クワッドです。たとえば、これらのコンポーネントがランドスケープに 10x10 個含まれているならば、ランドスケープのクワッド数の総計は 630x630 となります。ここで、このようなランドスケープの高さをインポートするならば、631x631 個の頂点からなる高さマップにする必要があります。これは、存在するクワッド数よりも常に頂点の列が 1 つ多くなるためです (1x1 のクワッドは、4 つの頂点が必要となります)。したがって、631x631 が有効なランドスケープのサイズとなります。

サンプル 2

1 つのコンポーネントを 4 つのサブセクションに分割した場合、各セクションは 64x64 の頂点からできています。すなわち、各セクションは 63x63 のクワッドからなり、各コンポーネントは 126x126 のクワッドから構成されることになります。このようなコンポーネントが 32x32 あるならば、縦横各方向に総計 126 * 32 = 4032 ずつのクワッドがあることになります。したがって、ランドスケープ全体での頂点数は 4033x4033 になります。

上記の例は正方形のランドスケープでした。しかし、正方形以外のランドスケープを作成することも可能です。たとえば、最初の例の 10x10 は特別ではありません。各コンポーネントに 63 個のクワッドがあるとして、AxB 個のコンポーネントからなるランドスケープを作ることができ、そのトータルのサイズは頂点数で (A*63+1 , B*63+1) となります。

高さマップ Z スケールを計算する

Unreal Engine 4 では、マップ上の点から取得した 0 と 255 の間のグレースケールの値を使って、高さマップの Z スケールを計算します (0 は完全に黒、255 は完全に白)。この値は高さデータをインポートするときに Z スケール値入力に乗算されます。Z スケールを 1 に設定した場合、グレースケール値 255 は 1m の高さに設定されます。100 に設定された Z スケールは、グレースケール値 255 を 100m として設定します。

Landscape Import Scale

高さマップファイルをインポートするときに Z スケール フィールドの値を変更するとビューポートでのランドスケープのプレビューが調整されます。これを利用して、レベルのニーズに最もよく合う値を試して決定することができます。

パフォーマンスへの配慮

パフォーマンスへ配慮する場合、コンポーネント サイズとコンポーネント総数がトレードオフとなります。コンポーネントのサイズが小さくなると LOD の遷移が速くなりオクルージョン可能なテレイン数が増えますが、サイズが小さいとより多くのコンポーネントが必要になります。

それぞれのコンポーネントでレンダリング スレッドの CPU の処理負荷が増えます。また、それぞれのセクションで描画コールが起こります。したがって、コンポーネントの数を最小限に抑える必要があるのです。最大のランドスケープの場合、エピックでは最大 1024 コンポーネントという値を推奨しています。

推奨されるランドスケープのサイズ

以下に挙げたサイズは、エリアを最大化しながらランドスケープ コンポーネント数を最小化します。

全体のサイズ (頂点)

クワッド / セクション

セクション / コンポーネント

コンポーネントのサイズ

トータルのコンポーネント

8129x8129

127

4 (2x2)

254x254

1024 (32x32)

4033x4033

63

4 (2x2)

126x126

1024 (32x32)

2017x2017

63

4 (2x2)

126x126

256 (16x16)

1009x1009

63

4 (2x2)

126x126

64 (8x8)

1009x1009

63

1

63x63

256 (16x16)

505x505

63

4 (2x2)

126x126

16 (4x4)

505x505

63

1

63x63

64 (8x8)

253x253

63

4 (2x2)

126x126

4 (2x2)

253x253

63

1

63x63

16 (4x4)

127x127

63

4 (2x2)

126x126

1

127x127

63

1

63x63

4 (2x2)

レイヤーのデバッグ モード

Layer Debug モードは、特定レイヤーのウェイトをビューポートのランドスケープ上で視覚化できるようにします。Landscape Visualizers の配下にあるビューポートの [View (表示)] メニューで Layer Debug モードを有効化できます。ビューポートのランドスケープ関連のビューモードの情報については「ランドスケープ ビジュアライザー 」を参照してください。

Layer Debug モードを有効にすると、各カラーチャンネルを選択できるラジオ ボタンがターゲット レイヤーと共にリストに表示されます。

Landscape_Target_Debug.png

チャンネルを選択すると、選択したターゲットレイヤーのチャンネルがカバーするエリアを表示するシェーダーがランドスケープに反映されます。

Landscape_Target_Debug_Demo.png

Tags
Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback