大雨のち大晴れ

C++とかUE4とかの記事を書くかもしれないブログ

【UE4】Niagaraで煙を出してみる

すごくお久しぶりです。今回はUE4Niagaraを使用して煙のエフェクトを作成しようと思います。

 

 

完成物

完成するとこんな感じになります。

今回はNiagaraの使い方に注力したいのでテクスチャやマテリアルはデフォルトの物を使用しています。

また、今回はUE4.25を使用して作成しています。

 

今回の内容について

Niagaraには豊富なテンプレートがありますが、今回は何もないEmptyの状態から作成していきます。

扱っていく項目については以下の通りになっています。

・パーティクルの初期設定(寿命、初期スケール)

・パーティクルの放出設定

・生存時間によるαの制御方法

・生存時間によるスケールの制御方法

 

逆にスクリプトモジュールについては今回は扱っていません。

また、何か間違っている点等あればご指摘頂けると幸いです。

それではよろしくお願いします。

 

制作開始

 1, NiagaraEmitterの作成

まず初めにNiagaraEmitterの作成します。

コンテンツブラウザ上で右クリックから「FX」->「ナイアガラエミッタ」を選択します。

「テンプレートに基づく新しいエミッタ」を選択し「次へ」。

 「Empty」を選択し「終了」します。

名前は何でもいいですが、今回は分かりやすい様に「NEmi_Smoke」にしました。

 

2, パーティクルの放出

「NEmi_Smoke」を開いても何も表示されない状態なので、とりあえずパーティクルを出してみます。

 

まず初めに「エミッタの更新」の「+」をクリックし「Spawn Rate」モジュールを追加します。

f:id:user_ooame:20201121171536j:plain

こちらのモジュールは1秒間に放出するパーティクルの数を設定する事が出来ます。

今回は「SpawnRate」を「10」に設定します。

f:id:user_ooame:20201121172022j:plain

 

これでプレビューでパーティクルが確認出来る様になったので、次は パーティクルに速度を与えてみたいと思います。

 

「パーティクルのスポーン」に「Add Velocity in Cone」を追加します。

f:id:user_ooame:20201121172458j:plain

 

次に速度の強さを設定して行きます。設定自体は「Velocity Strength」から行えます。

今回は速度をある程度ランダムにしてみたいと思います。

 

「Velocity Strength」の右端にあるプルダウンを開き、「Uniform Ranged Float」を選択します。

f:id:user_ooame:20201121173434j:plain

すると、「Minimum」と「Maximum」の設定項目が出てくるので値を設定していきます。今回は「Minimum」が「70」、「Maximum」が「100」に設定してみました。

f:id:user_ooame:20201121173638j:plain

これでパーティクルが動き出しましたが「X+」方向に放出されているので、上向きに放出されるように修正します。

f:id:user_ooame:20201121173745j:plain


パーティクルの放出方向は「Cone Axis」で行えるのでこちらの値を以下の様に設定します。

f:id:user_ooame:20201121174219j:plain

これで上向きにパーティクルが放出されるようになりました。

 

ついでにパーティクルの放出角度を「30」に設定しておきます。設定は「Cone Angle」から行います。

f:id:user_ooame:20201121174428j:plain

 

3, パーティクルの初期設定

パーティクルの放出が終わったので、次に初期設定を行って行きます。

初期設定はデフォルトで追加されていた「Initialize Particle」モジュールから行います。

 

こちらの設定は新しく説明する事が無いので画像を見ながら設定してみて下さい。

ハイライトされている項目が設定した項目になります。

f:id:user_ooame:20201121175233j:plain

「Sprite Size」の設定について少し説明したいと思います。

この項目自体は「Vector 2D」の設定項目ですが「Vector 2DFrom Float」を使用する事で「X」と「Y」の値を一括で設定出来るようになります。

更に「Vector 2DFrom Float」の設定に「Uniform Ranged Float」を使用する事でfloat値でランダム範囲を制御する事が出来ます。

 

4, パーティクルの動作制御

次にパーティクルの動作を制御してもう少し煙っぽくしたいと思います。

具体的にはパーティクルのスケールとαを制御して行きます。

 

まず初めにスケールを制御してみます。

目標は産まれたては小さくて、徐々に大きくなる感じです。

「パーティクル更新」に「Scale Sprite Size」を追加します。

f:id:user_ooame:20201121181003j:plain

設定ですが今回はカーブを使用してみたいと思います。

まず「Scale Factor」をfloat値で設定出来るように「Vector 2DFrom Float」を設定します。

次に「Float From Curve」を選択します。

f:id:user_ooame:20201121181306j:plain

このままだと産まれたてが大きくて、消滅時には小さくなってしまっているので設定を逆にします。

f:id:user_ooame:20201121181532j:plain

これでもいい感じですがもう少し調整して行きます。

 

まず最初のキーの値を「0.2」に設定します。

f:id:user_ooame:20201121181932j:plain

 

次に「Shift」+「左クリック」でキーを追加し、「時間」を「0.25」に「値」を「0.5」に設定します

f:id:user_ooame:20201121182122j:plain

これでスケールの制御は完成です。

因みにカーブのX軸が何の値を基にしているかですが、こちらは「CurveIndex」から値を受け取っているようです。

デフォルトでは「NormalizedAge」が設定されているのでパーティクルの寿命の値でカーブの値を取得している感じだと思います。

「NormalizedAge」は0~1で正規化されたパーティクルの寿命になります。

 

最後にαを制御して行きます。

現状はパーティクルがパッと消えてしまうので寿命に合わせてα値を下げる事で消滅を自然にしたいと思います。

 

「パーティクル更新」に「Scale Color」を追加します。

f:id:user_ooame:20201121182944j:plain

「Scale Alpha」を寿命に合わせて制御すればいいのですが、今回はコードを直に書く方法とパラメータをリンクして設定する方法を紹介したいと思います。

 

まずは直にコードを書く方法です。

プルダウンから「新しい式」を選択します。

f:id:user_ooame:20201121183755j:plain

式はこちらを入力します。「1.0f - Particles.NormalizedAge」

f:id:user_ooame:20201121183835j:plain

こちらの方法はすぐに色々試せたりするのでありがたいですね。

 

次にもう一つの方法です。

「One Minus Float」を選択します。

f:id:user_ooame:20201121184019j:plain

「Float」に「Particles NormalizedAge」を設定します。

f:id:user_ooame:20201121184227j:plain

「One Minus Float」は「1.0 - (入力された値)」の結果が返ってくるので、0~1を反転する時に便利です。

 

以上、お好きな方で設定して貰えればと思います。

 

完成

今回の内容はこれで以上になります。お疲れさまでした。

テクスチャ使ってない割には煙っぽくなったのでは無いかと思います。

また、レベル上に配置するにはNiagara Systemを使用しないといけないので注意して下さい。

 

Niagara以前触った時よりもGUIが分かりやすくなってていい感じでした。

更新がめちゃめちゃ遅れたのには触れないでおきます。。

 

最後まで見て頂きありがとうございました。

それでは良いNiagaraライフを…。