UnrealEngine(4でも5でも可)のマテリアルでFF5のリクイドフレイムみたいな効果を作る

# そもそもFF5の「リクイドフレイム」って何？
参考動画
https://www.youtube.com/watch?v=t5_U246CEuU
こんな風に三態を変化させるモンスターの事です。
画像は↓とかを見れば取得できますが、ライセンスとかあとライセンスとかで怒られるのは嫌なのでこれは用いません。
https://finalfantasy.fandom.com/wiki/Liquid_Flame_(Final_Fantasy_V)
# 下準備
代わりにそれっぽいシルエットを自分で作ります。まぁだいたい上からなぞって作ればいいでしょう。ひとまずヒト型と渦型を作ります。
大きさは合わせる必要があるため512x512で作っておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/0e94254e-db84-90a1-04ff-e8ec12dd5ae7.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/f77b56d0-f1b3-27b3-8630-1e498d6f3ea8.png)
はい、んでここで、GIMPかPhotoshop的なものを立ち上げます。僕はPhotoshopなんて持ってないので、GIMPで説明します。
## GIMPで距離マップを作る
はい、GIMPが立ち上がったら、フィルタ(Filter)→汎用(Generic)→距離マップ(DistanceMap)を選択しましょう。特に設定をいじる必要はありません。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/b8e7fcc4-d1c2-5aa4-5d39-15ac99ed18ce.png)
距離マップウィンドウが開いたら以下のような画像になると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/b4623375-76a2-1780-8005-8038fc501232.png)
これをヒト型に対しても行います。
![liquid0_d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/8b5d19a7-a03b-d169-e5e4-34bd4cd99424.png)
距離マップについては、後ほどきちんと解説しますので、ここでは「こういう結果になるのか」くらいに覚えておけばOKです。

## 後で使いやすいようにチャンネルを分けて1つの画像にしておく
今回はR(赤)とG(緑)を分けます。
![liquid_d_mix.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/3ca87bed-6b50-b213-cc12-db6a20365a73.png)
これで1つの画像ファイルに2つ分の距離マップを格納できました。もしこれのやり方が分からない場合はトーンカーブを使うのもあり、ヒト型の場合は緑を出したいので赤と青のトーンカーブをゼロに、渦型の場合は赤を出したいので緑と青のトーンカーブをゼロにします。

はい、これで２つの異なる距離マップが１つの画像になりました。

これをUnrealEngineにドラッグアンドドロップでインポートします。

# 距離マップを使ってマテリアルで遊んでみる
まずは以下のように手っ取り早くLerpしてみましょう。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/b51ecd8f-ad13-556f-6888-194eb02720c0.png)
そうすると
![morph.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/c25612bf-0050-fdf2-dfed-b09ffb8d9f5f.gif)
単なるα合成ですが、距離マップのおかげでモーフしてるように見えない事もありません。とはいえ、現段階ではただのα合成なのでちょっと面白くないですね。

## 形を強調しよう
モーフィングにおいては形の情報が大事であり、この濃淡の情報がちょっと邪魔です。というわけで、それぞれの形の情報を強調してみます。
以下のように特定の値以上のところを強調するようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/2bcf7433-7366-a203-8db2-520cccd5e803.png)
最終的に0.01で割っているため100倍しているのですが、その前に0.19を引いてやることで0.2よりも小さい所は暗くなりますが、0.2以上の所は強調されます。
```math
\frac{濃淡-0.19}{0.2-0.19}
```
本来だったらsaturateするべきでしょうがいくつかの理由があり、ここではsaturateしません。というわけで、この結果をエミッシブに入れてると滅茶苦茶光ります。
ともかく、形が強調されたことが分かるかと思います。
光ってはいますが、よりモーフィングっぽくなりました。![morph2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/0608fabf-185c-c0cb-02ee-0e55e6469407.gif)

## ちょっとだけデティールを入れよう
しかし形だけの情報だとちょっとだけ寂しいので以下の2つのテクスチャ(渦の穴と、ヒト型の輪郭)を用意します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/a370f878-75fd-4cee-9427-3835959c3b4b.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/75897ed8-79b0-da03-58db-f23831216f4b.png)

そして、αブレンディングし、最後に赤を足します(赤を足しておかないと後で乗算した時に黒が目立ってしまうため)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/c37ff6f8-eac6-1464-0fab-8e2e42edca66.png)
そしてこの結果を先ほどのモーフに乗算します。

するとこういう結果になってしまいます。やっぱり赤が不自然ですね。ここは後で「炎っぽい効果」を入れた時に誤魔化しますので今は我慢しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/da554f82-bca3-983a-4d42-eff008fc4084.png)

# 炎っぽい効果を作る
## 下準備
GIMPのソリッドノイズや歪み効果などを使って、雑に炎っぽいテクスチャを作ります。↓こんな感じに。雑でいいです。![fire.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/f5d26bb4-a311-5873-765c-bc60ca353ea5.png)
最近っぽく作るならAI的なところから作ってもいいんじゃないでしょうか？StableDiffusionとか…。
じゃあ乗算してみましょうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/0460955c-e740-e9bd-c060-94c635db98d7.png)
はい、これだけではダメですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/f3371112-35ed-a3bd-29ee-09035784c40f.png)
メラメラ感がない
## メラメラさせる
### Pannerノードでスクロール
そこで、Pannerノードを用いてUVスクロールを行います。下から上にスクロールするようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/206faa67-452d-2967-2b55-f02e9ccd7ba7.png)
はい、そうするとスクロールし、ちょっとだけメラメラしました。
![meramera.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/8de01d87-67b8-3726-668b-25d1db272c58.gif)
まだまだですね。
### オパシティマスクをちょっと歪ませてみる
まず、GIMPなどで適当に雲模様を作ります。
![cloud.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/1c9c1dde-5112-f890-978f-febbd1938fc0.png)
これをnormalmap-online( https://cpetry.github.io/NormalMap-Online/ )などのサイト等でノーマルマップに変換します。
![cloud_normal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/1d61dd60-b4b5-1cff-7231-d5e61cebd97e.png)
そしてこの法線マップをPanningしたもので、輪郭用画像(距離マップ画像)を少しだけ歪ませる。また、PanningはV方向のみにしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/e310db35-528b-21a6-b800-f3867ae4fccb.png)
これにより、輪郭の参照位置が時間で変動するため、ゆらゆらした感じになります。
![yurayura.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/48f2ce64-2e8b-173d-5bb6-3c2dacae7a8e.gif)
メラメラ感が気に入らない場合はPanningに渡しているTimeやPanningパラメータを調整してください。
## 仕上げ
もうちょっと全体的に、形に添ってまぶしくします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/40a396c2-bde1-e24f-1fac-05b3eb3eecdd.png)
オレンジ色を数倍(8倍)したものと、前に作ったノードの形状に沿って明るくしたものを乗算します。ただし、以前作ったものは明るすぎるため適度に割っておきます(225で割っていますが、お好みで)
これでできたものと、前回までのメラメラを足したものを明るさとします。すると
![last1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/85b0c209-922b-ede9-dd30-71592ca88163.gif)
だいぶそれっぽくなりましたが後ろがちょっとわざとらしいので、こいつも歪ませます。
輪郭用画像情報の最後のノードを、炎テクスチャのUVにもAddします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/ceda4441-9cf6-0f98-d4bc-5797d5f95d39.png)
これでなんとかそれっぽくなりました。
![last2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275040/ad6ed633-e4c5-b79b-7513-c7789b217da8.gif)


はい、解説は以上です。ここまで読んでいただき、ありがとうございました。