Unreal Engine では、マテリアル によってシーン内にあるオブジェクトのサーフェス プロパティを定義します。広義においては、マテリアルを、メッシュの外観を制御するメッシュに適用される「ペイント」と捉えることができます。
具体的には、マテリアルによって、シーン内でどのようにサーフェスとライトがインタラクトするかを Unreal Engine に伝達します。マテリアルでは、色や反射、ラフネス、透明度などを含む、サーフェスのあらゆる側面を定義します。
シェーディング パイプラインの概要
シェーダーは、レンダリング パイプラインにおいては、それぞれの頂点もしくはピクセルのレンダリング方法を定義するプログラムです。Unreal Engine では、シェーダーを ハイレベル シェーディング言語 (HLSL) で記述します。シェーダーのコードは、GPU ハードウェアで実行可能なアセンブリ言語指示のリストに変換されます。このようにして、最終的なピクセル カラーがディスプレイに出力されます。
Unreal Editor では、プロジェクトで使用するシェーダーを HLSL コードで記述する必要はありません。代わりに、マテリアル エディタ と呼ばれるビジュアル スクリプティング インターフェース内で、マテリアル と呼ばれるアセットを作成します。
マテリアル
マテリアルは、シェーダー グラフ内で マテリアル表現式 と呼ばれるノードを複数組み合わせて、それぞれの結果を メイン マテリアル ノード に渡すことで構築します。

バックグラウンドでは、これらのノード グラフが自動的に HLSL に変換されます。ユーザーとして、HLSL コードを見ることはできますが直接それを編集することはできません。これにより、Unreal Engine ではマテリアルの作成をより直感的に、容易に行うことができます。

マテリアル エディタで [Window (ウィンドウ)] > [Shader Code (シェーダー コード)] > [HLSL Code (HLSL コード)] に移動し、HLSL コードを表示できます。[HLSL Code] タブは読み取り専用です。Unreal Editor 内で HLSL シェーダーコードを直接編集することはできません。
マテリアル ワークフローの概要
このセクションでは、Unreal Engine におけるマテリアルの作成手順に関する大まかな概要を説明します。
これはステップごとの詳細な手順を示すものではなく、その概念を大まかに示す概要であることに留意してください。マテリアル エディタの使用に関する詳細な情報については、「マテリアル エディタのユーザー ガイド」の各ページを参照してください。
新しいマテリアルを作成する
Unreal Engine では、マテリアルは、スタティック メッシュやテクスチャ、ブループリントと同様にアセット クラスです。新しいマテリアルはコンテンツ ブラウザから作成できます。
- コンテンツ ブラウザ 内を右クリックします。
-
コンテキスト メニューの [Create Basic Asset (基本アセットを作成)] セクションで [Material (マテリアル)] を選択します。
-
コンテンツ ブラウザ内にマテリアルが作成されます。このマテリアルに固有のわかりやすい名前を付けます。
マテリアル アセットを ダブルクリック して、マテリアルを編集します。下図のように、マテリアル エディタ のウィンドウが開きます。
クリックすると拡大表示されます。
黄色で囲まれた領域が マテリアル グラフ です。マテリアルの作成に関するほとんどの作業をここで行います。新しいマテリアルのマテリアル グラフには、メイン マテリアル ノード のみが含まれています。これには、マテリアルの外観と動作を示すすべての入力が含まれています。
マテリアル エディタの UI の詳細については、こちらを参照してください。
マテリアルのプロパティ
メイン マテリアル ノード を選択すると、[Details (詳細)] パネル にそのマテリアルのグローバルなプロパティと設定が表示されます。マテリアル グラフの空のスペースをクリックして、マテリアルのプロパティを表示することもできます。
次の図で示されている 3 つの設定はマテリアルの基礎を築き、その使用を定義するものであるため、マテリアル作成の初期段階で特に重要になります。

- Material Domain (マテリアル ドメイン) – プロジェクトでのマテリアルの使用目的を定義します。マテリアル ドメインには、サーフェス、ユーザー インターフェース、ポストプロセス マテリアルなどがあります。
- Blend Mode (ブレンド モード) – マテリアルとその背後にあるピクセルとのブレンド方法を定義します。たとえば、[Opaque (不透明)] のシェーダーはその背後のオブジェクトを完全にオクルードし、[Translucent (透過)] および [Additive (加算)] のシェーダーでは、バックグラウンドとある程度ブレンドします。
- Shading Model (シェーディング モデル) – マテリアルとライトとのインタラクションを定義します。多くの場合、マテリアルでは [Default Lit (デフォルト ライティング)] を使用しますが、Unreal Engine には 髪 (ヘア)、クロス、スキン などの特定の要素向けのシェーディング モデルが用意されており、コンテキスト特有の入力を通じて、これらのタイプのサーフェスを作成しやすくなっています。
これらのプロパティでは、メイン マテリアル ノードで有効になる入力を定義します。上の図では [Opacity (オパシティ)] がグレーアウトされていますが、これは [Opaque] ブレンド モードでは透過性がサポートされていないためです。
[Translucent] ブレンド モード を選択した場合は [Opacity] 入力が有効になり、代わりに他のブレンド モードでは有効であったいくつかの入力がグレーアウトされます。

新しいマテリアルの作成時には、まず最初にこれらの 3 つのプロパティを設定することをお勧めします。
[Details] パネルに含まれるその他のプロパティの詳細については、「マテリアルのプロパティ」ドキュメントを参照してください。
マテリアル表現式ノード
マテリアルのプロパティがその基礎だとすると、マテリアル表現式 はマテリアルを構成する要素であると言えます。

それぞれのマテリアル表現式は、マテリアル グラフ内で特定のアクションを実行します。マテリアル表現式は、技術的には単に HLSL コードのスニペットのビジュアル表現です。マテリアル表現式を組み合わせて使用することで、HLSL シェーダーをそのコードを見ることなく作成することができます。
あるノードの 出力ピン からドラッグして、別のノードの 入力ピン につなげることで、データを複数のマテリアル表現式の間で渡します。

シンプルなサーフェスであれば、いくつかのマテリアル表現式だけでマテリアルを定義できます。下の図では、3 つのテクスチャ サンプルでほとんどが設定されています。グラフ内の他のノードは、アーティストがラフネスの強度を微調整するためのものです。

これは完成したマテリアルですが、マテリアル グラフ内で演算やロジックを使ってそのサーフェスをさらに調整することも可能です。マテリアル表現式を組み合わせて、マテリアル内で特定の結果を達成する方法を理解することは、Unreal におけるマテリアル作成の基礎と言えます。
マテリアル表現式をグラフ内に配置する方法については、こちらを参照してください。
Unreal Engine には多数のマテリアル表現式ノードが含まれています。そのほとんどにはマウスオーバーで表示されるヒントが備わっていますが、各ノードの使用については、「マテリアル表現式のリファレンス」ページを参照してください。
メイン マテリアル ノード
マテリアル グラフ内でデータは左から右に流れ、メイン マテリアル ノード がすべてのマテリアル ネットワークのエンドポイントとなります。
メイン マテリアル ノードには、マテリアルにコンパイルされる情報を定義する最終的な入力ピンが含まれています。グラフ内のマテリアル表現式は、メイン マテリアル ノードにつながるチェーンの一部でない場合はマテリアルに影響を与えません。
上のビデオでは、テクスチャ サンプルがメイン マテリアル ノードの対応する入力に接続されている場合のみに、マテリアル プレビューが更新されることに注意してください。
メイン マテリアル ノードのすべての入力は、マテリアル全体の特定の性質をそれぞれ定義しています。次の 2 つのページでは、それぞれの入力の使用目的について詳しく説明しています。
- 「物理ベースのマテリアル」 – Unreal の物理ベースのマテリアルのワークフローに関する原則とベストプラクティスについて説明します。
- 「マテリアル入力」 – メイン マテリアル ノードの各入力の動作について説明します。
コンパイルと適用
マテリアルに対する変更をレベル内に反映させるには、マテリアルをコンパイルする必要があります。マテリアルをコンパイルするには、マテリアル エディタ上部のツールバーにある [Apply (適用)] または [Save (保存)] ボタンをクリックします。

コンパイルしたら、コンテンツ ブラウザからレベル内のあらゆるアクタにマテリアルを直接ドラッグできます。

通常、コンパイルは数秒で完了しますが、複雑なマテリアルの場合は数分を要する場合があります。マテリアルの開発時やテスト時にこれがボトルネックとなる可能性がありますが、コンパイルによる遅延を最小限に抑えるための方法もいくつかあります。
マテリアルのインスタンス化 は、イテレーション時間を向上し、作業時における長いコンパイル時間による遅延を回避するための一つの方法です。インスタンス化 については以下を参照してください。
マテリアル エディタのユーザー ガイド
これまで紹介した手順は、Unreal Engine における基本的なマテリアルのワークフローを説明するものです。これらの各手順は、マテリアル エディタのユーザー ガイドでより詳しく文書化されています。
マテリアルの作成を始める前に、以下に示すそれぞれのページを参照することをお勧めします。
ワークフローにおける効率性の概念
作成したマテリアルを一度きりしか使わないことは非常に稀です。同じようなアセットには同じようなマテリアルが必要になることが多いため、プロジェクトのすべてのアクタに対してマテリアルを新しく作成することは非効率的です。
マテリアル インスタンス と マテリアル関数 によってマテリアルのカスタマイズと再使用が容易になり、イテレーションをより迅速に行い、重複する作業を回避することができます。
マテリアル インスタンスとパラメータ化
マテリアル インスタンスを使用すると、単一の親マテリアルから複数のバリエーション、つまりインスタンスをすばやく作成できます。
関連するアセットのグループに、基本的には同じマテリアルでありながらも、表面上の性質が異なるものが必要な場合にインスタンスが使用されます。たとえば、いくつかの色のバリエーションがある家具などがその例です。

マテリアルのインスタンス化では、まず家具セットの親マテリアルを一つ作成し、上の図の椅子のように、それぞれの色のマテリアル インスタンスを作成します。
インスタンスを使用することで、次のような利点を得ることができます。
- 親マテリアルを再コンパイルすることなくマテリアル インスタンスをカスタマイズできる。インスタンスに加えた変更は、すべてのビューポートですぐに反映されます。
- マテリアル インスタンス エディタ で パラメータ をアーティストに公開できます。アーティストは、複雑なノード グラフを編集することなく、マテリアルのバリエーションを迅速かつ直感的に作成できます。
詳細については、マテリアル インスタンス のラーニング トラックを参照してください。
マテリアル関数
マテリアル関数 を使用すると、マテリアル グラフの各部を再使用可能なアセットにパッケージ化できます。このアセットは共通ライブラリで共有し、他のマテリアルに簡単に取り入れることができます。
マテリアル関数の目的は、共通して使用するマテリアル ノードのネットワークに瞬時にアクセスできるようにして、マテリアルの作成を合理化することにあります。
たとえば、下の図にある Blend_Overlay 関数には、図の右側に示されているマテリアル表現式のネットワーク全体が含まれています。このノードのネットワークを繰り返し構築するのではなく、この関数を関数ライブラリからグラフに直接取り入れることができます。

Unreal Editor には、数十個にも及ぶ事前作成済みのマテリアル関数が含まれています。あらゆるマテリアル関数を編集して、その動作を変更したり、エディタ内で独自の関数を作成したりできます。
マテリアル関数 の作成と使用については、こちらを参照してください。
色とデータを操作する
Unreal Engine は、 RGBA カラー モデルを使用しています。つまり、あらゆるピクセルが、 赤、緑、青、およびアルファ チャンネルを表す 4 つの値によって定義されています。
たとえば、RGBA 値の (0.0, 0.0, 1.0, 1.0) は、純粋な青かつ完全に不透明なピクセルを記述したものです。マテリアル エディタで、このような 4 つの値のセットは float4 と呼ばれています。これは、4 つの 浮動小数点数 を格納するためです。
マテリアル グラフを使用して転送されるすべての情報は、浮動小数点数によって表現されますが、上記の例のように、値は常に 4 つのセットに格納されるわけではありません。マテリアル エディタのデータ タイプには 4 つの種類があります。
データ タイプ | 定義 | 例 |
---|---|---|
Float | 単一の浮動小数点値が格納されます。 | (1.0) |
Float2 | 2 個の浮動小数点値が格納されます。 | (1.5, 2.0) |
Float3 | 3 個の浮動小数点値が格納されます。 | (0.0, 1.0, 3.5) |
Float4 | 4 個の浮動小数点値が格納されます。 | (0.5, 1.0, 0.2, 0.9) |
マテリアル エディタのノードや入力ピンは、一般に特定の種類のデータを受け入れるように設計されています。たとえば、チャンネルごとの処理を実行する多くのマテリアル表現式は、その入力に正しいデータの種類が渡された場合にのみ有効です。
そのため、上記の 4 つの種類のデータについて理解すること、およびデータを操作し、グラフを通した情報フローを制御するために使用できるテクニックと戦略を把握することは非常に重要です。以下の 2 つのページのリンクは、Unreal Engine マテリアルの作成方法への入門に続く内容として強くお勧めします。