この記事はUnreal Engine5にてマテリアルノード「Add(Subtract)ノード」を解説する。
Aキー
を押しながら画面を左クリックでも出すことが出来る。
Add
は英語で「足し算」Subtract
は「引き算」を意味する。
いや、そんなの当たり前だしAdd
もSubtract
も解説しなくてもみんな知っていると思われていそうだ。
マテリアルノードでも基本は全く同じで足し算と引き算をしている。
Google検索をかけてみると意外にこのノードに限って解説しているページが見当たらない。
恐らく個別の例で解説されているとは思うがここに絞った記事は少なそうな印象。
というわけであえて記事にする。かなり重要なノードだ。
Add
が足し算でSubtract
は引き算を意味する。
とは言え1
を引くのと-1
を足すのでは同じ効果だ。
したがってAdd
でできることはSubtract
でも出来る。
できるだけシンプルにしたいので、この記事はAdd
ノードだけ使用して解説する。
※実際に使う時は視認性が悪くなるので分けて使ったほうが良い
さすがに足し算と引き算の概念から解説する必要はないと思う。
というわけでこの記事では実際に実験しながらAddノードはいつ使うのかという感覚を掴んでもらえたらと思う。
テクスチャとテクスチャを合成しようとして足し算を使うという例はあまり見ない。
なぜならば画像が異様に白くなってしまうからだ。
次が結果。
画像の超基本の合成はLerp
というノードを使うがここでは解説しない。
とにかくテクスチャ同士の足し算は良くないとおぼえておこう。
※Lerp
ノードは次の記事で解説
【UEマテリアル】やたら簡単!Lerpノードの使い方 | 謎の技術研究部
ここで覚えておきたい重要な項目を解説する。
基本的にUnreal Engine内部での色の情報はRGB
それぞれ0~1
で表現されている。
白は(1,1,1)
黒は(0,0,0)
というデータを各ドットに持っている。
※256で扱う画像ソフトとちょっと違う点に注意
画像の「足し算」がドットの色合いによって簡単にRGB
値が1
を超えてしまうのは想像できるだろうか?
これが画像の加算が白飛びになる原因だ。
上で1
が最大と書いたが、実はRGB値は1
以上の数字を保持できる。
これが何を示しているのかと言うと「エミッシブカラー」というマテリアルの出力にて1を超えた量はマテリアルが「発光」するという認識になるが、今は余談。
※1
を超えたり0
を下回ったりする数字を保持したくない場合はsaturate
やclamp
ノードで制限することも出来る。
上で画像と画像をAdd
でミックスするのはNGと書いた。
しかし、実はグレースケールの画像をAddするということは多い。
※グレースケールは白と黒とその中間のグレーのみで構成されるモノクロ画像。
なぜグレースケールなら良いのだろうか。
例を見ていく。
ここからはLinearGradient
というノードを使うが、頭の片隅においておく程度でもよい。
これは何を作っているかと言うとグレースケールのグラデーション画像を出力しているだけだ。
便利でよく使うのでGradient
系のノードが色々あると知っておくと良いと思う。
上の画像にadd
ノードをつかって-0.5
したらどうなるか想像できるだろうか?
Add
ノードでマイナスを入力する場合は次のように「詳細」パネルに直接数字を入れる。
デフォルトでは画面左下にある。
ノード組むと次のようになる(Add
ノードの上に足されている数値が出ている)
※Add
ノードを右クリックしてリアルタイムプレビューをオンにするとマテリアルの出力に繋がなくてもプレビューが表示される。
そしてこの演算の結果は次。
黒い部分が下へ攻めたのがわかる。
引き算の処理をしているので黒=(0,0,0)
だった値は(-0.5,-0.5,-0.5)
になっているはずだ。
まず理解するのはマイナスになっても黒は黒のままになる
※逆に白=(1,1,1)
を超えても白は白のまま
ということは黒だった部分はそのまま黒で、黒寄りのグレーだった部分も黒になり、白の部分はグレーに変化する。
上の画像の例だと「マイナス値が増えるほど黒が上から下へ侵食するような動き」になる。
ここが少し理解しにくいだろうか?
なんでこうなるかが理解できない場合は後々慣れていくとして・・・(わかりやすい解説ができなくて申し訳ない)
上の処理で白と黒の境界線をコントロールできていることに気づくと思う。(下に押し下げている)
というわけでAdd
のマイナス値を調整すればシャッターのような効果が作れるのではないだろうか。
Time
ノードとSine
ノードが出てきてしまったので混乱するかもしれないがコレは理解しなくても良い。
この2つをつなげると「-1
から1
」の値が行ったり来たりするという処理になることだけ考える。
とにかくコレによりさっきは固定で-0.5
していたAdd
値が+1
から-1
の間で揺れることになる。
結果は次のように時間で変化する画像が出力される。
まさにシャッターのようになった。
で、これをどうするかという話が次。
※ここからは透過マテリアルのお話が出てくるのでTranslucentやMaskの意味がわからない場合は次も参照
【マテリアル基礎】透過マテリアルの作り方【Unreal Engine】 | 謎の技術研究部
この映像を使う例の前に準備
茶色のマテリアルの結果ノードをクリックして(ノード名はマテリアルにつけた名前で変わる)
Blend Mode
をTranslucent
にしておく。
そうするとオパシティ
という項目がでるので上のノードを繋いでおこう。
※Add
ノードのプレビューはオフにするように
合わせてなにかテクスチャをエミッシブカラー
に繋いでおく
※ベースカラー
ではなくエミッシブカラー
に繋いでいるのはライティングがなくても綺麗に色が出るため
結果は次のようなプレビューとなる。
ゲームに放り込むと次のようにちゃんと透過されている。
オパシティ
と書いてある場所にグレースケール
の画像が入ってくると次のような処理をしてくれる。
この処理がエミッシブカラー
に入力されているテクスチャへ適用される。
結果として透明と半透明が組み合わさリシャッターのような効果になっている。
ここまででAdd
だけで白黒の境界をコントロールすることに成功した。
このように物体を徐々に透明にするような処理を良く「ディゾルブ」と呼ぶ。
このワードはゲーム開発では頻繁に耳にするので、ひとまず上のような簡単な作り方は覚えておきたい。
次からはもう一つよく使う例を出す。
ノイズ画像をAdd
することもそこそこあると思うので例を出す。
先程の例にノイズテクスチャを更にAdd
する。
ノイズテクスチャはデフォルトでいくつか入っているのでnoise
で検索して適当にチョイス。
このようにノイズを加えると侵食している感じが表現できる。
この場合ノイズの範囲が広すぎるので実際上級者が使う場合はもっと境界線だけに細くノイズが適用されるように組むと思うがこの記事ではここまで。
また、この例は中間までしかディゾルブしないが、もっと下まで侵食させたい場合はsine
とAdd
の間にMultiply
で2倍してやるだけでも表現できる。
今回はAdd
なのでここまでで全てではあるが、グレースケールの画像をAdd
ではなくMultiply
(掛け算)する例もよくあるので頭の片隅に置いておいて欲しい。
ただ、今回の例で最後のノイズテクスチャの次のAdd
をMultiply
に変えてしまうと次のようにイマイチな結果となる。
ただ単に元画像を汚して、それをシャッターしているだけのような雰囲気となってしまった。
Multiply
に関しては別記事でやりたいが、上級者でもAdd
とMultiply
どちらが適切なケースなのかは迷うことがあるようなので、ここだけ意識しておくと良いと思う。
Multiply
ノード単体の解説記事を別途用意したのでこちらも是非。
【マテリアル基礎】Multiplyノードとは【Unreal Engine】 | 謎の技術研究部
では、今回出てきたノードだけで作例を。
こうして、反転したものを貼り付けて
これは...ちょっとコワイ。
が、上から徐々に画像が変化するのでたった2枚の画像を合成しただけでわずかながらマブタが降りてきている風の表現になっているかと思う。
Add
は基本中の基本だが、これ1個でも思ったより複雑な動きをするため初めに理解しておくのが良いと考えている。
またMultiply
も単なる掛け算ではなく面白い動きをするのでそれはまた別記事にて。
ちなみに、UEにてマテリアルの作り方を覚えていくとQuixel Mixer
のようなテクスチャを作る専門ソフトでも知識が活かせるのでかなり有用だ。
※ノードは組まないが考え方が似ている
覚えておいて損はないと思う。