みつまめ杏仁

アンリアルエンジン(UE4)でGUIを作るためにゴニョゴニョしてます。UIデザイナーの皆様の助けになれば幸いです。

UE4のマテリアルファンクションっていいな

マテリアルファンクションが便利なので、よく利用するやつを紹介します。

マテリアルファンクションは、何度も同じパターンのノードをつなぐのが面倒になってきたな~という気持ちになってきたら頃合いです。

ライブラリにできるので、コンテンツフォルダのどこかに作って置いておくだけで、いろんな場所(マテリアルのみ)で利用できます。

 

まずは作り方。(たぶん公式のドキュメントに載ってると思うけど・・・)

コンテンツブラウザで何もないところを右クリックして、メニューからMaterial Function を選択します。

f:id:hiyokosabrey:20160315223455p:plain

コンテンツブラウザにアイコンが現れるので、適当な名前を付けますが、後でノードパレットから検索することになるので、探しやすい名前で。

 

ダブルクリックすると編集画面が開きます。Output Result という青いノードが置かれているので、そこに結果を渡すようにマテリアル用ノードを並べてゆきます。

f:id:hiyokosabrey:20160315224108p:plain

UVの場所と範囲を指定をするやつです。ここまでは普通のマテリアル式です。

いつもはここにパラメータノードをつなぐのですが、

f:id:hiyokosabrey:20160316220521p:plain

ここにマテリアルファンクション専用のノードをつなぎます。

ファンクションというからには関数なので、当然引数を受け取ることができます。

右クリックしてノードパレットの検索フォームに input と入力すると出てきます。

f:id:hiyokosabrey:20160315224638p:plain

まずは FunctionInput というノードがあるので取り出します。

f:id:hiyokosabrey:20160315224813p:plain

デフォルトで Vector3型(Float型が3つ合わさった状態)なので、ここはScalar型に変更します。ノードをフォーカスした状態で、Detailsタブの中にあるInput Typeを変更します。

f:id:hiyokosabrey:20160316214534p:plain

同じのを4つ用意します。最終的に下のようになります。

f:id:hiyokosabrey:20160316215020p:plain

出来上がりです。仕上げに どこからでも呼び出せるようにライブラリにします。

グラフの何もないとこをクリックすると、Detailsタブの内容が下のようになります。

f:id:hiyokosabrey:20160316215449p:plain

Expose to Library にチェックを付ければOK。

コンパイルして保存します。

 

適当なマテリアルを編集して確認します。

右クリックして、作ったマテリアルファンクションを検索してひっぱり出します。

UVSetParam という名前にしていました。

f:id:hiyokosabrey:20160316222350p:plain

PINの並びが気になったら修正できます。

再びマテリアルファンクションを編集して、各FunctionInputノードのDetailsタブから、Sort Priority という項目を探して数値を入力します。

f:id:hiyokosabrey:20160316222243p:plain

数値の大きい方が下に並びます。

コンパイルして保存すると下のように変化しています。

f:id:hiyokosabrey:20160316222302p:plain

 PINの色がグレーなのは、デフォルトの値がセットされているので、何もつながなくて大丈夫という意味です。あとはいつも通りにつないで使います。

例えばこんな感じで。

f:id:hiyokosabrey:20160316224841p:plain

UVを切り出すためのTextureCoordinateからAppendVectorまでの部分がスッキリ!

 

ついでにもう一つ便利でよく使うやつを。

f:id:hiyokosabrey:20160316230704p:plain

サインカーブを調整して返してくれるマテリアルファンクションです。

サインカーブなので、リニアと違い折り返しが緩やかです。点滅とかに便利。

Timeノードをつなぐことで動作します。

f:id:hiyokosabrey:20160316231249p:plain

サインカーブは基本的に -1.0 ~ 1.0 の範囲で変化するので、これを 0.0~1.0 に変えているのが、 Scale = 0.5 と Offset = 0.5 です。Speedは 速いなと感じたら 1.0以下に。

もっと速く、なら 1.0以上の値を渡せばOK。

 

マテリアルファンクションは秘伝のタレのように、育てていけば効率アップ間違いないです。

一定の値をファンクション内に入れてしまうことで数値のブレも防げます。

開発規模が大きくなっても制作メンバー間で共有できれば、調整作業がラクになります。点滅パターンなんかは作る人が違っても問題なしです。

なんかいいことだらけですが、

デメリットがあるとすれば、経験の浅いスタッフを甘やかしてしまうこと、かな。