エフェクトのマテリアル作りにおいて、個人的に高頻度で使用するノードの組み方を記載しておきます。
■UV
■UVオフセット
TextureCoordinateに値を加減算すると、オフセットができる。
下図のScalar ParameterをDynamicParameterと加算したり、MaterialParameterCollectionに置き換えたりすると、ナイアガラやシーケンサーなどからUVスクロールを表現することもできる。DynamicParameter経由でNiagaraからランダム値を入力すると、パーティクルごとにランダムなUV座標を適用できる。

■UVスクロール
UVスクロール+スクロールスピード制御を組んだノード。たいていはセットで使う。

パラメータに緩急を付けると(加速・減速しようとすると)破綻した見た目になるので注意
■UVタイリング(UE 5.7)

ちなみに、ScaleUVsByCenterを使うと、中心を基準にタイリングができる

■UV回転
UE4デフォルトで用意されている「CustomRotator」が使える。
「Rotation Angle」に0~1の値を入力することで、テクスチャが回転。例えば0.25だと90度回転、0.5だと180度回転になる。

■UVランダム(UE5.7)

■マテリアル関数に集約
処理をたくさん使いまわす時は、マテリアル関数化します。

■上記MF(MF_UVCommon)の中身(UE5.7)
こんな感じです





MFの外側は、各項目の制御用パラメータを繋げます。
これによりマテリアル
個別で名前を付けたり、グループを分け易くするためです。

■歪み(Distortion)
テクスチャを歪ませる手法。
ノーマルテクスチャを使った手法と、グレースケールテクスチャを使った手法がある。ノーマルを使った手法の方が、歪み方に偏りがでにくくて使える場面が幅広いと思う。ただ、歪み用にノーマルテクスチャを作る必要がある。
▼ノーマルテクスチャを使った手法


マテリアル関数「MF_UVControl」については、ページ上部「マテリアル関数に集約」を参照。
▼グレースケールテクスチャを使った手法
歪み用テクスチャの濃淡に応じてUV座標に変化を付けるような処理を組みます。
※歪み用テクスチャは白と黒のグラデーション分布が均等に近くないと、歪み強度を強くするほど歪みの方向が偏るので注意


下図のような感じでマテリアル関数化するのも良いでしょう。


■ソフトパーティクル
パーティクルがメッシュと接触(交差)する部位において、透明度を高めてパーティクルがメッシュに刺さっている印象をやわらげてくれる効果を足せます。
「Depth Fade」ノードをオパシティに繋げます。
▼参考:UE4公式ドキュメント「Depth 表現式」
https://docs.unrealengine.com/ja/RenderingAndGraphics/Materials/ExpressionReference/Depth/index.html
こんな感じ

■ちぎれ処理(Dissolve) UE5.5.3
テクスチャの濃淡を、真っ黒から真っ白まで推移させるような処理です。
これを用いることで、パーティクルがちぎれて消えていく/出現するような表現ができます。
下図のような処理を、Opacity関連の処理の最後の方に入れます。

※稀に、BrokenThresholdに0など最大値が入っているにも関わらず、わずかにテクスチャの濃淡が出ることがあるが(バグ?)、その際はテクスチャノードの直後にsaturateを入れて、強制的に0~1の範囲内に値を収めることで解消できた。
■リフラクション(屈折)
屈折も歪みと同じで、ノーマルテクスチャを使う手法とグレースケールテクスチャを使う手法があります。基本的にはノーマルテクスチャを使う手法が推奨です。屈折自体、使いたい時と使いたくない時があるので、SwitchでON/OFF切り替えられるようにすることも多いです。
▼ノーマルテクスチャを使う手法

下図は、マテリアル関数でまとめた場合の例。
Maskの入力ピンには、Dissolveの出力を入れる想定。

この記事とは少し関係無いですが、マテリアル側で上記のような処理を組んだうえで、NiagaraのDynamicParameterにてLerpを挿入し、パーティクルColorが0になるほど屈折値が1になるような処理を組むことがある。
それにより、Niagaraのパーティクルカラーが0になれば屈折が消えるようになる。
▼グレースケールテクスチャを使う手法
下図の場合、LerpのAlphaにはOpacityの値を入力しています。

上図のLerpのAlphaに、屈折用のテクスチャを繋げることで、Opacityに左右されない屈折表現ができます。ただ、Opacityの影響を受けなくすると、Opacityでパーティクルをフェードさせても、屈折表現が残り、パーティクルの寿命が尽きると共に屈折がパッと消えて見えてしまいます。そのため、屈折値の出力はディゾルブ処理に乗算したり、ParticleColorが0になるほど屈折が1.0になるようにLerpで処理を組むなどすると良いかと思います。
▼屈折方式について
エフェクトで使う屈折方式は、PixelNormalOffsetが向いてそうな所感です。
(Index of Refractionは自然の法則を取り入れているが、発光を多く扱うエフェクトでは発光の屈折がノイズになることがある)
■フレネル
カメラと物体表面の角度によって濃淡を付ける効果。
輪郭線を付けたり透明度の高い物体によく使う。

下図のような処理を、オパシティやエミッッシブ値に掛け算で入力する。エフェクト制作ではオパシティのみに使用することが多い印象。

マテリアル関数化する時は以下のような感じに組む。


▼昔は以下の組み方をしていましたが、いまいち調整がしづらくて今は使っていません。(自分が使い方を理解しきれていなかった可能性があるので記載は残しておきます・・・)

上記処理をマテリアル関数化し、スイッチでフレネルをON/OFFできるようにすることも多い。

■カメラスケール
カメラ距離に応じてパーティクルを拡縮したい時に入れる処理。ワールドポジションオフセットに入力する。D


