【UE4】マテリアルで使用できるノード一覧【Material】【UnrealEngine】


水の表現や動きの付いたオブジェクトなど特殊な見た目を再現するとなるとノードを使ったマテリアルの処理は避けては通れません。

今回は個人的に使用頻度の高いマテリアルのノードをまとめました。

演算系
-----------------------
![四則ャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497331/3f9a3029-6cb5-ef1e-86fd-bdb48238d926.png)
・Add　足し算 +
・Subtract　引き算　-
・Multiply　掛け算　*
・divide　割り算　/
・Fmod　余剰　% 



検索する際は記号でも可能

定数・パラメータ
----------------------
![定数.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497331/8cccaac0-65b5-2d93-fa75-c84db22c0b3c.png)
・Constant　floatの定数
・ScalarParameter　floatの値
・Constant4Vector Vector4の定数
・VectorParameter Vector4の値

計算に使用する

線形補間
-----------------------
![linear.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497331/bfd654bd-5037-67e9-eb94-0b218dd20c72.png)
・LinearInterpolate 

 A*(1.0f-Alpha) + B*Alpha
Alphaが0ならAの値になりAlphaが1に近づくに連れてBの値になります。

####VectorでもScalarでもAとBの型が揃っていれば補間を掛けてくれます。

※Alphaの値は0~1の間にクランプされないので注意が必要。


数値の切り捨て
--------------
![minmax.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497331/6fb0f524-fb40-3e52-1cdd-ffe7fbc8a76d.png)

・Min　AとBの数値で低い値を出力する
・Max　AとBの数値で大きい値を出力する
・Clamp MinとMaxの間外の数値を切り捨てる

###少数を切り捨て、整数切り捨て
![floor.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497331/05288634-9cec-aefc-7b90-a89b255f717a.png)


・Floor 少数を切り捨て (1.5 => 1)
・Ceil  少数を繰り上げ (1.5 => 2)
・Flac　整数切り捨て (1.0を超えると0.0になる)


数値反転
-------------------
![-.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497331/ae66e1eb-701c-ff5b-abfb-8c0d8b85f23b.png)
・OneMinus (渡す数値が0から1の値であれば反転した値が返る)


演算
---------
![enzan.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497331/5d56019a-459d-393d-2f76-41b8a81d9584.png)
・Abs 絶対値に変換 (負の値を生の値にする)
・Power　乗数　(スペキュラの計算やExposure等に使う)
・SquareRoot √


###ベクトル演算
![ベクトル演算.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497331/671d9620-1f54-2cea-2fce-3e8f06085707.png)
・DotProduct 内積
・CrossProduct 外積
・Normalize　正規化　(正規化が出来ない値を入ることが考慮されているSafeNormalizeというものもある)


要素を増やす
---------------------
![append.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497331/21c93903-8967-24f8-48fb-08a365fb32b7.png)
・Append
A.Scalar と B.Scalar の場合 -> Vector2(A,B) となる
最大Vector4まで要素を増やせる

if文
------------
![if.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497331/39438ef6-46ec-a8ba-6929-8f974aff276d.png)
・if
AとBで比較して出た結果の値を出力する。
※使いすぎると負荷が掛かるので要注意

テクスチャをサンプリング
-------------------------
![texturesample.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497331/d8b5278a-dee8-2c9f-7918-60181da4730b.png)

・TextureSample　テクスチャから色を出力する。引数のUVに指定が無ければメッシュのUV値を指定してサンプリングする。
・TextureSampleParameter2D 式はマテリアルのインスタンスおよびコードを介して変更できるパラメータであること以外は、TextureSample と同じです。
  Cube Movieなど他にも種類があり使用するテクスチャに合わせ使い分ける必要がある。

テクスチャのUV座標を操作
-------------------------------
![texcoordinate.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497331/16ffe04a-5b2c-cef8-2998-4a2a4d5dd139.png)
・TextureCoordinate
詳細ではUV値の繰り返し回数してモデルデータに設定されてるUV座標をタイリングすることが出来ます。
法線マップをサンプリングする時は、自動的にタンジェントスペースの値が返ってくる用になっている。



###UVを時間により制御するノード (UVアニメーション)
![pan.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497331/da1d0c83-959c-5ff1-31b5-8393410e5f92.png)
・Panner   UVの平行移動　(映像業界で使われるパンと同じ意味合い？)
平行移動する速度を設定し、Timeを変更すると平行移動します。
プログラム自体では等速の動きになる為、緩急をつけたい場合はモデルのUVを調整する必要がある。
・Rotate   UVの回転
 回転するピポットUV値と速度を設定して、Timeを変更すると回転ができます。


-----------------------------
参考にしたサイト
https://docs.unrealengine.com/ja/Engine/Rendering/Materials/ExpressionReference/Textures/index.html
https://qiita.com/mao_/items/6e1354a9ff492a586675
https://docs.unrealengine.com/ja/Engine/Rendering/Materials/HowTo/AnimatingUVCoords/index.html
https://historia.co.jp/archives/4514/