2022-05-10

【UE5】マテリアルをブレンドする【基礎知識】

マテリアル同士を混ぜ合わせる方法の基本を紹介。マテリアルレイヤーの前段階として知っておきたいノード類。

Article Image
使用ソフトウェアバージョン備考
Unreal Engine5.0.1

マテリアルをブレンドってどゆこと?

例えば次のようなマテリアルを作ろうと思ったらどうだろうか

ツートン

上がツヤツヤでキラキラ。下はザラついてモヤっとしている。

一つのマテリアルの中にラフネスやスペキュラといった値を混同させたい場合は通常のマテリアル1個だけで作れなくもないが...

各ピンそれぞれにブレンドの計算が必要でノードが複雑になる。結果的にコントロールするのも難しくなる。

そこで登場するのが別々のマテリアル同士を直接まぜてしまおうという考え方だ。

Blenderでいうところのシェーダーミックスに似ている

予め知っておきたいこと2つ

本題に入る前に2つ知っておいてほしいことがある。

新しい方法

実はマテリアルのブレンドは昔から実装されてはいるのだが、今回紹介するのはUE4.14(2016/11)から実装されている新しい実装方法。

この記事を書いている2022年から考えると古いじゃん!という声が聞こえてきそうだが、ちょっと難解なためか解説している記事が少なく、古いバージョンのやり方で覚えている方も多いかと思って記事を書いている。

古い方法は紹介しない。

この記事は序章

この記事だけでもマテリアルのブレンドは実現可能だが、次の記事にてマテリアルレイヤーという一歩進んだ概念を使おうと思っている。

恐らくこの記事の内容が頭に入っていないとマテリアルレイヤーは使うことができないので先に理解してもらえたらと思う。

マテリアルアトリビュートを使う

マテリアル同士をブレンドするための準備。

まずは普通のマテリアルを作って次の設定をする。

Use Material Attributes設定

通常のマテリアルはアウトプットが次のようなノードになっている。

通常のアウトプット

まずは、このマテリアルの詳細設定からUse Material Attributesをオンにする。

Use Material Attributesの場所

するとマテリアルのアウトプットがシンプルなものになる。

シンプルなアウトプット

アウトプットのピンが1個しかない!カラーとかラフネス、その他どうやって設定するの!

となるので、次のノードの出番である。

MakeMaterialAttributeを作る

MakeMaterialAttributesというノードを作る。

MakeMaterialAttributes

この画像を見て「今までアウトプットのノードにあったピンを別のノードに移しただけじゃん?」と思ったあなた。

全くもってそのとおりだ。

逆に考えれば今までアウトプットノードにしかなかったピンをMakeMaterialAttributesで別ノードに分けることによって複数のマテリアルを1つのマテリアルの中に混在させることができるようになる

複数のマテリアル

※上のノード(冒頭の例)では赤のカラーは使用していない。当然ではあるが赤のカラーを繋ぐと半分が赤になる。

BlendMaterialAttributesを作る

つまり上で作った複数のMakeMaterialAttributes混ぜ合わせてやればマテリアルのブレンドが完成するというシンプルなものだ。

そしてそのブレンドを担うノードがBlendMaterialAttributesになる。

BlendMaterialAttributes

AとBにはMakeMaterialAttributesを入れてやれば良い。

さてAlphaとはなんだろうか。

冒頭の例では次のようなノードが入っている。

Gradientを使った例

このノード自体は解説しないがAlphaには次のようなカラーが入っている。

Alphaにはいっているカラー

つまり白になっている部分が下のマテリアル、黒になっている部分が上のマテリアルになるというのがAlphaだ。

ツートン

これで冒頭のマテリアルの完成。

Alphaに数値を直接入れると、単純に全体がブレンドされる。

絶対値でブレンド

ブレンドの基本解説は以上で終わり。

いつ使う機能なのか?

じゃぁこれいつ使うの?というと常に使うべきという代物ではないが....

例えば防具の革っぽい部分と金属っぽい部分をマスクで切り分けて一つのマテリアルアセットだけで別々の質感を表現するなんてことはよくありそう。

他にもメタルスライムと通常スライムが合体するときの交わり具合のアニメーション等、不思議な質感も難しく考えず作れそうだ。

その他の基本ノード

今は目立った使い道がないが、この先必要になってくるノードを記しておく。

SetMaterialAttributes

一度ブレンドされたMaterialAttributesのピンから1個(または複数)取り出して上書きするノード。

例えば冒頭の例のあと色だけ緑に買えたい場合は次のノードを組む。

MaterialAttributes

所見だと、これも1個しかピンがなくて意味がわからないかもしれないが「詳細」タブから設定する。

要素追加

上の画面からAttribute Set Typesに要素を追加して

好きなタイプ

どの値を上書きするか選択できるので好きなものを選択。ここではBaseColorだがRoughnessなどももちろん選択できる。

ピンが増えている

ノードにピンが増えているので、あとは値を入れるだけで良い。

緑になった

GetMaterialAttributes

GetMaterialAttributesを使えば1個(または複数)のピンの値を取り出せる。

GetMaterialAttributes

基本の設定方法はSetと同じ。

上の例では1-xを使用して色を反転する処理を追加する例。

結果は

反対のカラー

青の反対である黄色の球となった。

BreakMaterialAttributes

一度MakeMaterialAttributesで束ねてしまった値をBreakMaterialAttributesすれば全部のピンを展開してしまうことができる。

BreakMaterialAttributes

このノードはAttributesを出力しているノードから引っ張ってbreakで出る。

結局このノードはGetMaterialAttributesで全パラメータを取り出したのと等しいが、こちらのほうが使いやすいケースがあるかもしれないので覚えておく。

いろいろな使い方が想定できる

このように、ミックスした後でさらに別の値で上書きしたり、処理を入れたりと複雑なことが簡単にできるようになるはずだ。

最後に適当なサンプル

曇ったマテリアルがブレンドされるので、反射が消えるのが分かる。

適当

※このノードならTextureにノイズ画像を適当に入れれば円状になる

以上

Blenderだとシェーダーミックスを使う例はよく見かけるが、UEだと使っている人があまりいない印象がある。

ひとまずこれだけ覚えていれば複数のマテリアルを混ぜて使ったり、混ぜる途中で処理をいれて複雑な変化を作るこどもできるかと思う。

ここで紹介したノードはすべて次のマテリアルレイヤーに関連してくるので覚えておきたい。



この記事をシェア


謎の技術研究部 (謎技研)