マテリアル関数の概要

マテリアル関数の仕組みの概要と使用に関するいくつかの重要な概念

マテリアル関数 を使用すると、マテリアル グラフの各部を再使用可能なアセットにパッケージ化できます。このアセットはライブラリで共有し、他のマテリアルに簡単に取り入れることができます。マテリアル関数の目的は、共通して使用するマテリアル ノードのネットワークに瞬時にアクセスできるようにして、マテリアルの作成を合理化することにあります。

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

Material Function example

関数は通常のマテリアルと同様にマテリアル エディタで編集しますが、使用できるノードに関していくつかの制限事項があります。関数を正しく使用するとマテリアルの重複を減らすことができ、さらにはアーティストによるメンテナンス労力の削減にもつながります。マテリアル関数では重複する各表現式を同期することで、修正時にこれらの一つが欠落することで生じる不可避のバグを回避します。

マテリアル関数は コンテンツ ブラウザ でアセット クラスとして扱われます。マテリアル関数のグラフはマテリアルと似ていますが、大きく異なる点が一つあります。マテリアル関数には、メイン マテリアル ノードの代わりに FunctionOutput ノードが備わっています。これらは、マテリアル内で使用された場合、最終的なマテリアル関数ノードの出力ピンとして表示されます。

マテリアル関数を電子機器プロジェクトの筐体と考えると理解しやすいかもしれません。必要に応じて入力と出力を好きなだけ追加することができます。これらの入力と出力間のマテリアル表現式ネットワークがこの関数の中核を担います。 次の例では 2 つのレイヤーを取り上げて、これらを Photoshop screen blend のようにまとめてブレンドしています。この関数ではアーティストからのディテールを抽象化するため、アーティストはスクリーン ブレンド操作に使用するスクリーン ブレンドの演算について理解する必要はありません。

Blend Screen Function

マテリアル関数の入力ノード (1) と出力ノード (2)。

上記の図でわかるように、入力と出力間の処理は標準的なマテリアル表現式ノードのネットワークを通じてデベロッパーが自由に設定できます。マテリアル関数をマテリアルに加えた場合、入力と出力を含むマテリアル関数呼び出しノードのみが表示され、グラフの残りの部分は関数内に隠されます。

Blend Screen example

マテリアル関数ライブラリ

マテリアル関数が完成したら マテリアル関数ライブラリ に公開して、マテリアルの作成時に簡単にアクセスできるようにすることができます。マテリアル関数ライブラリは、マテリアル エディタの右側にあるパレット内に表示されます。パレットには、利用可能なマテリアル関数がカテゴリ分けされてリスト表示されており、フィルタを適用することも可能です。このリストにはロードされてる関数が含まれますが、コンテンツ ブラウザのデータベース に含まれるあらゆるデフォルト マテリアル関数も含まれます。

Material Function Library

これらのエントリ上にマウス カーソルを合わせると、その説明がツールヒントに表示されます。もしくは、マテリアルにドラッグアンドドロップすることができます。

マテリアル関数をマテリアル関数ライブラリに含めるには、マテリアル関数の Expose to Library プロパティをオンにする必要があります。マテリアル関数エディタ内で、グラフ内の空白のスペースをクリックすることですべてのノードを選択解除し、マテリアル関数の基本プロパティを表示します。[Expose to Library] オプションは [Details (詳細)] パネル内にあります。

マテリアル関数ライブラリにデフォルトで含まれているすべての関数については、「マテリアル関数のリファレンス」を参照してください。

関数関連のノード

以下は、マテリアル関数に関連するマテリアル表現式ノードとその説明です。

  • MaterialFunctionCall - 別のマテリアルや関数からの外部関数の使用を許可します。外部関数の入力と出力の各ノードは、関数呼び出しノードの入力と出力になります。

  • FunctionInput - 一つのマテリアル関数内のみに配置でき、その関数の入力ピンの一つを定義します。

  • FunctionOutput - 一つのマテリアル関数内のみに配置でき、その関数の出力ピンの一つを定義します。

  • TextureObject - 関数に含まれるテクスチャ関数入力にデフォルトのテクスチャを提供する場合に便利です。このノードはテクスチャを実際にサンプリングしないので、TextureSample ノードを組み合わせて使用する必要があります。

  • TextureObjectParameter - テクスチャ パラメータを定義し、テクスチャ入力を含む関数を呼び出すマテリアルに用いるテクスチャ オブジェクトを出力します。このノードはテクスチャを実際にサンプリングしないので、TextureSample ノードを組み合わせて使用する必要があります。

  • StaticSwitch - 入力値に基づいて、2 入力間でのコンパイル時間の選択を実行します。

  • StaticBool - 関数に含まれるスタティック ブール関数にデフォルトのブール値を提供する場合に便利です。このノードでは実際の切り替えは行われないため、StaticSwitch ノードを組み合わせて使用する必要があります。

  • StaticBoolParameter - スタティック ブール パラメータを定義し、スタティック ブール入力値を含む関数を呼び出すマテリアルに用いるスタティック ブール値を出力します。このノードでは実際の切り替えは行われないため、StaticSwitch ノードを組み合わせて使用する必要があります。

入力と出力

マテリアル関数はカプセル化されたノードのネットワークであるため、データの入力/出力フローについてはデベロッパーが確認する必要があります。これは、FunctionInputFunctionOutput ノードを使って処理できます。これらのノードについて十分に理解することは、マテリアル関数を使用する上で重要です。

マテリアル関数内では、FunctionInput と FunctionOutput の各ノードが次のように表示されます。

Input and Output nodes

マテリアル内でマテリアル関数を使用すると、FunctionInput と FunctionOutput の各ノードが、マテリアル関数ノードの入力ピンおよび出力ピンとして表示されます。

Input and output pins on Material Function Call

FunctionInput ノード

先述のとおり、FunctionInput ノードはデータをマテリアル関数に入力するためのゲートウェイとして機能します。関数には、マテリアル関数呼び出しノードの各入力ピンに対応するこのような入力ノードがいくつも含まれる場合があります。

FunctionInput node

FunctionInput ノードには次のプロパティとデータ ピンがあります。

アイテム

説明

プロパティ

Input Name

入力の名前です。マテリアルで使用した場合は、マテリアル関数の出力ピンとして表示されます。

Description

入力の説明です。マテリアル関数ノード上で対応する入力ピンにマウス カーソルを合わせると、この説明がツールヒントとして表示されます。

Input Type

入力で受け入れるデータのタイプを定義します。後述の「入力タイプ」セクションを参照してください。

Preview Value

テスト方法の一つ、もしくは構築過程中における関数の動作を視覚化する方法として機能します。ここに入力された値は、関数外からの入力を通じて渡されたもののように扱われます。

Use Preview Value as Default

プレビュー値 (Preview Value) に設定されたデータをデフォルト値として使用することを許可するチェックボックスです。この値に関して、関数への入力値の提供をユーザーに強制したくない場合に便利です。

Sort Priority

マテリアル関数ノード上で入力ピンが表示される順序を制御する数値です。優先度が低いものから高いものの順序になります。

入力ピン

Preview

この入力に渡されるデータは Preview Value プロパティよりも優先されます。その関連プロパティと同様に、構築時における関数のテストや、デフォルト値を設定する際に便利です。

出力ピン

(ラベルなし)

関数で処理される受信データの出力を提供します。

FunctionOutput ノード

FunctionOutput ノードでは、マテリアル関数内のデータを、マテリアルでのさらなる活用に向けて関数外に出力するための方法を提供します。つまり、このノードからはマテリアル関数の最終的な結果が出力されます。FunctionInput ノードと同様に、関数には任意の数の出力ノード (さらに任意の数の潜在的な出力ピン) を含めることができます。

FunctionOutput node

FunctionOutput ノードを選択すると、[Details] パネルから次のプロパティにアクセスできます。

アイテム

説明

マテリアル表現式関数の出力

Output Name

出力の名前です。マテリアルで使用した場合は、マテリアル関数の出力ピンとして表示されます。

Description

出力の説明です。マテリアル関数ノード上で対応する出力ピンにマウス カーソルを合わせると、この説明がツールヒントとして表示されます。

マテリアル表現式

Sort Priority

マテリアル関数ノード上で出力ピンが表示される順序を制御する数値です。優先度が低いものから高いものの順序になります。

Description

この説明フィールドでは、ノードのコメント バブルに表示するテキストを定義します。このテキストは、マテリアル関数エディタ のみに表示されます。

出力ピン

(ラベルなし)

関数で処理される受信データの出力を提供します。

入力タイプ

入力には、接続される表現式で必要な特定のタイプがそれぞれあります。入力タイプを設定するには、マテリアル関数エディタで FunctionInput ノードを選択し、[Input Type] ドロップダウンを使って目的のオプションを選択します。

Function input types

マテリアル内の呼び出しでは、入力タイプが出力コネクタの隣に省略形で表示されます。次の例では両方の入力が Vector3 であるため、それぞれ「V3」と表示されています。マテリアル内で使用する場合、入力に接続されているものはすべて適切な入力タイプに変換可能なものである 必要があります。そうでない場合はエラーが発生します。

Color burn input types

次は、利用可能な入力タイプとその省略形です。

入力タイプ

省略形

Scalar

S

Vector2

V2

Vector3

V3

Vector4

V4

Texture2D

T2D

TextureCube

TCube

Texture2DArray

T2dArr

VolumeTexture

TVol

StaticBool

B

MaterialAttributes

MA

TextureExternal

TExt

共通プロパティ

マテリアル関数を編集する際は、すべてのノードを選択解除するか、マテリアル グラフの背景をクリックすることで、[Details] パネルで関数の基本プロパティを表示できます。

アイテム

説明

プロパティ

Description

ユーザーがパレット内のマテリアル関数、またはマテリアル エディタ内の関数呼び出しノードの本体部分にマウス カーソルを合わせた場合にツールヒントとして表示される説明です。

Expose to Library

このチェックボックスがオンの場合は、マテリアル関数がマテリアル エディタのパレット内にあるマテリアル関数のリストに表示され、マテリアルに追加できるようになります。新しい関数を表示するために、エディタの再起動が必要な場合があります。

Library Categories

この配列には、この関数が表示される [Material Functions (マテリアル関数)] タブに含まれるすべてのカテゴリが保持されます。

Previewing (プレビュー)

マテリアル関数の編集時には、プレビュー中のノードがプレビュー ビューポートに表示されます。いずれかのノードを 右クリック して [Start Previewing Node (ノードのプレビューを開始)] を選択すると、その時点までのマテリアル ネットワークの結果をプレビューできます。

Start Previewing Node

関数出力やマテリアル関数の最終的な結果をプレビューしたい場合がほとんどであるため、デフォルトでマテリアル関数出力ノードがプレビューされます。

Previewing Output

関数入力のプレビュー

関数入力ノードには、プレビュー値を指定するためのオプションがいくつか用意されています。これは、マテリアル内でアーティストが実際にどのような値を使用するかわからないためです。それぞれの入力には、浮動小数入力タイプの定数の表示に使用できるビルトインの プレビュー値 が設定されています。また、関数の入力には「'Preview'」コネクタがあり、これを使ってビルトインの値を入力タイプに一致した値にオーバーライドすることができます。次の例では、テクスチャ サンプルを使って 2 つの Vector3 入力のプレビュー値を提供しています。

Preview texture sample inputs

この入力の [Details] パネルには、[Use Preview Value As Default (プレビュー値をデフォルトとして使用)] オプションがあることに留意してください。これを有効にすると、マテリアル内で関数が呼び出された場合に常にプレビュー値が使用され、この入力には何も接続されません。プレビュー値はフォールバックとして機能し、入力に何も接続されていない場合のコンパイル エラーを回避します。入力は任意の入力となるため、グレーで表示されます。

パラメータ

マテリアル関数では、通常のマテリアルと同様に パラメータ を使用できます。これらのパラメータは、使用するあらゆるマテリアルに直接渡すことができます。テクスチャ パラメータに関しては使用手順が多少異なります。

テクスチャ パラメータ

マテリアル関数内でテクスチャ パラメータを使用するには、FunctionInput ノードを作成してそのデータ タイプを Texture2D に変更し、Texture Sample ノードのテクスチャ オブジェクト オーバーライド ピンに接続します。

Texture Parameter within function

このマテリアル関数をマテリアル内で使用する際は、TextureObjectParameter ノードを配置してマテリアル関数の Texture2D 入力ピンに接続します。

Texture object parameter

スタティック ブール パラメータ

スタティック スイッチ パラメータと同じように、FunctionInput を作成してその入力タイプを StaticBool に変更し、StaticSwitch ノードに接続します。

Static Switch function

この関数を使用するマテリアル内に StaticBoolParameter ノードを配置し、スタティック ブールを受け入れる入力 (この例では Enable Tiling) に接続します。

Static Bool Parameter

編成

マテリアル関数はそのデザイン上、関数の作成にかかわっていない多くのアーティストやチーム メンバーによって使用されます。そのため、関数の機能や、入力/出力に必要な値に関する有用な情報を提供することが重要になります。このため、関数にはその名前や入力/出力名の上部にいくつかのテキスト フィールドが用意されています。

関数の説明

マテリアル関数には [Description (説明)] フィールドがあり、ここに関数の機能を入力できます。説明を入力するには、まずマテリアル関数の編集時にマテリアル グラフ内の空白のエリアをクリックします。これによって関数のプロパティが [Details] パネルに表示され、フィールド内に説明を入力できるようになります。

Material Function description

説明のテキストは、マテリアル グラフ内でこのマテリアル関数呼び出しノードにマウス カーソルを合わせた際にツールヒントとして表示されます。

Custom fresnel tooltip

入力と出力の説明

入力ピンと出力ピンの名前と説明をマテリアル関数に加えることもできます。マテリアル関数を編集する際に、マテリアル グラフ内で入力または出力ノードを選択します。[Details] パネル内で [Input Name (入力名)][Description] フィールドに情報をそれぞれ入力します。

Input descriptions

このマテリアル関数をマテリアルで使用すると、設定した各入力ピンの名前が表示されます。入力ピンの説明は、マウス カーソルを入力に合わせた際にツールヒントとして表示されます。

Input tooltip

マテリアル関数の編集時には、マテリアル グラフの編成とドキュメント化に関するすべてのツールが利用可能になります。「マテリアル グラフを整理する」を参照してください。

伝播

マテリアル関数の編集後に [Save (保存)] ボタンをクリックして変更を再コンパイルして適用すると、ロードされたマテリアルやこのマテリアル関数を参照する関数に、更新されたバージョンが伝播されます。この関数を参照するロード前のマテリアルは次回のロード時に更新されます。

関数から入力または出力が削除されて、この変更が反映されると、この関数を使用するマテリアル内にある削除されたコネクタへのリンクが破損します。伝播はやり直すことができないため、マテリアル関数を再コンパイルする前にこの点を考慮することが重要です。関数を使用するマテリアルが多いと破損の可能性も高くなるため、注意が必要です。

関数を使用するすべてのロード済みマテリアルは、変更が伝播されると「ダーティ」としてマークされます。これを使って、ロード時間の増加を抑えるために、どのパッケージが再保存可能であるかを確認できます。関数を使用するすべてのロード済みマテリアルを確認するには、コンテンツ ブラウザ 内を 右クリック して、[Find Materials Using This (これを使用してマテリアルを検索)] を選択します。

Find Materials using this function

関数のネスティング

マテリアル関数を他の関数内でネスト化し、これらを任意でつなぐことができます。ただし、結果的に循環依存関係が作成される場合はマテリアル関数をネスト化することはできません。

コンパイル エラー

マテリアル関数内にエラーが存在する場合は、マテリアルのコンパイル時にコンパイル エラーを表示するダイアログが生成されます。また、適切にコンパイルされなかったマテリアル関数の上部には、赤色のエラー メッセージが表示されます。エラー メッセージにマウス カーソルを合わせると、コンパイル エラーの内容を示すツールヒントが表示されます。次の例では、マテリアル関数がいずれかの入力データを受け取っていないため、コンパイルに失敗しています。

Compilation error message

上記のエラーは、入力のプレビュー値を設定して、各入力の [Use Preview Value as Default] プロパティを有効にすることで回避できます。ただし、接続されていない入力があることについてエラー メッセージなどの明確な通知はないため、これは「諸刃の剣」とも言える方法であることに注意してください。 Use preview value

デフォルトのマテリアル関数

Unreal Engine には、数十にも及ぶ事前作成されたデフォルトのマテリアル関数が含まれています。これらには、マテリアル エディタのパレット か右クリックの検索メニューからアクセスできます。

デフォルトのマテリアル関数を編集する際は、コンテンツ ブラウザ「Engine」 > 「Content」 > 「Functions」 フォルダから目的のアセットを見つけます。

デフォルトのマテリアル関数に変更を加えて保存すると、その変更は関数のすべてのインスタンスに反映されます。このため、変更を加える前に、当該の関数のコピーを複製しておくことを強くお勧めします。

Unreal Engine に含まれるデフォルトのマテリアル関数の詳細については、「マテリアル関数のリファレンス」を参照してください。

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