UE4 Niagara UI Rendererでタイトル画面を作ってみた

# 序文
NiagaraSystemをUI空間上でシミュレート出来る無料プラグインが出ました！
https://www.unrealengine.com/marketplace/ja/product/niagara-ui-renderer?sessionInvalidated=true

これでアーティスト側で豪華なUIが作れるようになるぞ！と思ったんですが、普段Niagaraを使っていて、あまり見慣れない2D空間でのシミュレーション用のモジュールが多くて、思ったより苦戦しました。

とりあえず今回は触りとして今回はシンプルなエフェクトをポケモン金銀版のタイトル画面を再現したいなと思います。
https://youtu.be/sL6wUXj102I?t=3

**※あんまり詳しくないので、間違ってるかもですがご了承ください…。**

##サンプルプロジェクトを見てみる。
ドキュメントを見ると丁寧に解説動画もついてるし、助かります。
今の所、gpuパーティクルをサポートしておらず、Mesh Rendererもサポートしていないみたいです。
パーティクル数が多いエフェクトは避けたほうが良さそうですね。

[公式ドキュメント](https://sourysk.github.io/NiagaraUIRendererDocumentation/)
[サンプルプロジェクト](https://github.com/SourySK/NiagaraUIRenderer/releases/download/v1.0/NiagaraUIRenderer_Demo_ProjectOnly_1.0.2_4.26.zip)

https://twitter.com/ankokuparty/status/1464835630727249922?s=20

サンプルプロジェクトのWBPの中を見ていくと、パレットの中にNiagaraSystemWidgetなるものが追加されていて、これを使ってパーティクルを出しているみたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254626/395e1a0f-3b4b-de0e-d24a-b2b9290f98cd.png)

公開されているパラメータはこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254626/0f45cc20-4fff-2ed8-0348-4c5de0521746.png)

|パラメータ名|概要|
|:---:|:---:|
|NiagaraSystem|そのままの意味|
|Material Remap List| Materialの置換が可能で、MaterialDomainがUserInterfaceになっていないMaterialをUI用マテリアルに置き換えるのに使用する。|
|Auto Activate|最初からエフェクトを表示させるかどうか。|
|Tick when Paused|ゲームPause中でもエフェクトをの再生を続けるかどうか。ESCでメニュー画面開いたりした時のWidgetなら、動いてほしかったりしますね。|
|Fake Depth Scale|Fake Depth Scaleを使用するかどうか。後ほど説明します。|
|Fake Depth Scale Distance|カメラとパーティクルの距離に対してスケールをかける。|
|Show Debug System in World|World上に存在しているNiagaraUIComponentを表示するかどうか。|

パラメータを見ただけでは理解できなかったのですが、
①NiagaraSystemWidgetの中からNiagaraUIActorがワールド上にスポーンされる。
②そのNiagaraUIActorを通してNiagaraUIComponentというNiagaraComponentを継承したコンポーネントが生成される。
③NiagaraUIComponentで再生しているパーティクルのRendererから、UI用RenderDataを生成してNiagaraWidgetのAddRenderData関数に渡して描画している。
という流れでUIにレンダリングしているみたいです。

FakeDepthScaleというのは、パーティクルごとの奥行きが違うNiagaraを再生する時に使う機能っぽいです。
そもそもUI上では3D座標を持つカメラが存在しないので、パーティクルの奥行きを表現出来ないです。
なので、FakeDepthScaleでは、独自の計算でScale値を計算しているみたいです。
Fake Depth Scale Distanceの値が小さいほど、奥行きにスケールの変化が激しくなるみたいです。0だと例外で等倍です。
なので、パーティクルによって奥行きの差が激しいNiagaraを使用する場合Fake Depth Scale Distance距離をそれに応じて大きくしてやるといい感じに見えます。
※認識間違ってたらごめんなさい！！！！！

# 実際に作ってみる。
とりあえず普通にNiagaraEffectを作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254626/7f51748c-514e-60a9-9763-6bb6a4d37d71.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254626/b2a855b9-5ddf-82f3-2ee6-fd32a8367ab2.png)

今作成したNiagaraはDefaultSpriteMaterialのままなので、UI用マテリアルを作成します。
とりあえずめちゃ簡単にそれっぽいマテリアルを作成。
MaterialDomainをUIにしてやるのが大事です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254626/8d60f7d8-4bc3-8c71-fb7c-7c7d89870216.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254626/be451a47-54b1-76d0-c3f6-66ad672e05db.png)

そして、NiagaraSystemWidgetのパラメータからマテリアルの置換をしてあげます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254626/b5b5c774-1004-2628-1569-9360c8eecd31.png)


これでUMG上でパーティクルが動くようになりました！すごい！簡単！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2254626/cb5e6467-24d1-06a2-4d36-07053dfc254f.png)

あとはパーティクルの色や角度、SpawnRateを調整して、アニメーションで上下して、金銀版のタイトル画面に近づけてみます。
完成はこんな感じ。圧倒的リソース不足を感じますが、とりあえず今回はNiagaraUIRendererの触りとして記事を書いているので、簡易的な検証で済ませてます。

https://twitter.com/ankokuparty/status/1464836385068617728


# まとめ
今回はナイアガラを使ったおしゃれなUIの可能性は感じますね。
NiagaraUIRendererの触り程度の事しか書けませんでしたが、実際に今作ってるゲームでNiagaraUIを作る際にはもう少し色んなパターンのNiagaraUIを作成してみたいと思っています！おわり！！