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

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

Choose your operating system:

Windows

macOS

Linux

ランドスケープ システムで最高のパフォーマンスを実現するには、特定の技術的制約を順守する必要があります。以下のドキュメントでは、こうした制約の説明に加えて、ランドスケープの中で美しさとパフォーマンスのバランスを最適にするために何が重要かを説明します。

技術的な詳細

最初からランドスケープの有効なサイズについてすぐに理解できる人などいません。ハイトマップの有効なサイズを判断する (最適なサイズの判断を可能にする) には、ランドスケープの基本的なアーキテクチャについて十分に理解していなければなりません。メモリおよびパフォーマンス上の効率を下げずに巨大なテレインを実現するシステムを構築するためにアーキテクチャによって暗黙の制限がハイトマップのサイズに対して課せられることになります。つまり、あるものに有効であっても別のものには無効な場合もあるということです。これまでの Unreal Engine のテレインシステムには、制限はほとんどなく (あらゆるサイズが有効であり、機能した)、あってもかなり単純なものでした (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 レベルをテクスチャのミップマップに保存することが可能になります。こうすることで、各ディレクトリのコンポーネント内のクワッド数が、2 の累乗から 1 を引いた数 (1 コンポーネントにつき 1 セクションの場合) となるか、あるいは、2 の累乗から 2 を引いた数 (1 コンポーネントにつき 4 セクションの場合) となります。

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

Landscape_Component_Sections.jpg

パフォーマンスへの配慮

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

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

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

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

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

サンプル 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 は -256 から 255.992 までで 16 ビット精度で格納された値を使って高さマップの高さを計算します。この値が、高さマップデータをインポートするときに入力された Z スケール値で乗算処理されます。たとえば、Z スケール値が 1 の場合、最大高度さは約 256 センチ (cm)、最大深度は -256 センチになります。従って、デフォルトの Z 値 100 の場合、高度値は 256 メートル (m) と -256 メートルになります。

Landscape Import Scale

従って、カスタム高度を計算する場合、カスタム高度値を Unreal で使用される -256 から 256 の範囲に変換するための比率を使用する必要があります。高度範囲は合計で 512 ユニット (-256 から 1 は 256 ユニット、0 から 256 は 256 ユニット) なので、比率は 1/512 または 0.001953125 です。まず測定値をセンチメートルに変換して、比率で乗算処理することで、これを適用します。次に例を示します。

マナウ・ケア山 (ハワイ諸島にある標高 4207 m の火山) を Unreal レベルで表現する方法です。

  1. 4,207 に 100 を乗算して高さをセンチメートルに変換します。420.700cm になります。

  2. 新しい値にさきほどの比率を乗算します。420,700 x 0.001953125 = 821.6796875‬ です。

  3. Z スケール値は 821.6796875‬ となり、高さマップはおおよそ -210,350cm から 210,350cm となります。

高さマップファイルをインポートするときに Z スケール フィールドの値を変更するとビューポートでのランドスケープのプレビューが調整されます。

この処理によって、海水面以下の値はない、山の正確な高さがでます。ランドスケープ高度に追加の空間を追加するには、初期高度を調節します。この例ですと、マヌア・ケア山を海水面より下に 5,761m 延長すると、高度全体は 9,968m から開始します。

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

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

全体のサイズ (頂点)

クワッド / セクション

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

コンポーネントのサイズ

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

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

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる