【UE】マテリアル関数の作り方
プログラマーの尾関です。
今回はマテリアルの処理を共通化するときに便利な「マテリアル関数」の作り方について説明をしたいと思います。
- 動作確認バージョン: Unreal Engine 5.5.4
マテリアル関数とは
マテリアル関数とは、マテリアル内で使うノードの組み合わせを部品化したものです。
プログラムで言う「共通処理」「便利関数」のようなもので、再利用可能な処理をまとめることで特定の機能を簡単に使えたり、共通の処理を1つにまとめることができます。
マテリアル関数の使用例
マテリアル関数の具体的な使用例としては以下のものが挙げられます。
- 色の共通処理:全マテリアルで使う色補正やグラデーション
- グローバル設定:全マテリアルで共通のパラメータを使用する。(※通常は Material Parameter Collection で変更可能な共通パラメータとします)
- UV操作の共通化:複雑なUVスクロールや回転をまとめた便利関数
- 汎用ノイズ処理:ゲーム内で使用する複雑なノイズを共通化
またマテリアル関数として部品化しておくと、別のプロジェクトへの転用も容易となり効率的な開発を行うことができます。
マテリアル関数の作り方
Unreal Engine 5.5.4 の場合は、コンテンツブラウザから右クリックして「マテリアル > 高度 > マテリアル関数」から作成できます。

出力するパラメータを定義する
マテリアル関数は “Output Result” に接続したノードのデータ型がそのまま出力パラメータとなります。

例えば、”MakeMaterialAttributes” を Output Result に接続すると、マテリアル属性がそのまま出力できます。
他のマテリアルから参照できるようにする
他のマテリアルから参照するためには、何もないところをクリックして「詳細」タブから「Expose to Library」にチェックを入れます。

他で流用したいマテリアル関数が「MF_DistanceFog」という名前だったとします。

するとこの名前で、マテリアル関数を呼び出せるようになりました。

後はノードの出力を左ドラッグして、検索から「break」などと入力してパラメータを分割。

ベースカラーと乗算して合成してみました。

入力パラメータを設定する方法
マテリアル関数に入力パラメータを指定したい場合は、何もないところを右クリックして「input」で検索して「Functioninput」を選択。

Vector3の入力ノードが作成されました。

なおデータ型は、Inputノードを選択した状態で詳細タブの「Input Type」から指定できます。

また「Input Name」にわかりやすい名前を指定しておくと呼び出し側からわかりやすくなって良いと思います。

Outputノードの「Output Name」も同様にわかりやすい名前をつけておきましょう。

ということでベースカラーを赤で乗算するマテリアル関数が作れました。

呼び出し側も入力値と出力値がわかりやすくなって、使いやすくなったと思います。

複数の入力値と出力値を設定する方法
"複数の入力値" を受け取り、"複数の出力" を設定するには、それぞれ「Function Input」と「Function Output」を複数定義することで設定可能です。

実用性はまったくないマテリアル関数ですが、以下のノードを組んでみました。

呼び出し側でも2つのパラメータを入力して、2つの結果を受け取れるようになりました。

マテリアルパラメータコレクション (MPC) と組み合わせる
マテリアル関数で使用するパラメータを共通の値にして、マテリアル関数を利用するマテリアルすべてに反映させる場合は「マテリアルパラメータコレクション (MPC)」を使うと便利です。
MPCで定義した値をマテリアル関数で使うようにすると、MPCの値は Blueprint や C++ で変更なため、動的に複数のマテリアルのパラメータを変更することができます。

例えば以前紹介したマテリアルコレクションパラメータの「距離フォグ」をマテリアル関数に置き換えると以下のようになります。

おしまい
以上、マテリアル関数についての説明でした。
この記事がマテリアル関数を作るのに役立てれば幸いです。