“Vertex(Pixel)NormalWS、SceneDepth編”

執筆:  “モ”

はじめに

マテリアル表現についての備忘録です。

画面効果系や画面演出でよく使う「Vertex(Pixel)NormalWS」「SceneDepth」について、どういったものなのか、簡単な使い方を書いていきます。
UnrealEnginenのマテリアル側で画面効果表現をする場合に助けになるかもしれない表現と、何が起こっているのかを解説します。

本文

 Vertex(Pixel)NormalWS(Surfaceマテリアル用)

ここにメッシュが「どの方向を向いているか」が格納されています。
このノード単体でベースカラーに出力すると、このような絵になります。

メッシュから見たX/Y/Zの正の方向に、それぞれR/G/Bの色が割り振られています。

使用例

ワールド位置オフセットに接続し、1つのfloat値をMultiplyします。
float値が0の値の場合、メッシュに変化はありませんが、数が増えると外に拡張され、数が減ると内側にしぼみます。
この時、注意したいのは「ノーマル(法線)の方向に」外に引き延ばされるので、対象の3Dモデルの法線がつながっていない場合(DCCツールでフラットシェーディングを設定した場合等)ポリゴンが分割して離れていってしまいます。

例2

こちらは任意のノイズ画像又は生成ノイズを又掛けしたものです。
ノイズがマスクの役割をして、一部の箇所だけ突出した描画にする事ができます。
さらに調整して、球体とマテリアルのみで漫画チックな雲を作る事も可能です。

SceneDepth(PostProcessマテリアル用)

カメラからの距離を出力します。

これだけではただ白が出力されます。

カメラから遠ければ遠いほど白が出力されますので、実際に使用する場合は

このような形で掛け算したり、割り算をしたりして調節しましょう。
結果としてはこうなります。

雲がかかったような絵になりました。

使用例

・仮想空間が描画されていくような演出

使用例(Lengthを減らしていくと黒いマスクがはがれます。)

まとめ

よく使用するマテリアル用ノード二つを用法とともに紹介いたしました。
これ以外にもアイデア次第で様々な用法がありますが、画面効果でよく使うものを紹介しました。

参考文献

EpicGames「マテリアル表現式のリファレンス」

https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-material-expressions-reference