概要
マテリアルで傾斜ベクトルを計算し、テクスチャを使わずにフローマップによる流体表現を行います。
ランタイムで計算を行うので、様々な形状やアクタの回転にも対応できます。
エンジンバージョンは5.4.3を使用しました。
実装
傾斜ベクトルの求め方
傾斜ベクトルの求め方はHoudiniのSOPノードLabs FlowmapにあるSlopeメソッドを参考にしました。
内部の処理を見ると、法線と下方向のベクトルの外積から従法線を出し、更に従法線と法線の外積で傾斜ベクトルを計算しています。
同じ処理をUEのマテリアルで再現すると以下のような感じになります。
Normalizeするかどうかはお好みで。
XYだけの値に見えますが、傾斜ベクトルは上を向くことがないのでZチャンネルにはマイナスの値が入っており、ちゃんとワールド空間のベクトルになっています。
Flow Map
マテリアルでは便利なFlow Map関数がいくつか用意されていますが、今回はFlowMaps_Simpleを使用します。
Diffuse、もしくはNormal MapインプットにFlow Mapで歪ませるテクスチャオブジェクトを刺します。
Flow Vector Mapには先ほど計算した傾斜ベクトルを入力するのですが、本来ここにはテクスチャのFlow Mapを入力するため、計算したベクトルをワールド空間からタンジェント空間に変換します。
Transformノードを挟み、ノードのDetailsからSourceをWorld Space、DestinationをTangent Spaceに設定します。
出力される値がRGBなのでMaskノードでRGに変換し、Gチャンネルが逆なので-1を乗算して反転させます。
UVのスケールやスピードの調整、ベクトルの大きさをお好みで調整するといい感じになります。