このドキュメントは、マテリアル関数を使用して複雑なレイヤー ブレンドを作成する、元のレイヤード マテリアル ワークフローの概要です。マテリアル インスタンス エディタで新しくなった マテリアル レイヤー 機能については「こちらのドキュメント」を参照してください。
レイヤード マテリアル は、一連のサブマテリアル (またはレイヤー) を持つ単一マテリアルの作成手段です。サブマテリアルは、マスクなどのピクセル単位の操作でオブジェクトのサーフェス全体へ配置することができます。ユニークなサーフェス タイプ間の複雑なブレンド処理に最適です。下のロケットの画像は、一番右寄りのロケットに独自のマテリアル レイヤーを使用しています。クロム、アルミニウム、そして銅を使用して、ピクセル単位ベースで各マテリアルをブレンドしています。これらはマテリアル全体、またはピクセルごとにブレンドされます。

機能として、レイヤー マテリアルは、マテリアル関数 の拡張として存在するのが特徴です。関数は自己完結型のノード ネットワークで、複雑な数学の方程式など特定の操作を実行します。これらの関数は、数多くのマテリアルで再利用することができます。Make Material Attributes ノードと Break Material Attributes ノードを使用すると、マテリアル関数内で完全にマテリアル属性のフルセットを定義できます。次に、これらのマテリアル関数をベース マテリアルで呼び出し、マテリアル レイヤー ブレンド関数を使用してそれらをブレンドできます。

上記の画像は、Make Material Attributes ノードを使用して、完全にマテリアル関数内で定義されたシンプルなクロム マテリアルです。この関数をベース マテリアルのレイヤーとして使用し、他のマテリアル関数 (レイヤー) とブレンドすることができます。
マテリアル関数は直接サーフェスへ適用することができないため、各マテリアル関数レイヤーを標準のベース マテリアルに挿入する必要があります。その後、これをスタティックメッシュへ適用することができます。マテリアル関数を使用して好きな数だけレイヤーを作成し、それらを自由にブレンドすることができます。
以下は、ワークフローの概要です。
- 新しいマテリアル関数を作成し、ノードグラフを完全に編集します。この関数は、ベース マテリアルで呼び出すとレイヤーの役目をします。
- ノード ネットワークを新規の Make Material Attributes ノードと接続して、ノードを関数の出力値と接続します。
- マテリアル関数を保存します。
- 作成する他のマテリアル機能レイヤーに対して、このプロセスを繰り返します。
- マテリアルを新規作成し、マテリアル エディタで開きます。
- マテリアル関数をコンテンツ ブラウザから新規マテリアルへドラッグしてレイヤーとして使用します。
- Material Layer Blend 関数を使用して、複数のマテリアル レイヤーを一緒にブレンドします。
最終オブジェクトには、サーフェス全体にはっきりとブレンドされた複数の個々のマテリアル レイヤーが作成されます。
主要な利点
レイヤード マテリアルを使用すると、通常は非常に複雑とされるマテリアルの作成が可能になり、その後の編集もより簡単な処理で行うことができます。
たとえば、従来のマテリアル (レイヤーまたは関数なし) でもレイヤード マテリアルの効果を作成すること可能ですが、その場合、各 マテリアル入力 に異なるテクスチャと値をブレンドする複雑なネットワークが必要になります。ほとんどのマテリアルは複数の入力値を使用するため、このようなマテリアルの複雑性はかなり増します。

以下のネットワークの複雑性を考えてみてください。このネットワークは、マテリアル ネットワークを使用せずに、上記のロケットに見られるようなクロムと銅のエフェクトをブレンドしています。
レイヤーなしの従来のマテリアル グラフ。
画像を拡大するにはクリックします。
レイヤード マテリアルの場合、個々のマテリアル タイプはそれぞれ独自のノードに格納されています。編集やデバッグ作業を行うアーティストは、ブレンドをよりシンプルかつ簡易に行うことができます。Make Material Attributes ノードと Break Material Attributes ノードを使用して、個別のプロパティとの接続を気にすることなく、マテリアル関数レイヤーのそれぞれと直接つなぐこができます。
以下のネットワークは上記と同様に機能しますが、クロムと銅の効果は独自のマテリアル 関数へモジュール化しています。
これは、マテリアル関数をレイヤーとして使用するのと同じマテリアルです。
画像を拡大するにはクリックします。
マテリアル レイヤーのその他の利点は、マテリアル関数を利用しているため、各レイヤーを再利用できることです。これにより、マテリアル アーキタイプのライブラリ、または基本的な現実世界の表面タイプの定義の設定が可能になります。例えば、アルミニウム、スチール、皮、プラスチック、ゴムなどの一般的な表面を表現するレイヤーを作成することができます。レイヤー間のブレンドにはレイヤード マテリアルを使用します。別々に表面へ適用しようとして膨大なマテリアル対象を作成せずに、例えばキャラクターなど、詳細なオブジェクトの作成にとても実用的です。

ブレンド タイプ
マテリアル エディタ パレットのマテリアル関数リスト内に、さまざまな Material Layer Blend 関数のリストがあります。これらのお陰で、マテリアルをブレンドする際に複雑なノード グラフを毎回再作成する必要がなくなります。特定のマテリアル機能をオーバーライドする能力など、異なるブレンドを処理することができます。

Material Layer Blend 関数 | |
---|---|
MatLayerBlend_AO | 反射を除去するために表面上にアンビエントオクルージョン (AO) マップをブレンドします。 |
MatLayerBlend_BaseColorOverride | ベースカラーの置き換えを可能にします。 |
MatLayerBlend_BreakBaseColor | 入力されるマテリアル レイヤーからベース カラーを出力します。 |
MatLayerBlend_BreakNormal | 入力されるマテリアル レイヤーから法線を出力します。 |
MatLayerBlend_Decal | 2番目の UV チャンネルを使用してマテリアル上へデカールシートをブレンドします。 |
MatLayerBlend_Decal_UV3 | 3番目の UV チャンネルを使用してマテリアル上へデカールシートをブレンドします。 |
MatLayerBlend_Emissive | マテリアル レイヤーへエミッシブ テクスチャをブレンドします。 |
MatLayerBlend_GlobalNormal | マテリアル レイヤーへ法線テクスチャをブレンドします。 |
MatLayerBlend_LightmassReplace | Lightmass のベースカラーを置き換えます。間接光の効果に変更をもたらします。 |
MatLayerBlend_ModulateRoughness | 入力テクスチャでマテリアル レイヤーのラフネスを乗算します。「脂で汚れた」ように見せる場合に便利です。 |
MatLayerBlend_NormalBlend | 表面全域で法線テクスチャをブレンドしますが、マスクテクスチャの処理手法でブレンドすることによって、法線が表示される位置の制御を可能にします。 |
MatLayerBlend_NormalFlatten | 法線マップの効果を弱めます。 |
MatLayerBlend_RoughnessOverride | マテリアル レイヤーのラフネス テクスチャを置き換えます。 |
MatLayerBlend_Simple | 2 つのマテリアル レイヤーにシンプルな線形補間 (Lerp) ブレンドソリューションを提供します。法線をブレンドしない代わりに、ベースマテリアルの法線を保持します。 |
MatLayerBlend_Stain | ベース マテリアルの上にトップ マテリアルをステイン (染み) としてブレンドします。つまり、トップ マテリアルのベース カラーとラフネス値のみを使用します。 |
MatLayerBlend_Standard | 2 つのマテリアル レイヤーの全ての属性をブレンドします。 |
MatLayerBlend_Tint | ティント (色合い) の位置を制御するために、淡彩色とマスクを入力してマテリアル レイヤーの色調を弱めます。部分的な色の変更に実用的です。 |
MatLayerBlend_TintAllChannels | ティントに良く似ていますが、スペキュラにも影響を及ぼします。これは極めて特別な機能なので、通常は必要ありません。 |
MatLayerBlend_TopNormal | 両マテリアルの全ての属性をブレンドしますが、トップ マテリアルの法線のみを使用します。 |
レイヤード マテリアルをインスタンス化する
レイヤード マテリアルは基本的にマテリアル関数であるため、インスタンス化のためにこれらをパラメータ化するにはいくらか事前に計画する必要があります。スカラー パラメータと ベクター パラメータを使いやすくするために、関数入力表現式をマテリアル レイヤーの一部として作成することもできます。そうしておくと、最上位のマテリアルからこの入力式へパラメータを接続することができます。詳細については、「マテリアル関数の概要」を参照してください。
フローは以下のようになります。

- マテリアル パラメータ (スカラー パラメータ 、ベクター パラメータなど)
- マテリアル レイヤー (関数)
- 関数入力式
- マテリアル レイヤーを定義するあるネットワーク
- 関数出力
- 最終マテリアル
ヒント
- レイヤーの作成時にマテリアル式を関数へ渡すとき、全パラメータを適切な名前が付けられた関数入力ノードと置き換えます。
- マテリアルへマテリアル関数を取り込む時、新規のパラメータ ノードを入力値と接続します。
- これで最終マテリアルをインスタンス化することができます。パラメータがレイヤーに適した部分を操作します。
- 関数入力ノードには、必ずデフォルト値の設定をしてください。変更を加える必要のない場合、開発者のワークフローが迅速化します。
注意事項
レイヤード マテリアルは、複数のマテリアル設定の処理に便利ですが、使用には細心の注意をはらわなくてはいけません。パフォーマンスに関しては、レイヤード マテリアルを使用すると動作が重くなることがあり、特にレイヤー関数に複雑なマテリアルを使用した場合は重くなります。
レイヤーはすべて同時にレンダリングされて、その後ブレンドされることに留意してください。例えば、マテリアルに 4 つのレイヤーがある場合、オブジェクトの各ピクセルに対して、エンジンはブレンドされているレイヤーを特定するためのテストを実行し、使用されていないレイヤーを拒否する必要があります。計算を追加すれば、マテリアルのパフォーマンスが強化されます。
オブジェクトに複数のサーフェス タイプを設定する場合、常にレイヤード マテリアルを使用したい衝動に駆られるかもしれません。たとえば、自動車では、ペイント用、スチール用、ゴム用、ガラス用など、明確なレイヤーが必要になる場合があります。代わりに、ジオメトリ レベルでこれらのレイヤーの多くを分けるとより効率的です。オブジェクトによってはマテリアル要素が多く作成されるのでドローコールが増加しますが、一般的には効率性がかなり向上します。要するに、レイヤード マテリアルを使用する代わりに複数マテリアルを適用できる場合は、複数マテリアルを使用してください。マテリアルを配置した位置にピクセル別の調節が必要な場合は、レイヤード マテリアル関数または マテリアル レイヤー を使用してください。
複数の個別のマテリアルを 1 つに簡略化することにより描画呼び出しは減りますが、結果として得られるレイヤード マテリアルは一般に重すぎて、モバイル プラットフォームで使用できません。