Language:
Page Info
Engine Version:

ランドスケープ マテリアル

マテリアル はすべてランダムに、 ランドスケープ アクタと一緒に使用することができますが、Unreal Engine 4 (UE4) 内部のマテリアル システムには、ランドスケープのテクスチャ化を大幅に向上させるいくつかの特殊なランドスケープ専用のマテリアル ノードが用意されています。次のドキュメントでは、これらのノードをどのように機能させ、ランドスケープ マテリアルでどのようにノードを使用するかについて、詳しく説明します。

ランドスケープを使用するため、 Material Editor (マテリアル エディタ) 内でマテリアルを修正します (他のマテリアルの修正方法と同様です)。

レイヤのウエイトと順序

ランドスケープは、アルファ ブレンドではなくウエイト ブレンドを使用します。そのため、あらゆる位置のあらゆるレイヤーのためのブレンド係数は、最大で 1.0 まで追加されます。これによる利点は、順序依存がないということです。いつでもどのようなレイヤもペイントすることができ、そのウエイトが増すと、他の既存のレイヤーのウエイトが減ります。一方、短所は、 1 つのレイヤーを 100% まで完全にペイントすると、他のレイヤのウエイトの値が 0% になることです。すでに 100% になっているレイヤーを [Paint (ペイント)] ツールを使用して削除すると、これがはっきりとわかります。削除中のレイヤーをどのレイヤーと置き換えるべきか、ペイント ツールは検出しません。そのため、ツールが何もせず終了しているかのように見えます。

ランドスケープ固有のマテリアル ノード

マテリアル エディタの内部には、ランドスケープ システムで使用できる 6 つの特別なノードがあります。それらのノードすべて、 [Context (コンテキスト)]メニューまたはランドスケープ カテゴリの下にある [Palette (パレット)] メニューにあります。

コンテキストメニュー

マテリアル エディタのコンテキスト メニュー

パレット メニュー

Landscape_Mat_Palette.png

ランドスケープ レイヤーのブレンド ノード

LandscapeLayerBlend ノードを使うと、複数のテクスチャあるいはマテリアル ネットワークをブレンドして、ランドスケープ レイヤーとして使用できるようになります。LandscapeLayerBlend は配列を使用して、ランドスケープ レイヤーに関する情報を格納します。この配列にレイヤーを追加するには、[0 elements] というエントリの横にある [+] をクリックします。

Landscape_Add_To_Array.png

LandscapeLayerBlend ノードに複数のレイヤーを追加すると、次の画像のように表示されます。

LandscapeLayerBlend ノード

LandscapeLayerBlend ノードのプロパティは、 マテリアル エディタ[Details (詳細)] パネルで設定できます。

番号

プロパティ

説明

1:

Layers

ノードに含まれるレイヤーのリストです。プラス アイコン (Plus Sign) をクリックすればレイヤーを追加できます。

2:

Layer Name

レイヤーにつけるユニークな名前です。Layer Name (レイヤー名) はランドスケープの[Paint モード] で使用されるレイヤー名に対応します。

3:

Blend Type

LB_AlphaBlendLB_HeightBlendLB_WeightBlend のいずれかです。このページで後述されます。

4:

Preview Weight

マテリアル エディタ内でブレンドをプレビューするために、レイヤー用のウェイト値として使用されます。

5:

Const Layer Input

これは、テクスチャを使用したくない場合に、数値を色として指定するためのものです。主に、レイヤーに問題がある際のデバッグに使用されます。

6:

Const Height Input

これは、テクスチャを使用したくない場合に、数値を高さとして指定するためのものです。

7:

Additional Layers

これらは追加のレイヤーで、折り畳まれているときのように表示されます。

Landscape_LayerBlend_Node.png

以下の表は、 Layer Blend ノード の入力および出力の詳細になります。

番号

項目

説明

1:

Layer LayerName

各レイヤーが、互いとブレンドするための入力を追加します。これらの入力は、レイヤーが [Details (詳細)] パネルに追加されるまで利用できません。

2:

Height LayerName

ここでは、ブレンドするハイトマップを指定します。この入力は、Blend Type プロパティが LB_HeightBlend に設定されたレイヤー上でのみ表示されることにご注意ください。

3:

Unlabeled Output

互いにブレンドされたレイヤーの結果です。

特定の組み合わせのレイヤー ブレンド モードを使用すると、ランドスケープ全体で、異なるレイヤーが重なる場所に黒い領域ができてしまいます。この問題は複数のランドスケープ レイヤーで LB_HeightBlen モードを使用する場合に、特に発生します。LB_HeightBlend は指定された高さの値でブレンド係数やウエイトを調整することで動作します。リージョンに複数のレイヤをペイントし、それが全て LB_HeightBlend の場合、リージョンにペイントされたレイヤーが全て同時に高さの値を 0 に設定することができるので、各レイヤーの望ましいブレンド係数は 0 になります。そして、暗黙的または明示的な順序付けがない場合、レイヤーはその領域に寄与しないため、黒い領域となります。法線マップをブレンドすると、法線の値が (0,0,0) と有効ではない値となり、光源に関しレンダリング上の問題を引き起こすため、状態は悪化します。この問題を解決するには、次の例のようにレイヤーの 1 つに LB_AlphaBlend を使用します。LB_HeightBlend 問題

左の画像では、レイヤーは全て LB_HeightBlend であり、ところどころ黒くなっています。右の画像では、赤い 1 のレイヤーに LB_AlphaBlend を使用するようにしたところ問題が解決しました。

次の Landscape Layer Blend ノード プロパティの例では、多数のレイヤーが全てブレンドされています。Soil レイヤ-のブレンド モードが LB_AlphaBlend に設定され、他のレイヤーが LB_HeightBlend に設定されていることに注意してください。これは、上記の問題 (レイヤーが重なる部分に黒い点が発生すること) を防ぐためです。

レイヤー ブレンド プロパティ

レイヤーを追加するには、レイヤーのエレメント番号の右側にあるドロップダウンの矢印をクリックしてコンテクスト メニューを開き [Delete (削除)] をクリックします。

レイヤを削除

Landscape Layer Coords ノード

LandscapeLayerCoords ノードは、マテリアル ネットワークをランドスケープ テレインにマッピングするために使用できる UV 座標を生成します。

LandscapeLayerCoords ノード

LandscapeLayerCoords ノードのプロパティは、 [Details (詳細)] パネルで設定できます。

番号

プロパティ

説明

1:

Mapping Type

マテリアル (またはネットワーク) をランドスケープにマッピングする際に用いる方向を指定する ELandscapeCoordMappingType です。

2:

Custom UVType

テレイン上で使用するマップ位置です。CustomUVType は、指定されたプロパティ値に基づいてマテリアルをランドスケープにマッピングするための UV 座標を出力します。

3:

Mapping Scale

UV 座標に適用する統一したスケーリングです。

4:

Mapping Rotation

UV 座標に適用する回転です。

5:

Mapping Pan [U]

UV 座標に適用する、[U] 方向のオフセットです。

6:

Mapping Pan [V]

UV 座標に適用する、[V] 方向のオフセットです。

7:

Unlabeled Output

指定されたプロパティ値に基づいてマテリアルをランドスケープにマッピングするための UV 座標を出力します。

Landscape Layer Switch ノード

LandscapeLayerSwitch ノードを使用することによって、ある特定のレイヤーがランドスケープのある領域に寄与していない場合に、マテリアルの演算をいくつか除外するこができます。これにより、特定のレイヤーのウエイトが 0 である場合に不要な計算を削除して、マテリアルを最適化することができます。

LandscapeLayerSwitch ノード

LandscapeLayerSwitch ノードのプロパティは、 [Details (詳細)] パネルで設定できます。

番号

プロパティ

説明

1:

Parameter Name

パラメータにつけるユニークな名前です。

2:

Preview Used

プレビューを使う時にチェックします。

3:

LayerUsed

ノードのプロパティで指定されているレイヤーが、ランドスケープの現在のリージョンによって使用されている場合に使用する結果です。

4:

LayerNotUsed

レイヤーがランドスケープの現在のリージョンによって使用されておらず、ウェイトがゼロの場合に使用する結果です。

5:

Unlabeled Output

LayerUsed または LayerNotUsed のいずれかです。これは、レイヤーがランドスケープの特定のリージョンに寄与しているか否かに依存します。

Landscape Layer Weight ノード

LandscapeLayerWeight 表現式によって、マテリアルが適用されるランドスケープから取得される関連レイヤーのウエイトに基づきマテリアル ネットワークをブレンドできるようになります。

LandscapeLayerWeight ノード

LandscapeLayerWeight ノードのプロパティは、 [Details (詳細)] パネルで設定できます。

番号

プロパティ

説明

1:

Parameter Name

式と関連づける、ランドスケープに属するレイヤーの名前です。このレイヤーのウエイトが、2 つの入力ネットワークをブレンドするためのアルファ値として使用されます。

2:

Preview Weight

マテリアル エディタ内でプレビューのために使用するウエイトです。

3:

Const Base

ランドスケープに必要な基本色をここで指定できます

4:

Base

このレイヤーとブレンドするネットワークです。通常、これより前に行われたレイヤーのブレンドの結果です。ただし、これが最初のレイヤである場合は空になることがあります。

5:

Layer

このレイヤーを作成するために一緒にとブレンドするネットワークです。

6:

Unlabeled Output

関係するレイヤーのウエイトに基づいて BaseLayer 入力をブレンドした結果を出力します。

Landscape Visibility Mask ノード

LandscapeVisibilityMask ノードを使って、ランドスケープで可視化されている部分を取り除き、例えば洞窟などの穴を作成できるようにします。

LandscapeVisibilityMask ノード

LandscapeVisibilityMask ノードのプロパティは、 [Details (詳細)] パネルで設定できます。

番号

プロパティ

説明

1:

Unlabeled Output

可視化をマスクするプロパティを出力します。

このノードを正しく機能させるには、その出力がマテリアルの [Opacity Mask] スロットに接続されていることと、マテリアルの [Blend Mode] [Masked] に設定されていることを確認してください。

Landscape_VisibilityMaskSetup.png

レイヤーのブレンディング

ペイント可能なランドスケープ レイヤーに複数のテクスチャとマテリアル ネットワークをブレンドする機能は、ランドスケープ テレインをテクスチャリングする際の基本となります。レイヤーを一緒にブレンドするためには、複数の LandscapeLayerWeight ノードか、法線マップを使用しているかどうかに応じて 1 ~ 2 つの LandscapeLayerBlend ノードを使用できます。

Landscape Layer Weight ノードの使用

LandscapeLayerWeight ノードの設定と使用は非常に簡単ですが、その概要を以下に示します。

レイヤー名は固有のものでなければならないため、可能な限り記述的な名前をつけると使いやすいでしょう。

  1. マテリアル エディタLandscapeLayerWeight ノードをマテリアル グラフに追加します。[Parameter Name (パラメータ名)] のデフォルト名は「None」となっています。

    Landscape_Layer_Weight_Base.png

  2. [Details (詳細)] パネルで、 [Parameter Name (パラメータ名)] を記述的なレイヤー名に変更します。例えば、「Rock (岩)」などです。

    Layer Name

    [Parameter Name (パラメータ名)] を入力すると、ノード自体が更新されます。

    Landscape_Layer_Weight_Named_Layer.png

  3. マテリアルを付けたいレイヤーの LandscapeLayerWeight ノードを追加していきます。この例では、 LandscapeLayerWeight ノードを 2 つだけ使用します。

  4. Texture Samples あるいは他のマテリアル ネットワーク表現式を LandscapeLayerWeight ノードに追加して接続します。

  5. LandscapeLayerCoords ノードを追加し、UV タイリングを必要なものに設定し、Texture Sample ノードに接続します。

  6. レイヤー のノードの出力ピンから次のレイヤー ノードの Base ピンへドラッグし、ワイヤーで接続します (最初のレイヤー ノードの Base ピンは切断したままにしておきます)。

  7. 最後の レイヤー ノードの出力ピンを、マテリアルの Base ノードの Base Color 入力ピンにドラッグします。

完了すると、LandscapeLayerWeight ノードを使用した以下の例のようになります。

ランドスケープ レイヤー ノード

マテリアルに対するさまざまなウエイトの効果をプレビューするには、 LandscapeLayerWeight ノードの Preview Weight プロパティを変更します。

Landscape Layer Blend ノードの使用

LandscapeLayerWeight ノードを使用してレイヤーを手動でブレンドする方法の代わりに、 LandscapeLayerBlend ノードを使って複数のレイヤーをブレンドするという方法があります。そのためには、アルファ ブレンディング、または、高さベースのオフセットをともなったアルファ ブレンディングを使用します。高さベースのオフセットを用いることによって、入力された高さマップに基づいてレイヤーを他のレイヤーとブレンドすることができます。

LandscapeLayerBlend ノードの使用方法

  1. マテリアル エディタで LandscapeLayerBlend を追加します。

    Landscape_LayerBlend_Material_Example_00.png

  2. [Details (詳細)] パネルで、 Layers の隣のプラス アイコン (Plus Sign) をクリックしてレイヤーを追加します。

    Landscape_LayerBlend_Material_Example_01.png

  3. レイヤーを展開してプロパティを表示します。

    Layer Properties

  4. [Layer Name (レイヤー名)] を記述的なレイヤー名に変更します。例えば、「Rock (岩)」などです。

    Layer Name

  5. レイヤーをアルファブレンドにするのかハイトブレンドにするのかを決めて、それに合わせて [Blend Type (ブレンド タイプ)] を設定します。

    Blend Type

  6. ランドスケープ マテリアルにほしい数だけレイヤーを追加します。名前を変更して、 [Blend Types (ブレンド タイプ)] を正しく設定します。

  7. LandscapeLayerBlend ノードの出力ピンを、マテリアルの基本ノードの Base Color 入力ピンに接続します。

  8. Texture Sample ノードを追加して、メイン出力を LandscapeLayerBlend ノードの Layer 入力にメインに接続します。(または、さらに複雑なマテリアル ネットワークを作成して、LandscapeLayerBlend の Layer 入力へ接続します。)レイヤーがハイトブレンドされている場合は、 Texture Sample のアルファ出力を LandscapeLayerBlend の Height 入力へ接続します。

完了すると、ランドスケープ マテリアル ネットワークはこのような感じになります。

ランドスケープ ブレンド ノード

マテリアルに対するさまざまなウエイトの効果をプレビューするには、 LandscapeLayerBlend ノードの Preview Weight プロパティを変更します。

ランドスケープ レイヤーのブレンド タイプ

ランドスケープ レイヤー ブレンド マテリアル ノードでは、3 種類の異なるブレンドモードから選択できます。求めたい結果に応じて、それぞれ異なる レイヤー ブレンド タイプを使用します。

ブレンド タイプ

機能

LB Weight Blend

このモードは、World Machine のような外部プログラムからレイヤーを追加する場合や、レイヤーの順序を気にせずに互いに独立したレイヤーをペイントできるようにしたい場合に便利です。

LB Alpha Blend

このモードは、細かい部分にペイントしたい場合や、レイヤーの順番を決めたい場合に適しています。そのため、岩や草の上に雪をオクルードすることはできますが、雪を消すと、その下の岩や草が復元されます。

LB Height Blend

これは LB_WeightBlend と同じですが、ハイトマップに基づいてレイヤー間の遷移に詳細も追加します。これを使うことで、例えば、岩と泥との間のスムーズなブレンドの代わりに、レイヤーの遷移点における岩の間の隙間に汚れが現れるようにすることができます。

下は、LB Height Blend の実行中の例です。このように、レイヤーの遷移点で岩の間の隙間に汚れが現れます。この方法を用いることで、レイヤーが重なる所でうまく遷移させることができます。

LB_HeightBlend.png

ランドスケープ レイヤー ブレンドの技術情報

これらのレイヤー ノードは、 Static Switch Parameter ノードのように動作するので、マテリアルの 1 部から別の部分への切り替えが可能です。ランドスケープの各コンポーネントには、そのコンポーネントだけに適用されるメインのランドスケープ マテリアルから作成された、それ自身の MaterialInstanceConstant があります。特定のレイヤーが特定のランドスケープのコンポーネント上で使用されていない場合は、そのレイヤーに接続されているノードのサブツリーが破棄されます。これによって、全体的なマテリアルの複雑度が下がり、ランドスケープに適用されているマテリアルが任意の数のテクスチャ サンプルをもてるようになります。ただし、そのためには、個々のコンポーネント上で使用されているサンプルの数が、シェーダーモデルの仕様によって規定されている最大値を超えないという条件がつきます (SM 3.0 では 16)。以上によって、ランドスケープ上のあらゆる部分で使用されている、あらゆるテクスチャまたはネットワークを含むマスター マテリアルをセットアップすることが可能であるということになります。その結果、非常に複雑なネットワークの集合体ができる可能性があります (その一方で、ランドスケープのコンポーネントに適用されている最終的なマテリアルが、ハードウェアによって認められるパラメータ内にとどまります)。

すべてのマテリアル式のネットワークは、単純な TextureSample のかわりに、 Layer 入力に接続することが可能です。これによって、より複雑なエフェクトが可能になります。たとえば、どのくらい離れてレイヤーを眺めるかに応じて、詳細なテクスチャからより大きなマクロ テクスチャに遷移させるエフェクトなどが実現できます。

Landscape Hole Materials

ランドスケープでの穴の作成は、Manage モード にて、一度にランドスケープ コンポーネント全体を削除することによってのみ可能です。この問題を回避するには、Landscape Hole Material を使用します。それにより、ランドスケープの特定の場所のビジビリティとコリジョンを隠すことができます。山の斜面にある洞窟の入り口のようなものを作りたい場合、この機能が役に立ちます。

Lansdcape マテリアルと Landscape Hole マテリアルには同じマテリアルを使用できますが、オパシティ マスクを使っているマテリアルはそうでないマテリアルよりも負荷が大きく、パフォーマンス志向になります。このような理由で、Landscape Hole マテリアルを別に作成するオプションが付いているのです。

Landscape Hole マテリアルを作成する方法

  1. 最初に、コンテンツ ブラウザで既存マテリアルを開くか、新規マテリアルを作成します。マテリアルが開いたら、 [Details (詳細)] パネルを開いて、[Blend Mode][Masked] に設定します。

    Landscape_BaseNodeOpacity.png

  2. 次に、LandscapeVisibilityMask ノードを検索してマテリアル グラフに追加し、その出力を [Opacity Mask] 入力に接続します。

    Landscape_VisibilityMaskNode.png

  3. ここでは、普段どおりの方法でランドスケープ マテリアルの残りの部分を設定することができます。完了すると、この画像に似たような状態になっているはずです。

    Landscape_VisibilityMaskSetup_In_Material.png

  4. マテリアルがコンパイルされたら、今度はランドスケープに割り当てます。そうすることで、使用が可能となります。これは、[Details (詳細)] パネルの [Landscape Hole Material] セクションで行うことができます。

    Landscape_Hole_Materail_Assign.png

  5. すべての作業が完了すると、テレインの可視性について、次のビデオのように、マスクしたりマスクを解除したりできるようになるはずです。

ランドスケープに穴を作成するペイント ツールの使用方法については、 「Using Opacity Masking to Create a Hole」 を参照してください。

マテリアルをランドスケープに割り当てる

ランドスケープ用のマテリアルが作成されたら、レベル内のランドスケープ アクタに割り当てる必要があります。そのマテリアルの使用と表示を可能にするためです。以下の方法でランドスケープ アクタにマテリアルを割り当てます。

マテリアルをランドスケープに割り当てる

  1. コンテンツ ブラウザ から使用するランドスケープ マテリアルを検索して、選択します。

  2. レベル ビューポート または ワールド アウトライナー でランドスケープを選択します。

  3. レベル エディタのランドスケープの [Details (詳細)] パネルの [Landscape (ランドスケープ)] セクションの Landscape Material の横にある [Assign] 矢印 (Assign arrow) をクリックして選択中のマテリアルを割り当てます。

    割り当てられたマテリアル

洞窟などの穴を作成するために取り除いたランドスケープのセクション上で使用できる特別なオパシティ 設定がされたマテリアルの Landscape Hole マテリアル として機能するように、別のマテリアルを割り当てることができます。

Landscape Hole マテリアルをランドスケープに割り当てる

  1. コンテンツ ブラウザ から使用する Landscape Hole マテリアルを検索して、選択します。

  2. レベル ビューポート または ワールド アウトライナー でランドスケープを選択します。

  3. レベル エディタのランドスケープの [Details (詳細)] パネルの [Landscape Hole Material] セクションの Landscape Material の横にある [Assign] 矢印 (Assign arrow) をクリックして選択中のマテリアルを割り当てます。

    Landscape_HoleSettings.png

Landscape Hole Material の使用方法については、 「Using Opacity Masking to Create a Hole」 を参照してください。

テッセレーションと変位

マテリアルの Tessellation Multipliers (テッセレーション乗数)World Displacement (ワールド変位) チャンネルは、ランドスケープ テレインと連動して使用されることによって、ランドスケープがカメラの近くにあるときに、付加的な詳細と変形をもたらします。これらのチャンネルは、他の標準的なマテリアルの場合とまったく同じように機能します。また、レイヤーのブレンドは、 Base Color法線 、他チャンネルの場合とちょうど同じように、これらのチャンネルとともに使用することができます。また、ランドスケープは、ハードウェアのテッセレーションを最高レベルの詳細度 (LOD) でレンダリングし、ランドスケープが 2 番目の LOD に近づくにつれてフェードアウトします。後続の LOD ではテッセレーションが有効にならないので、ランドスケープ テレインの変位にテッセレーションを有効にした際、パフォーマンスが大幅に向上します。

これらの機能を使用できるのは、DirectX 11 が有効になっている場合に限られます。そのため、DirectX 11 のハードウェアを特にターゲットにしていない場合は、補助的な仕上げ効果として上記機能を使用するとよいでしょう。プロジェクトでテッセレーションを有効にして使用する方法の詳細については、「Tessellation Multipler」 を参照してください。

Landscape_HW_Tess.png

上記の可視化では、最も高い LOD (白) がテッセレーションを有効にしてレンダリングされており、他の LOD (色付き) はテッセレーションなしでレンダリングされます。

モバイル ランドスケープ マテリアル

モバイル ランドスケープは、もはや 3 つのランドスケープ レイヤーに限定されません。依然として3 つに最適化されてはいますが、十分なテクスチャ サンプラーがある場合、任意の数のレイヤーがサポートされます。ランドスケープ レイヤーの割り当てには、Feature Level Switch Material node ノードを使用するようになりました。それにより、1 つの PC または Console Landscape Material にもモバイル用のバージョンを割り当てることが可能となりました。次の図は、 PC およびコンソール バージョンで使用されているランドスケープがモバイル デバイスに対して使用された場合の Fortnite Battle Royal の外観を示しています。

MobileLandscape_FeatureLevel.png