マテリアルファンクションが便利なので、よく利用するやつを紹介します。
マテリアルファンクションは、何度も同じパターンのノードをつなぐのが面倒になってきたな~という気持ちになってきたら頃合いです。
ライブラリにできるので、コンテンツフォルダのどこかに作って置いておくだけで、いろんな場所(マテリアルのみ)で利用できます。
まずは作り方。(たぶん公式のドキュメントに載ってると思うけど・・・)
コンテンツブラウザで何もないところを右クリックして、メニューからMaterial Function を選択します。
コンテンツブラウザにアイコンが現れるので、適当な名前を付けますが、後でノードパレットから検索することになるので、探しやすい名前で。
ダブルクリックすると編集画面が開きます。Output Result という青いノードが置かれているので、そこに結果を渡すようにマテリアル用ノードを並べてゆきます。
UVの場所と範囲を指定をするやつです。ここまでは普通のマテリアル式です。
いつもはここにパラメータノードをつなぐのですが、
ここにマテリアルファンクション専用のノードをつなぎます。
ファンクションというからには関数なので、当然引数を受け取ることができます。
右クリックしてノードパレットの検索フォームに input と入力すると出てきます。
まずは FunctionInput というノードがあるので取り出します。
デフォルトで Vector3型(Float型が3つ合わさった状態)なので、ここはScalar型に変更します。ノードをフォーカスした状態で、Detailsタブの中にあるInput Typeを変更します。
同じのを4つ用意します。最終的に下のようになります。
出来上がりです。仕上げに どこからでも呼び出せるようにライブラリにします。
グラフの何もないとこをクリックすると、Detailsタブの内容が下のようになります。
Expose to Library にチェックを付ければOK。
コンパイルして保存します。
適当なマテリアルを編集して確認します。
右クリックして、作ったマテリアルファンクションを検索してひっぱり出します。
UVSetParam という名前にしていました。
PINの並びが気になったら修正できます。
再びマテリアルファンクションを編集して、各FunctionInputノードのDetailsタブから、Sort Priority という項目を探して数値を入力します。
数値の大きい方が下に並びます。
コンパイルして保存すると下のように変化しています。
PINの色がグレーなのは、デフォルトの値がセットされているので、何もつながなくて大丈夫という意味です。あとはいつも通りにつないで使います。
例えばこんな感じで。
UVを切り出すためのTextureCoordinateからAppendVectorまでの部分がスッキリ!
ついでにもう一つ便利でよく使うやつを。
サインカーブを調整して返してくれるマテリアルファンクションです。
サインカーブなので、リニアと違い折り返しが緩やかです。点滅とかに便利。
Timeノードをつなぐことで動作します。
サインカーブは基本的に -1.0 ~ 1.0 の範囲で変化するので、これを 0.0~1.0 に変えているのが、 Scale = 0.5 と Offset = 0.5 です。Speedは 速いなと感じたら 1.0以下に。
もっと速く、なら 1.0以上の値を渡せばOK。
マテリアルファンクションは秘伝のタレのように、育てていけば効率アップ間違いないです。
一定の値をファンクション内に入れてしまうことで数値のブレも防げます。
開発規模が大きくなっても制作メンバー間で共有できれば、調整作業がラクになります。点滅パターンなんかは作る人が違っても問題なしです。
なんかいいことだらけですが、
デメリットがあるとすれば、経験の浅いスタッフを甘やかしてしまうこと、かな。