FulidNinjaを応用して使おう(*'ω'*)
今回はFulidNinjaを応用してNiagaraの作例だったりを、
紹介していこうと思います。
実際に紹介するのは下のTwitterで投稿したものになります。
今日でお盆休みも終わり。
— よしかた@アルゴンブログ (@yoshikata_game) 2022年8月14日
FluidNinjaの応用でNiagaraでのエフェクトを作ったり、
河の流れみたいなVectorField情報を出力して流れを作ったり、
ノイズ情報からレーザー用のテクスチャ作ったりした。 pic.twitter.com/G1YP6w03qv
※UE5.0.2で説明しています。
※Niagaraの細かい説明はしないのでご注意ください。
※説明の誤りや不明瞭な説明も多々あるかもしれませんがご了承ください・・・
流れのデータをNiagaraで応用する
実際にFluidNinjaのデータを元に作成していきます。
まずはFluidNinjaのプロジェクトを作成します。
FluidNinjaのプロジェクトの作成やアニメーション画像の出力は、
下記リンクのページで紹介しているのでご確認ください。
一応おさらいで今回も画像を出力するところから説明します。
出力したいエフェクトをFluidNinjaのプロジェクト側から作成します。
そしたら①の動作保存ボタンを押します。
最後に③の領域一番左のPNGボタンを押してアルファと流れの画像が出力されます。
注意点としてFluidConfigという項目のExternalSavePathで指定されたフォルダに、
出力されるのでご注意ください。
続いてNiagaraの方で使用するスクリプト処理を移行するようにします。
FluidNinja → Core → Niagara フォルダ内のNiagaraDynamicInputScriptを移行して、
別プロジェクトに移動する作業を行います。
続いてNiagaraのマテリアルを追加します。
FluidNinja → Core → Niagara → DefaultAssets内にある、
M_SpriteMaterialTransparentマテリアルを移行します。
上記の情報がそろったらNiagaraSystemを作成していきます。
コンテンツブラウザを右クリックしてNiagaraSystemを作成します。
こちらのNiagaraEmitterについてはEmptyから作成していきます。
これで完了したら実際にエフェクト設定していく。
まずはパラメータから設定していきます。
ユーザーパラメーターは以下になります。
DirectLight → LinearColor
FlipbookPlayerSpeed → Int32・IndirectLight → LinearColor
SubimageH → Int32・SubimageV → Int32
TextureDensity → TextureSample・TextureVelocity → TextureSample
続いてエミッタのプロパティでSimTargetをGPUComputeSimに変更します。
またそれに合わせてFixedBoundsも変更します。
これはFluidNinjaのNiagaraScriptのほうでGPUしか対応していないためです。
続いてEmitterStateを変更します。
ここではLifeCycle(エフェクトが出現する流れ)を変更します。
LifeCycleModeをSelfに変更して無限に動作するようにしています。
続いてどれぐらいのエフェクトを生成するか決めるSpawnRateを作成します。
続いてパーティクルのスポーンを変更します。
InitalizeParticleでLifeTimeとSpriteSizeを変更します。
LifeTimeは1~2の値で設定しています。
SpriteSizeについては自身のエフェクトに合う形で設定するのが良いかと思います。
続いてShapeLocationを追加します。
ShapePrimitiveをBox/Planeに設定して、Box/PlaneModeをBoxに設定します。
BoxSizeに関しては画像のサイズに合わせています。
midpointは0.5に設定します。
※UE4ではBoxLocationなど形状ごとに分かれていましたが、
UE5からShapeLocationに統合されているのでご注意ください。
それから下の方にあるOffsetの設定も変更します。
中心をパーティクルのPositionに設定して、
OffsetをAddVectorでVector設定にしてMakeVectorでVectorを生成して、
Zの値のみランダムで-10~10の値に設定しています。
続いてパーティクルの更新処理を作成していきます。
nm fluidで検索するFlipbookPlayerというものがあるのでこちらを追加します。
続いて中身を設定していきます。
各設定は下記になります。
Phase → DeltaTimeを指定
Speed → FlipbookPlaySpeedを指定(ユーザーパラメーター)
SubImagesH →SubImagesHを指定(ユーザーパラメーター)
SubImagesV →SubImagesVを指定(ユーザーパラメーター)
Texture → TextureDensityを指定(ユーザーパラメーター)
UV → 下記画像を元にパラメータを設定する。
※FluidNinjaの方でも同様のエフェクトがあるのでそちらも参考になります。
上記はアルファ画像を指定しているので、
流れの画像を使用する処理も追加してあげます。
流れの方は上記で作成した動作をコピーして、
TextureのパラメーターをTextureVelocityを指定します。
つづいてSolve Forces and Velocityを追加します。
VelocityもMultiplyVectorに変換してAddVectorを追加して、
「Make Vector from Linear color RGB」にして、
上記で作成したTextureVelocityを設定してあるモジュールを指定してあげます。
Bの方は流れの設定でXとYともに-5を指定してあげます。
続いてパーティクルの流れを設定するPostsolverPositionを追加します。
モジュールの追加nmfで検索すると出てきます。
こちらも先ほどと同様に画像やユーザーパラメーターを指定した、
モジュールをLinearColorに設定してあげます。
あとはエフェクトの色を設定します。
ScaleAlphaの方でAlpha画像の位置に合わせてAlphaが決まります。
最後にエフェクト用マテリアルを変更してあげて完了です。
実際に動作させたものはこのような形になります。
VectorFieldのデータを生成して活用する
続いてVecotrFieldの出力方法などの流れを紹介したいと思います。
FluidNinjaでは流れのデータをCSVで出力することが可能となっています。
この流れの情報をNiagaraに割り当てることが可能です。
ここではそちらの説明を行っていきます。
FluidNinjaのプロジェクトを起動して、
一番上の①のモードをNinjaFieldsに変更します。
そして②の赤丸を押してデータテーブルとして保存します。
出力されるデータはFluidNinjaプロジェクトのOutputフォルダに出力されます。
こちらのファイルをCSVで出力します。
出力したCSVファイルをワークパッドなどのテキストツール等で開き、
不要な箇所を削除して、.fga(VectorField用の拡張子)に変更します。
作成したファイルをコンテンツブラウザにドラッグして、
ちゃんとVectorFieldとして認識されると赤枠で囲ったようにファイルが追加されます。
あとはNiagaraのモジュールとして、
SampleVectorField・ApplyVectorField・SolveForceのモジュールを追加します。
SampleVectorFieldで先ほどのfgaファイルの指定やどの領域の動きを指定します。
ApplyVectorFieldは流れの強さを変更します。
SolveForceAndVelocityは流れを生成するために作っておきます。
設定などは特に変更しません。
以上でVectorFieldの説明は以上です。
最後に
FluidNinjaLiveを買いましょうよ!!!!!
触ればわかると思いますがいろいろ制約があったりするので・・・
以上です。