Unreal Fest 2016 Osaka に行ってきました。
興味深い講演ばかりであっという間でした。中でもヒストリアさんの講演でForeachLoopの処理に関数で定義したMakeArrayの検証が衝撃でした。
よく使ってるからというのもありますが、Pure型か通常型かで、速度に違いが出ます。
関数内でMakeArrayするのは、変数の初期化くらいしか思いついてなかったので、戻り値に配列を返してForeachLoopを回すときは注意が必要ですね。
ForeachLoopの中で、毎回Lengthノードが動いています。どちらかと言えばこれの方が気になったりします。JavaScriptかActionScriptの処理上げで昔誰かが書いていたような・・・。
var array = ["aaa","bbb","ccc","ddd","eee"];
for (i=0; i < array.length; i++) {
document.write(array[ i ]);
}
とループ中で、length を使うより
var array = ["aaa","bbb","ccc","ddd","eee"];
var al = array.length;
for (i=0; i < al; i++) {
document.write(array[ i ]);
}
実際のところは、プログラマではないので分りませんが、こういったハックぽいのはワクワクします。
前置きが長くなってしまいましたが、モノクロテクスチャの色付けです。
Photoshopだと、グラデーションマップを使えば簡単です。これをUE4のマテリアルでやってみます。

こんなテクスチャを用意してみました。24bitのTargaで保存してUE4でインポートします。
アルファチャンネルは無いので、フォーマットは G8 です。
テクスチャアセットが保存できたら、ここからマテリアルを作ります。
アセットアイコンの上で右クリックすると、コンテキストメニューが出てくるのでCreate Material を選びます。

マテリアル編集開始です。
早速エラーが出ています。これはテクスチャのフォーマットが気に入らないようです。

グレイスケールで保存してるようだけど、TextureSample ノードの設定が Colorになってるよ。というエラーです。設定を変えてあげると大人しくなります。

Linear Grayscaleに変更します。

色を付けるには Lerp ノードを使います。 Lキーを押しながらグラフをクリックすると簡単に呼び出せます。

テクスチャのカラーPINを Lerpノードの Alpha につなぎます。
次に色付け用のVector型の変数かパラメータを2つ用意します。それぞれLerpノードのAとBのPINにつなぎます。

はい出来上がりです。超簡単。
あとは、BaseColorかEmissive、UMGならFinalColor につないでやるだけです。
Photoshopほど柔軟ではありませんが、Lerpノードで2色のグラデーションマップができます。

実は艦これ改の背景を再現しようとしているので、もう少し手を入れていきます。

随分近づいてきました。

このマテリアルをインスタンスにすると、いろんなカラーバリエーションを増やすことが簡単にできます。

カラーをパラメータで持たせておくとブループリントから変更するのも面白いです。
例えば、UMGだとEventConstructでカラーを配列にセットしておきます。

関数やマクロなんかで引数をもらって変更するようにしておいて、適宜呼び出します。


ではでは
今回はこの辺で