マテリアルの基本概念

Unreal Engine におけるマテリアルの入門書です。

Choose your operating system:

Windows

macOS

Linux

Unreal Engine では、マテリアル によってシーン内にあるオブジェクトのサーフェス プロパティを定義します。広義においては、マテリアルを、メッシュの外観を制御するメッシュに適用される「ペイント」と捉えることができます。

具体的には、マテリアルによって、シーン内でどのようにサーフェスとライトがインタラクトするかを Unreal Engine に伝達します。マテリアルでは、色や反射、ラフネス、透明度などを含む、サーフェスのあらゆる側面を定義します。

シェーディング パイプラインの概要

シェーダーは、レンダリング パイプラインにおいては、それぞれの頂点もしくはピクセルのレンダリング方法を定義するプログラムです。Unreal Engine では、シェーダーを ハイレベル シェーディング言語 (HLSL) で記述します。シェーダーのコードは、GPU ハードウェアで実行可能なアセンブリ言語指示のリストに変換されます。このようにして、最終的なピクセル カラーがディスプレイに出力されます。

Unreal Editor では、プロジェクトで使用するシェーダーを HLSL コードで記述する必要はありません。代わりに、マテリアル エディタ と呼ばれるビジュアル スクリプティング インターフェース内で、マテリアル と呼ばれるアセットを作成します。

マテリアル

マテリアルは、シェーダー グラフ内で マテリアル表現式 と呼ばれるノードを複数組み合わせて、それぞれの結果をメイン マテリアル ノードに渡すことで構築します。

Simple walnut floor Material

バックグラウンドでは、これらのノード グラフが自動的に HLSL に変換されます。ユーザーは、希望する場合を除き、このコードを表示する必要はありません。これにより、Unreal ではマテリアルの作成をより直感的に、容易に行うことができます。

Material graph and HLSL code

マテリアルの HLSL コードを表示するには、マテリアル エディタで [Window] > [Shader Code] > [HLSL Code] の順に選択します。HLSL コードは読み取り専用です。ご注意ください。コンパイルされた HLSL シェーダー コードを Unreal Editor 内で直接編集することはできません。

マテリアル ワークフローの概要

このセクションでは、Unreal Engine におけるマテリアルの作成手順に関する大まかな概要を説明します。

これはステップごとの詳細な手順を示すものではなく、その概念を大まかに示す概要であることに留意してください。マテリアル エディタの使用に関する詳細な情報については、「マテリアル エディタのユーザー ガイド」の各ページを参照してください。

新しいマテリアルを作成する

Unreal では、マテリアルは、スタティック メッシュやテクスチャ、ブループリントと同様にアセット クラスです。新しいマテリアルはコンテンツ ブラウザから作成できます。

  1. コンテンツ ブラウザ 内を右クリックします。

  2. コンテキスト メニューの [Create Basic Asset (基本アセットを作成)] セクションで [Material (マテリアル)] を選択します。

    Create Material

  3. コンテンツ ブラウザ内にマテリアルが作成されます。このマテリアルに固有のわかりやすい名前を付けます。

    Material thumbnail

マテリアル アセットを ダブルクリック して、マテリアルを編集します。下図のように、マテリアル エディタ のウィンドウが開きます。

画像をクリックして拡大表示。

黄色で囲まれた領域が マテリアル グラフ です。マテリアルの作成に関するほとんどの作業をここで行います。新しいマテリアルのマテリアル グラフには、メイン マテリアル ノード のみが含まれています。

マテリアル エディタの UI の詳細については、こちらを参照してください

マテリアルのプロパティ

メイン マテリアル ノード を選択すると、[Details (詳細)] パネル にそのマテリアルのグローバルなプロパティと設定が表示されます。

次の図で示されている 3 つの設定はマテリアルの基礎を築き、その使用を定義するものであるため、マテリアル作成の初期段階で特に重要になります。

Detail properties

  • Material Domain (マテリアル ドメイン) – プロジェクトでのマテリアルの使用目的を定義します。マテリアル ドメインには、サーフェス、ユーザー インターフェース、ポストプロセス マテリアルなどがあります。

  • Blend Mode (ブレンド モード) – マテリアルとその背後にあるピクセルとのブレンド方法を定義します。たとえば、[Opaque (不透明)] のシェーダーはその背後のオブジェクトを完全にオクルードし、[Translucent (透過)] および [Additive (加算)] のシェーダーでは、バックグラウンドとある程度ブレンドします。

  • Shading Model (シェーディング モデル) – マテリアルとライトとのインタラクションを定義します。多くの場合、マテリアルでは [Default Lit (デフォルト ライティング)] を使用しますが、Unreal Engine には 髪 (ヘア)クロススキン などの特定の要素向けのシェーディング モデルが用意されており、コンテキスト特有の入力を通じて、これらのタイプのサーフェスを作成しやすくなっています。

これらのプロパティでは、メイン マテリアル ノードで有効になる入力を定義します。上の図では [Opacity (オパシティ)] がグレーアウトされていますが、これは [Opaque] ブレンド モードでは透過性がサポートされていないためです。

[Translucent] ブレンド モード を選択した場合は [Opacity] 入力が使用可能になり、代わりに他のブレンド モードでは有効であったいくつかの入力がグレーアウトされます。

Translucent blend mode

新しいマテリアルの作成時には、まず最初にこれらの 3 つのプロパティを設定することをお勧めします。

[Details] パネルに含まれるその他のプロパティの詳細については、「マテリアルのプロパティ」ドキュメントを参照してください。

マテリアル表現式ノード

マテリアルのプロパティがその基礎だとすると、マテリアル表現式 はマテリアルを構成する要素であると言えます。

Material Expression nodes

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

あるノードの 出力ピン からドラッグして、別のノードの 入力ピン につなげることで、データを複数のマテリアル表現式の間で渡します。

Connecting Nodes

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

Simple Material

これは完成したマテリアルですが、マテリアル グラフ内で演算やロジックを使ってそのサーフェスをさらに調整することも可能です。マテリアル表現式を組み合わせて、マテリアル内で特定の結果を達成する方法を理解することは、Unreal におけるマテリアル作成の基礎と言えます。

マテリアル表現式をグラフ内に配置する方法については、こちらを参照してください

Unreal Engine には多数のマテリアル表現式ノードが含まれています。そのほとんどにはマウスオーバーで表示されるヒントが備わっていますが、各ノードの使用については、「マテリアル表現式のリファレンス」ページを参照してください。

メイン マテリアル ノード

マテリアル グラフ内でデータは左から右に流れ、メイン マテリアル ノード がすべてのマテリアル ネットワークのエンドポイントとなります。

メイン マテリアル ノードには、マテリアルにコンパイルされる情報を定義する最終的な入力ピンが含まれています。グラフ内のマテリアル表現式は、メイン マテリアル ノードにつながるチェーンの一部でない場合はマテリアルに影響を与えません。

上のビデオでは、テクスチャ サンプルがメイン マテリアル ノードの対応する入力に接続されている場合のみに、マテリアル プレビューが更新されることに注意してください。

メイン マテリアル ノードのすべての入力は、マテリアル全体の特定の性質をそれぞれ定義しています。次の 2 つのページでは、それぞれの入力の使用目的について詳しく説明しています。

  1. 物理ベースのマテリアル」 – Unreal の物理ベースのマテリアルのワークフローに関する原則とベストプラクティスについて説明します。

  2. マテリアル入力」 – メイン マテリアル ノードの各入力の動作について説明します。

コンパイルと適用

マテリアルに対する変更をレベル内に反映させるには、マテリアルをコンパイルする必要があります。マテリアルをコンパイルするには、マテリアル エディタ上部のツールバーにある [Apply (適用)] または [Save (保存)] ボタンをクリックします。

Compile and Apply

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

Drag Material onto Actor

通常、コンパイルは数秒で完了しますが、複雑なマテリアルの場合は数分を要する場合があります。マテリアルの開発時やテスト時にこれがボトルネックとなる可能性がありますが、コンパイルによる遅延を最小限に抑えるための方法もいくつかあります。

マテリアルのインスタンス化 は、イテレーション時間を向上し、作業時における長いコンパイル時間による遅延を回避するための一つの方法です。インスタンス化 については以下を参照してください。

マテリアル エディタのユーザー ガイド

これまで紹介した手順は、Unreal Engine における基本的なマテリアルのワークフローを説明するものです。これらの各手順は、マテリアル エディタのユーザー ガイドでより詳しく文書化されています。

マテリアルの作成を始める前に、以下に示すそれぞれのページを参照することをお勧めします。

  1. マテリアル エディタのユーザー インターフェース

  2. マテリアル表現式と関数を配置する

  3. メイン マテリアル ノードを使用する

  4. マテリアルをプレビューして適用する

  5. マテリアル グラフを整理する

ワークフローにおける効率性の概念

作成したマテリアルを一度きりしか使わないことは非常に稀です。同じようなアセットには同じようなマテリアルが必要になることが多いため、プロジェクトのすべてのアクタに対してシェーダーを新しく作成することは非効率的です。

マテリアル インスタンスマテリアル関数 によってマテリアルのカスタマイズと再使用が容易になり、イテレーションをより迅速に行い、重複する作業を回避することができます。

マテリアル インスタンスとパラメータ化

マテリアル インスタンスでは、単一の親マテリアルから複数のバリエーション、つまりインスタンスをすばやく作成できます。

関連するアセットのグループに、基本的には同じマテリアルでありながらも、表面上の性質が異なるものが必要な場合にインスタンスが使用されます。たとえば、いくつかの色のバリエーションがある家具などがその例です。

Chair Material instances

マテリアルのインスタンス化では、まず家具セットの親マテリアルを一つ作成し、上の図の椅子のように、それぞれの色のマテリアル インスタンスを作成します。

インスタンスを使用することで、次のような利点を得ることができます。

  • 親マテリアルを再コンパイルすることなくマテリアル インスタンスをカスタマイズできる。インスタンスに加えた変更は、すべてのビューポートですぐに反映されます。

  • マテリアル インスタンス エディタパラメータ をアーティストに公開できます。アーティストは、複雑なノード グラフを編集することなく、マテリアルのバリエーションを迅速かつ直感的に作成できます。

詳細については、マテリアル インスタンス のラーニング トラックを参照してください。

マテリアル関数

マテリアル関数 を使用すると、マテリアル グラフの各部を再使用可能なアセットにパッケージ化できます。このアセットは共通ライブラリで共有し、他のマテリアルに簡単に取り入れることができます。

マテリアル関数の目的は、共通して使用するマテリアル ノードのネットワークに瞬時にアクセスできるようにして、マテリアルの作成を合理化することにあります。

たとえば、下の図にある Blend_Overlay 関数には、図の右側に示されているマテリアル表現式のネットワーク全体が含まれています。このノードのネットワークを繰り返し構築するのではなく、この関数を関数ライブラリからグラフに直接取り入れることができます。

Material Function example

Unreal Editor には、数十個にも及ぶ事前作成済みのマテリアル関数が含まれています。あらゆるマテリアル関数を編集して、その動作を変更したり、エディタ内で独自の関数を作成したりできます。

マテリアル関数 の作成と使用に関するドキュメントを参照してください。