UE5.1WaterPlugin FluidSimulationとの格闘ログ

# UE5.1WaterPluginのFluidを使ってみたら難しくはないけど情報が錯綜しすぎて難しかった件
上記の通りWaterPluginの流体シミュレーションを使ってみたのですが、情報が4.26の頃のものしかほとんどない！UE5に入ってからの情報は人によって言ってることが違う！という感じだったのでとりあえずUE5.1でのFluidの動かし方についてです。

[作り方](#1必要なプラグイン)
[遭遇した不具合Q＆A](#遭遇した不具合qa)

## 1.必要なプラグイン

必要なプラグインは以下の3つになります

**・LandMass**
**・Water**
**・Water Extra**

LandmassについてはUE5からは最初から入っています。というわけで実質必要なのはWaterとWater Extraの二つです。
![スクリーンショット (1035).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/c02fffb4-62a4-7d2b-ceae-875025e5e0b5.png)
入れたら再起動します。

## 2.ランドスケープの作成
ランドスケープを作ります。
![スクリーンショット (1038).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/da329a08-9dff-f3da-34f9-cc4aebf697d2.png)
動かすだけならMaterialなしでそのまま作成してもらって問題ありません。
上の編集レイヤーを有効にチェックが入っていることだけ確認してください。（デフォルトで入っている筈ですが入ってなかったら制作後LandScapeの詳細からも変更できます）

## 3.Actorの配置

左側のアクタを配置タブからWaterと検索し湖・海・川などお好きな物をドロップします。
![スクリーンショット (1041).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/a6112afe-ddeb-d770-cbf7-57f702513559.png)
シェーダ―が計算し終わるとこんな感じで水が出現します。
ちなみにLandScapeの地形を水が貯まるように勝手に変形してくるので先に自分で地形を作っていた場合は自分が作った方が消えます。
Lakeでやっている人が多いので今回はLakeにしましたがRiverでも同様の方法でFluidを使うことができます。（Oceanは検証してませんが多分できます）

## 4.FluidSimulationのActorを設定する

Fluid計算用のActorを配置します。
Engine/Plugins/WaterContent/FluidSimulation/Blueprints/
に置かれているBP_FluidSim＿01を使用します。
![スクリーンショット (1044).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/f1e27a20-ff65-ba5d-9fea-e48d7b2c86a9.png)
もしコンテンツブラウザ下にエンジンファイルが表示されていないという場合はコンテンツブラウザの右側の設定を押してコンテンツ欄のエンジンのコンテンツを表示とプラグインコンテンツを表示にチェックを入れてください。
![スクリーンショット (1045).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/e3981e04-f167-a5c5-7515-f74d14974afa.png)

適当な位置に配置します。

![スクリーンショット (1048).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/8f66cc2a-ca0f-60a1-1579-ac6f52bb78f8.png)
BP_FluidSim_01の詳細のシミュレーションのShow Simulation Meshにチェックを入れます。
するとActorを中心に平面が出現します。
この平面がFluidを計算してくれる範囲です。

![スクリーンショット (1050).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/dbbaff93-a964-89dd-a7a0-7afeaff5f25e.png)

先ほどのシミュレーションのSimulation World Sizeを大きくして湖をいい感じに覆えるサイズに変更しましょう。
ちらつき防止についでに下に沈めておきます。
![スクリーンショット (1051).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/26306ecf-bd89-0394-3196-3fb8b286529c.png)

シミュレーションの更に下にあるWave SimulationのSimulation Wave Foamにチェックを入れます。
![スクリーンショット (1054).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/54f7421b-d98d-5fc9-b0a0-e787a38a1c86.png)
同じWave Simulationの中にあるWater Bodyのドロップダウンを開いて先ほどレベルに配置したWaterBody（湖とか川とか海とか）を指定します。
![スクリーンショット (1055).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/58532426-c084-9e0a-b950-ef6aee907a75.png)

BP_FluidSim＿01の設定はこれで終わりです。
見づらくなってしまうので最初にチェックしたShow Simulation Meshはチェックを外して見えなくしておきます。

## 5.動かしてみる

実質セットアップは終わったようなものなので動かしていきます。
先ほどBP_FluidSim_01を持ってきたEngine/Plugins/WaterContent/FluidSimulation/Blueprints/の中のExamplesフォルダを開きます。

![スクリーンショット (1057).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/7599e537-d839-a668-8aef-479034cfd81b.png)

今回は一番右のBP_Dynamic_Force_Componentを使っていきます。

ちなみにSkelMeshでは人が入った時のアニメーションに合わせた波が、Inpulse_Repeatingは定期的に発生する衝撃による波がシミュレーションできます。

![スクリーンショット (1059).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/2dc9aa76-24b1-2650-b335-2f17836038ac.png)

レベルに配置して詳細のデフォルトからShow Meshにチェックを入れておきます。
<iframe width="560" height="315" src="https://www.youtube.com/embed/mvW9XLfOwhk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

動きました！やったね！！！

# 遭遇した不具合Q＆A

**実質ここからが本題**

#### 1.泡が出ない
Q.波と泡が出るんじゃなかったのか
A.…一応解決策はあります。
Engine/Plugins/WaterContent/Materials/WaterSurface/のWater_Materialを開きます。
![スクリーンショット (1065).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/f84c1cc7-35e4-3482-5bf1-0d9392b7611c.png)
Fluid Simulationの項目のEnable Foamに何も繋がっていない場合があります。
もし繋がっていなかったときは右クリックしてパラメータに昇格してチェックを入れておいてください。
![スクリーンショット (1066).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/7e3ef505-28bd-3d22-bbf0-875d3f598c81.png)

次にBP_Fluidsim_01の詳細を開きます。

先ほど変更したWave simulationより更に下にもう一つシミュレーションの欄があるので
![スクリーンショット (1070).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/fcfb2a53-e7c5-35e8-c56a-6c669cf7c67c.png)
Solverの項目をShallow Waterに切り替えてください。

動かしてみるとこんな感じに波が出ると思います。
<iframe width="560" height="315" src="https://www.youtube.com/embed/hYksJT4BYoA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

見ての通り**波がでません**なんか違う…感がすごい。
ただ現状UE5.1ではこの方法しか成功していないので波も出せる方法が分かった方は教えてください。


#### 2.波が立たない

上の手順通りやったのに波が出ないぞ！話が違うぞ！という方は「FluidのSimulationの位置ずれにハマっている可能性」があります。

実はShow MeshをTrueにしてシミュレーションをプレイすると…
![スクリーンショット (1071).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/1377f3b5-117f-f797-5c27-63c4737d4b25.png)
開始前↑

![スクリーンショット (1072).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/d18b19d9-f0b2-347b-6448-84c00ad7f073.png)
開始後↑

こんな感じで勝手にずれます。
どうやらActorの座標に準じてどれぐらいズレるかが変わるっぽいのですがActorの座標自体はズレていないので原因は不明です。
当然ですがShowMeshのメッシュがかぶってない位置はシミュレーションできないので一部でしか波が立たないときは十中八九これだと思います。
座標をX＝0　Y＝0にするとActorを基準にX軸を基準にメッシュが寄ってしまうのは確認しました。
![スクリーンショット (1073).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/5a52b435-690a-eee6-6149-5401c1db7926.png)
座標X=0Y=0にしたとき開始前↑
![スクリーンショット (1074).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/5b96bbbf-bd14-3d55-50c3-a1d8724675de.png)
座標X=0Y=0にしたとき開始後↑

対策はもうこの0.0座標を逆手にとって地形自体をずらすかシミュレーションとにらめっこしながらベストな位置を探るしかありません

ちなみに一応ずれても問題ないレベルで拡大してしまうという手段もあるのですがおそらく次に書く不具合に引っかかります。

#### 3.波が速い・波のポリゴンが荒い

思ったより波がでかい！波紋が速い！なんか波がポリ見えてて全然なめらかじゃないんだけど！
というときはシミュレーションの範囲（BP_FluidSim_01のSimulation Mesh）を広げ過ぎている可能性があります。

検証動画
<iframe width="560" height="315" src="https://www.youtube.com/embed/M707dcAfYZU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>　

Mesh10000ちょっと・BP_Dynamic_Force_ComponentはRadius200　↑

<iframe width="560" height="315" src="https://www.youtube.com/embed/AxMxTITFXNc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

Mesh50000ちょっと・BP_Dynamic_Force_ComponentはRadius200（上と同じ）　↑

**明らかに波のサイズも速さも円のサイズも違う**
推定ですが![ブログ用Water1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/9b86eac3-52f5-f625-1d51-8f68083411b7.png)
こんな感じでMeshの中の相対サイズでやってるんじゃないかな…って感じなんですよね…

このせいで拡大しすぎると小石を投げ入れただけのような衝撃のシミュレーションで津波みたいな波が起きる（Meshが拡大されまくってるのでポリも見える）
みたいな自体が起きます

まあポリが見えるのはサイズを500,000とかにしたときなんですけど。


### あとがき
というわけでWaterPluginのFluidのUE5.1版の使い方と不具合Q＆Aでした。
ぶっちゃけおま環の可能性もあるんで「それおま環だわ！」ってなった方は教えてください。
~~こっそり修正します。~~
読んでいただきありがとうございました！