使用ソフトウェア | バージョン | 備考 |
---|---|---|
Unreal Engine | 5.0.1 |
例えば次のようなマテリアルを作ろうと思ったらどうだろうか
上がツヤツヤでキラキラ。下はザラついてモヤっとしている。
一つのマテリアルの中にラフネスやスペキュラといった値を混同させたい場合は通常のマテリアル1個だけで作れなくもないが...
各ピンそれぞれにブレンドの計算が必要でノードが複雑になる。結果的にコントロールするのも難しくなる。
そこで登場するのが別々のマテリアル同士を直接まぜてしまおうという考え方だ。
※Blender
でいうところのシェーダーミックス
に似ている
本題に入る前に2つ知っておいてほしいことがある。
実はマテリアルのブレンドは昔から実装されてはいるのだが、今回紹介するのはUE4.14
(2016/11)から実装されている新しい実装方法。
この記事を書いている2022年から考えると古いじゃん!という声が聞こえてきそうだが、ちょっと難解なためか解説している記事が少なく、古いバージョンのやり方で覚えている方も多いかと思って記事を書いている。
古い方法は紹介しない。
この記事だけでもマテリアルのブレンドは実現可能だが、次の記事にてマテリアルレイヤーという一歩進んだ概念を使おうと思っている。
恐らくこの記事の内容が頭に入っていないとマテリアルレイヤーは使うことができないので先に理解してもらえたらと思う。
マテリアル同士をブレンドするための準備。
まずは普通のマテリアルを作って次の設定をする。
通常のマテリアルはアウトプットが次のようなノードになっている。
まずは、このマテリアルの詳細設定からUse Material Attributes
をオンにする。
するとマテリアルのアウトプットがシンプルなものになる。
アウトプットのピンが1個しかない!カラーとかラフネス、その他どうやって設定するの!
となるので、次のノードの出番である。
MakeMaterialAttributes
というノードを作る。
この画像を見て「今までアウトプットのノードにあったピンを別のノードに移しただけじゃん?」と思ったあなた。
全くもってそのとおりだ。
逆に考えれば今までアウトプットノードにしかなかったピンをMakeMaterialAttributes
で別ノードに分けることによって複数のマテリアルを1つのマテリアルの中に混在させることができるようになる
※上のノード(冒頭の例)では赤のカラーは使用していない。当然ではあるが赤のカラーを繋ぐと半分が赤になる。
つまり上で作った複数のMakeMaterialAttributes
混ぜ合わせてやればマテリアルのブレンドが完成するというシンプルなものだ。
そしてそのブレンドを担うノードがBlendMaterialAttributes
になる。
AとBにはMakeMaterialAttributes
を入れてやれば良い。
さてAlpha
とはなんだろうか。
冒頭の例では次のようなノードが入っている。
このノード自体は解説しないがAlpha
には次のようなカラーが入っている。
つまり白になっている部分が下のマテリアル、黒になっている部分が上のマテリアルになるというのがAlpha
だ。
これで冒頭のマテリアルの完成。
Alpha
に数値を直接入れると、単純に全体がブレンドされる。
ブレンドの基本解説は以上で終わり。
じゃぁこれいつ使うの?というと常に使うべきという代物ではないが....
例えば防具の革っぽい部分と金属っぽい部分をマスクで切り分けて一つのマテリアルアセットだけで別々の質感を表現するなんてことはよくありそう。
他にもメタルスライムと通常スライムが合体するときの交わり具合のアニメーション等、不思議な質感も難しく考えず作れそうだ。
今は目立った使い道がないが、この先必要になってくるノードを記しておく。
一度ブレンドされたMaterialAttributes
のピンから1個(または複数)取り出して上書きするノード。
例えば冒頭の例のあと色だけ緑に買えたい場合は次のノードを組む。
所見だと、これも1個しかピンがなくて意味がわからないかもしれないが「詳細」タブから設定する。
上の画面からAttribute Set Types
に要素を追加して
どの値を上書きするか選択できるので好きなものを選択。ここではBaseColor
だがRoughness
などももちろん選択できる。
ノードにピンが増えているので、あとは値を入れるだけで良い。
GetMaterialAttributes
を使えば1個(または複数)のピンの値を取り出せる。
基本の設定方法はSetと同じ。
上の例では1-x
を使用して色を反転する処理を追加する例。
結果は
青の反対である黄色の球となった。
一度MakeMaterialAttributes
で束ねてしまった値をBreakMaterialAttributes
すれば全部のピンを展開してしまうことができる。
このノードはAttributes
を出力しているノードから引っ張ってbreak
で出る。
結局このノードはGetMaterialAttributes
で全パラメータを取り出したのと等しいが、こちらのほうが使いやすいケースがあるかもしれないので覚えておく。
このように、ミックスした後でさらに別の値で上書きしたり、処理を入れたりと複雑なことが簡単にできるようになるはずだ。
曇ったマテリアルがブレンドされるので、反射が消えるのが分かる。
※このノードならTextureにノイズ画像を適当に入れれば円状になる
Blender
だとシェーダーミックスを使う例はよく見かけるが、UEだと使っている人があまりいない印象がある。
ひとまずこれだけ覚えていれば複数のマテリアルを混ぜて使ったり、混ぜる途中で処理をいれて複雑な変化を作るこどもできるかと思う。
ここで紹介したノードはすべて次のマテリアルレイヤーに関連してくるので覚えておきたい。