NiagaraFluidsで作成する煙テクスチャのことはじめ~流体シミュレーションは意外と怖くない~

こんにちは!
株式会社アドグローブ ゲーム事業部のエフェクトデザイナー、仁井です。

本記事ではUnreal Engine(以降UEと呼称します)のNiagara Fluidsというプラグインを活用して
主にゲームエフェクト用の煙テクスチャ素材の作り方を紹介します。

はじめに

Niagara Fluidsとは、UE内で手軽に流体シミュレーションができる、UE5以降に登場した比較的新しいプラグインになります。
PCへの負荷は通常のNiagara Emitterよりかかってしまいますが、Fluidsを使用するとリッチな流体表現が可能になります!
何より外部ツールを介さずに、UE内ですべてできてしまうのがとっても便利だと思いませんか?
今回は煙シミュレーションにスポットを当てて、作成方法から実際にゲームエフェクトの素材としてアセット化させるところまでまるっと解説します。
これを機に、皆さんも流体シミュレーションで色々作成してみましょう!

プラグインの導入

まずはNiagara Fluidsの導入から始めます。
UEのバージョンは5.6で作業しています。



① 画面右上の編集からプラグイン画面を開く
② 検索欄にFluidと入力して選択
③  再起動で導入完了!

Niagara Fluidsのテンプレートを開く

① コンテンツフォルダを右クリックして、Niagaraシステムをクリック


② テンプレートが出てくるので、検索欄にmasterと入力して、「Grid3D_Gas_Master_Emitter」を選択して作成


その他にもテンプレートがあるので、ぜひ色々試してみてください!

③ 作成したNiagaraSystemを開く
煙と長いエミッタが見えていれば、準備完了です!


煙シミュレーションの下準備

ここからは実際にこのテンプレートを編集して、まずは下準備から始めます!

① 編集時によく見る場所



長いエミッタを見て一瞬混乱するかもしれませんが、基本的にはエミッタの概要のタブをクリックして各項目を設定するだけなので安心してください!
もう少し慣れてくると、エミッタの中にモジュールを追加して、さらに編集することが出来るのですが、今回は割愛します。

② 計算範囲と解像度を設定する


Simulationタブから、World Sizeを600×600×800に、Pivotは0×0×0、Resolution Max Axisを200に設定します。
Resolution Max Axisに関しては、高すぎると動作が重たくなるので、お使いのPCに合わせて適宜調整してください。
ただし、なるべくきれいな素材として書き出すために今後解像度を上げるので、今のうちにPCの限界を試しておきましょう!
私の場合は、200~300がリミットでした。

これで下準備は完了です!

煙の発生源となるパーティクルの作成

① 煙の発生源となるパーティクルエミッタを同NiagaraSystem内に作成


② Fountainエミッタを追加


③ 作成したFountainエミッタを編集
この際、煙のシミュレーションは非表示にしておくと作業しやすいです。
Fountainエミッタのモジュールの構成は以下の画像を参考に作成してください。


Fluids Gas Sourceは必ず忘れずに追加してください!今回の肝になります!

では、各項目を軽く解説していきます。

エミッタのプロパティ


Determinismをオンにします。
これは、素材を書き出す際に煙が毎回ランダムになってしまうと作業しにくいので、それを避けるために設定します。
Sim Targetを、GPUCompute Simに変更します。
GPUモードにしないと、煙エミッタに読み込めないので、この設定にします。
Calculate Bounds ModeはFixedに。

エミッタの更新

Spawn Countは、2500.0に設定します。


ここで大きめの数字を入力して、適宜調整します。
今回は、最後までこの数字で作業します。

パーティクルのスポーン

Initialize Particleは、画像のように設定してください。


寿命を0.05~0.1と小さい数字にします。
おそらく再生しても一瞬だけ粒が見えて、ほとんど見えない状態かと思いますが、これで大丈夫です!
この部分の値を大きくするほど、煙が長く出続けます。
今回は、そこまで長時間煙を発生させ続けなくても良いので、この設定で進めます。

Shape LocationはSphereモードのままで設定します。


Sphere Radius を1.0~8.0のランダムにします。
後で形を変更することは可能なので、半球やドーナツ型など、色々な形に変更して遊んでみてください!

Add VelocityはFrom Pointに変更します。
Velocity Speedは50.0~800.0の範囲のランダムに設定します。


パーティクル更新
 

Dragで中心から外側に広がるパーティクルの速度感を設定します。


数値は、5.0~25.0のランダムで設定してください。

Curl Noise Forceは、煙が揺らめきながら広がっていく動きを付けるために使用します。


Noise Strengthを2500.0~5000.0、Noise Frequencyを0.5~3.0のランダムに設定します。

Fluid Gas Sourceを画像のように設定します。


Densityは0.1~0.5のランダムに設定します。
これは煙の濃さを決める数値で、今回は少し薄めに設定します。

Radiusは5.0~8.0のランダムに設定します。
これは煙の一粒一粒の大きさです。
初期値の1.0だとかなり小さくてほとんど見えない状態なので、今回はこの数値に設定しています。
その他の設定は初期値のままで大丈夫です。


最終的なスプライトの動きはこんな感じです!

では、最後にスプライトの粒を見えなくするために、Sprite Rendererのチェックを外して、エミッタに名前を付けましょう!
今回はSource_Smokeという名前に設定しました。

これで発生源となるパーティクルの準備は完了です。

次はいよいよ煙部分を編集していきます!

煙エミッタの編集

では、各項目を解説していきます。

① Simulationタブ
ここで変更する項目は赤枠で囲った部分だけです!


Density BuoyancyとTemperature Buoyancyは画像のように小さい数値に設定してください。
小さくする理由は、初期設定のままだと浮力が強すぎて、勢いよく煙が上まで上がってしまうからですね。

Attributeの中の、Dissipation Rate Densityは0.5~1.0のランダムに設定します。
これは煙が消える速さです。初期設定の0.3だと少し煙が長生きしすぎるのでここで調整します。

ここまでの見た目はこんな感じになっているはずです!


② Sourceタブ
いよいよ下準備で作成していた発生源のSource_Smokeをここで使います!

まずは、SphereSourceのチェックボックスにチェックが入っているかと思いますので、オフにします。

エディタが落ちる場合があるので保存を忘れずに!

次に、Particle Source TypeをEmitterに変更します。

Deterministic Sourceをオンにしておきます。
発生源を作成した時にも設定した、毎回ランダムに出現するのを避けるための項目ですね。

以降は画像を参考に編集していきます。


Emitterに変更後、色々項目があるのですが、先にParticle Readerの中のエミッタバインディングを設定します!
初期設定はGrid3D_Gas_Master_Emitterが割り当てられているので、ここをSource_Smokeに変更します。


割り当てが出来たらこのような見た目になるはずです。
ついに煙の見た目が出来てきましたね!
このままでも良いですが、もう少しかっこよくなるように編集していきます。

Use Streakingをオンにして、Streak Rateを5.0~15.0のランダムに設定します。
これは、粒子が移動する軌跡に煙を発生させる設定です。
オンにすると滑らかに煙が広がっていくのが分かるかと思います。

Read Divergenceもオンに設定します。
数値は初期値で大丈夫です。
これは大きい数値を割り当てると、その分膨張して大きな煙になります。

ここまで設定すると、このような見た目になっているはずです。


発生源のエミッタをただ読み込んだ時と比べると、少しリアルな感じになってきましたね。

ここからさらに良くしていきます!

③ Forceタブ

Vorticity(過度)やTurbulence(乱気流)を追加して、煙に動きを付けていきます。
これを設定するとよりかっこいい煙になるので、さっそく編集していきましょう!

Vorticity

初期値は2.5になっているので、0.1にします。


Vorticityが大きすぎると荒い見た目になってしまうので、小さな値に設定します。


過度の値を編集したことによって、後半の煙の動きが少し変わったのが分かるかと思います。

Turbulence

Turbulence 1のCalculate Turbulenceのチェックボックスをオンにします。

では、画像のように各項目を設定していきましょう!


Turbulence Frequencyを0.01にします。
ここを大きな数字に設定すると、煙が大暴れしてしまいますので、注意して下さい。
Turbulence Gainは、1.0~3.0のランダムに設定します。
Velocity Based Turbulence Gainを2.0~3.0のランダムに設定します。

TurbulenceやVorticityは、あまりにも大きい数値に設定してしまうと、エディタが固まってしまう場合があります。
数値を設定する場合は、0から小刻みに調整しましょう。

そしてついに..

煙の完成です!


糸のように広がりながらちぎれて消えていく様子が確認できるかと思います。

ではいよいよこれを素材にしていきます!

作成した煙をベイクしてスプライトシート化させる

Niagaraには、ベイカーという機能があります。
今回はこのベイカーを活用して、スプライトシート素材にしていきます。


画面上部にある、シェフ帽子のアイコンがベイカーです。

① まずはカメラの角度を編集します。

画面上部のパースペクティブを押して、前面のチェックボックスをオンにします。


そのとなりの目のマークを押して、カメラの正投影幅を設定します。


これでカメラの設定は完了です。

② 書き出し設定を変更する。

今回は4kのスプライトシート素材として書き出すので、画像のように各項目を設定します。


③ 時間範囲を設定します。

初期設定から、画像のように変更してください。


時間範囲を設定する際のポイントは、最初のフレームを何もない空白にしないことと、終わりのフレームはシミュレーションが消えたタイミングに合わせることです。
こうすることで、スプライトシート素材に書き出したときに、何もない空白の部分を出来るだけ減らして無駄をなくすことができます。

➃ ベイクして書き出し

ベイクと言っても、後はボタンを押すだけなので簡単です。
画面右上のシェフ帽子のボタンをクリックするだけで書き出ししてくれます!


完成した素材は、煙シミュレーション用に作成したNiagara Systemが格納されている場所に生成されています。


このままだと見えづらいので画像は少しだけ明るさを上げています。
そのままでも使用できるので大丈夫です!

作成したスプライトシートを確認する

作成した煙のスプライトシートを実際にNiagaraに読み込んで確認してみましょう!

① まずはマテリアルを用意します。
今回は簡単に確認するだけなので、最低限で大丈夫です。


マテリアルに詳しい方はもう少しこの部分をこだわっても良いと思います。

② 次に、Niagaraに読み込みます。
新しくNiagara Systemを作成して、適当なテンプレートを選びます。
Sprite Rendererにマテリアルを適用させて、サブUVをオンにします。
今回作成したスプライトシートのSub Image SizeはX8.0 , Y8.0です。

③ Sub UVAnimationモジュールを追加する
スプライトシートはそのままだとアニメーション再生されないので、Sub UVAnimationモジュールを追加します。
画像のように設定をして、再生する準備はできました!


➃ 確認用のエミッタの構成は以下の画像の通りです。


ここはお好みで設定してみてください。
今回は、円柱状に5個バーストさせる簡単なエミッタを作成しました。

シーンに配置して、完成!


準備段階からここまでお付き合いいただき、ありがとうございました!
実際にシミュレーションしたものをアセットとしてすぐに使えると、達成感がありますよね。
Niagara Fluidsはまだ情報が少なく、学習のハードルはちょっと高めですが、一歩踏み出せばエンジン内でここまでできてしまう便利なプラグインです。
今回紹介した煙に加えて、炎や爆発、液体のシミュレーションも作れるので、ぜひ試してみてください!

最後に

今回は入門として、Niagara Fluidsについてさっくりご紹介しました。
今後ご要望があれば、もう少し踏み込んだ内容も記事にできればと思います。
本記事が、皆さんの流体シミュレーションへの第一歩になれば嬉しいです。

最後までお読みいただきありがとうございました!


アドグローブでは、さまざまなポジションで一緒に働く仲間を募集しています!
詳細については下記からご確認ください。みなさまからのご応募お待ちしております。

採用情報