[UE4]今更？UE4のカスケードでパーティクル

どうも皆様こんにちわ。大型の台風が過ぎ去り季節も完全に変わったようで肌寒くなってきましたね。
今回はUE4の記事で、その中のパーティクルエンジンであるカスケードの使い方を記事にしてみました。
オイオイオイオイなんで今カスケードなんだよ時代はナイアガラだろがヤレヤレと思ったそこの貴方。 ヤレヤレ。
いやまぁ実際なんで今カスケードなんだよってことなんですが、なぜかは次章に書くとしてまして、「もぅカスケードでもいいから早くやれ」という方は次の章は飛ばして本題にお進みください

##なんで今更カスケード？

![000.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163667/80c9db82-f17e-5a02-df95-38261ea1beb5.jpeg)

2019年10月20日現在、UE4には既に時期VFXエンジンとして"ナイアガラ"と呼ばれるツールがアーリーリリース(初期テスト)されています。	今までカスケードと呼ばれるツールがUE4内の表現を支えてきたのですが、カスケードは拡張性に乏しく(というかしようと思うとスゴイ大変)、既に用意されたツール内でしか表現ができませんでした。
しかも、各パーティクル用に作成したパーティクル放出ルール、あえてメソッドと呼びますが、このメソッドを他のパーティクルシステムに使いまわすことができませんでした。
ナイアガラは、動作に関わるあらゆるパラメータにアクセスでき、なおかつ自分でモジュールをノードベースで作成し、他のナイアガラシステムと共有することができます。
まさにカスケードの上位互換、今後のエフェクト表現を支えるツールとなっています。


それなのに、なぜ今カスケードなのか？
答えは単純、なぜEpicGames社がナイアガラを作らなきゃならなくなったかを理解する為です。
あと、現時点ではまだカスケードがUEを支えるパーティクルシステムだという事です。
現在ナイアガラは絶賛アップデート中で、昨日使えたメソッドが今日使えなくなっているかもしれません。
完全に実装される前に、今までUE4を支えたパーティクルツールをしっかり理解したうえで、次のツールに望もうという魂胆です。
ナイアガラはプロパティがほぼ全公開されているので自由度は極端に高いですが、その分扱いずらいと感じる人が絶対いると思います。
スケールデカくて泳げる範囲広いけど、イコールそれが泳ぎやすいかはまた別の話ということ。

![001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163667/c40b5d5e-850a-9c0e-e7b6-2bf3dbf4be12.jpeg)

カスケードは素早く単純に作りたい演出向け、ナイアガラは細かくじっくり作りたい演出向け、と分かれる気がしています。
というかパーティクルの基本概念が分かっていればある程度どんなパーティクルエンジン使っても最低限はできると思うので、そもそもパーティクル始めてやるよという人向けに書ければなと思っています。
前置きがかなり長くなってしまいましたが、それではやっていきましょう！


##本題
##パーティクル用のマテリアルを作成
まずはパーティクル用のマテリアルを作りましょう。お好きな名前でMaterialを作成して中身を以下の画像を参考に変更してください。
また、Detailsの項目も画像を参考に変更をしちゃいましょう。

![002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163667/09723f7f-63ef-0ab0-0a68-118b33734264.jpeg)

![003.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163667/8b33fc31-d3a7-1e01-6398-55e2abf3e9cd.jpeg)


やっていることはいたって単純で、Sphereを作ってParticleColorのRGBとアルファを分けて乗算しているだけですね。
定数はConstantからParameterへ昇格させています。別にしなくても構いません。各値はSphereRadiusが0.25でEmmisiveが5です。

##カスケードエディタでパーティクルを作成する
ContentBrowserを右クリックし、ParticleSystemをクリック、作成。お好きな名前をつけてエディタを開きましょう。
インターフェースの説明は公式に[任せる](https://docs.unrealengine.com/ja/Engine/Rendering/ParticleSystems/Cascade/index.html)として、
中で何をやっているかを見ていきましょう。まず初期状態には何が入っているか確認してみましょう。

![004.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163667/7ce2a9c0-119f-964f-4375-79ebfdd48eb5.jpeg)

こういったパラメータを調整して、自分が作りたいもののイメージし、どういう動きが必要かを考えて値を追加、調整していきます。
今回は単純に、先ほど作ったスフィアが地面から良い感じに出てくるエフェクトにしてみたいと思います。
では、Emittersパネルの中で右クリックして、 InitialLocationとAcceleration、Lightを追加しましょう。

![005.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163667/38a6c06a-8924-e87c-332f-6a3d47e52386.jpeg)

そしてRequiredをクリックしてDetailsパネルで先ほど作ったマテリアルを反映します。

![006.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163667/0bd2ea37-96cf-2dc7-c9b1-fac59dd3743b.jpeg)

ここから各モジュール内の値を細かく調整していきます。

Spawn : 放出量と奔出頻度の調整
Distribution Float Constractで定数で指定する
![007.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163667/eb479a8d-5531-ee2a-d8a8-b37bdf4ab8a5.jpeg)

Lifetime : パーティクルの寿命
Distribution Float Uniformでmin ~ maxの値の間で生成する。
![008.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163667/439f3311-2c01-57ed-f784-b9622625d49f.jpeg)

Initial Size : 初期サイズ
![009.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163667/aab6d686-92f5-0540-dde3-c33bc600df7f.jpeg)

Initial Velocity : 初期放出ベクトル
![010.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163667/fad39e65-189d-b5ad-9c04-92195719cc70.jpeg)

Initial Location : 初期放出位置
![011.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163667/d4315fc7-37b5-ea87-d068-d1bb473052c9.jpeg)

Color Over Life : パーティクルが生きている間に変化する色情報
カーブツールを使って滑らかに色が変化するように設定します
![012.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163667/a5ac8886-f475-d7a2-8d94-3f08901c566b.jpeg)
![013.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163667/4215f7a5-ced3-caa4-9bf1-5a3cb4e6c6e2.jpeg)

Acceleration : パーティクルに加わる加速度
![014.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163667/1139de98-414a-b4de-dfd9-2a7374d6a9fa.jpeg)

Light : 光の強さ、照射範囲
![015.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163667/a8bfeecb-1451-97df-0456-dce273ef9c64.jpeg)

今回、雰囲気を持たせるためにあえてLightを持たせましたが、このパーティクル数でむやみにライトを持たせるのはリスキーすぎるので気を付けましょう。
負荷が高すぎてロクにFpsがでなくなってしまうかもしれません。

##配置、お好み微修正

![016.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163667/8862ba47-5c1b-71ee-8791-d96616025b8f.jpeg)

では、パーティクルシステムをViewportにドラッグアンドドロップして、実際に動作を確かめてみましょう。
Viewportに入れた時点で既にパーティクルが動いていますが、DetailsのAutoActivateを無効にすれば、動作しません。
その場合レベルブループリントなどから直接Activateを叩いて実行してあげましょう。
	
あとはお好みで調整です。Playを押して動作を確認してみましょう！僕はもう少しポスプロとかライトとか足してあげて...
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">[UE4]今更？UE4のカスケードでパーティクル<a href="https://t.co/xH4opw8OFP">https://t.co/xH4opw8OFP</a> <a href="https://t.co/IvN5so4Mt2">pic.twitter.com/IvN5so4Mt2</a></p>&mdash; iwax (@iwax51101141) <a href="https://twitter.com/iwax51101141/status/1185946526268325889?ref_src=twsrc%5Etfw">October 20, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

やりました！グレイマンも喜んでいます！まぁ特にコリジョンとかつけてないんで身体をすり抜けちゃってますがまぁヨシとしましょう笑

##お疲れさまでした
結構適当にやっても流石アンリアルなのか、綺麗ですね。次回というかそのうちナイアガラにも触れてみたいと思います。
ではでは。