moyasiエフェクト館

主にエフェクト関係の記事を上げていこうかと思います。


エフェクトに関係する記事上げてきます
エフェクト関係の記事の内容は緩く募集中
自分がわかる範囲であれば書いていこうかなと。

【Niagara】飛び道具エフェクト系モジュールの構築1

f:id:tktknkyo:20211227183031p:plain

VerはUE4.27です

 

【初めに】

エフェクトの制作そのものというよりも

モジュール側の制御となります

長くなりそうなので記事は分ける想定です。

また、今回はスクラッチパットで作ったものを、モジュールに変換するつくり方で作ります。

 

【下準備】

f:id:tktknkyo:20211227194715p:plain

空のシステムから作成でNiagaraシステムと

f:id:tktknkyo:20211227194817p:plain

Emptyからエミッターを生成します。

今回はモジュールを作る目的なので、空の状態から作っていきます。

f:id:tktknkyo:20211227205044p:plain

また、レベルに作ったNiagaraシステムも配置しておきます(置いておくと確認しやすくなります)

 

f:id:tktknkyo:20211227213318p:plain

また、3Dモデルの方が都合がいいので、今回はこのようなモデルを使います。

同じである必要はありませんが、原点が先端に来るようにし

根元がZのマイナス軸になるようにしてください。

どの軸でも対応できるやり方もありますが、それは次以降の記事で触れていきます。

 

Niagaraシステムの下準備】

まずはNiagaraシステムに、作ったエミッターを入れます

最終的にはエミッターに入れたほうがいいのですが、システムに入れてから、システム側で色々と組んでいきます。

 

 

f:id:tktknkyo:20211227235720p:plain

最初から入っているモジュールは「Emitter Stare」と「Particle State」だけ残して他は不要です。

 

f:id:tktknkyo:20211227220320p:plain

次に発生自体をさせる為の「Spawn Rate」「Mesh Renderer」を追加します。

モデルは先ほどのものを設定しておきます。今回は処理部分なのでマテリアルなどは任意で

SpawnRateはわかりやすくする為に持続的に発生させています。数は任意でいいですが10~30程が確認しやすいかと思います。

 

今回本題のモジュールですが、スクラッチパットで作り、そこからモジュールのアセットとして出力します。

 

f:id:tktknkyo:20211227221358p:plain

クラッチパットの、モジュールの右にある+ボタンをクリックして生成します

名前は「NM_Test」と付けておきます。

 

f:id:tktknkyo:20211227221752p:plain

名前をつけたら、あとはパーティクルのスポーンの所に設定すれば下準備は完了です。

 

【スクラッチパットの設定】

汎用的なものを目指すので、ほぼほぼ使うであろう機能から入れていきます

 

f:id:tktknkyo:20211227222854p:plain

Vector4型の【Color】

 色を制御するパラメータ

Float型の【LifeTime】

 寿命を制御するパラメータ

Vector型の【Position】

 座標を制御するパラメータ

Quat型の【Rotation(Quat)】

 角度を制御するパラメータ

Vector型の【Scale】

 大きさを制御するパラメータ

 

f:id:tktknkyo:20211227223506p:plain

必須ではありませんが、パラメータは初期値とソート順を設定する事もできるので

必要であればやっておくと良いです。

 

f:id:tktknkyo:20211227223532p:plain

クラッチパットを編集したときは、ここの適用のボタンを押さないと

変えた部分が反映されないので、そこも注意してください。

 

f:id:tktknkyo:20211227235929p:plain

LifeTime、Color、Scale

この三つはややこしい部分は特にありません、Scaleだけは、エンジンオーナーの情報とMultplyと乗算しておくと良いです。

 

 

f:id:tktknkyo:20211228114648p:plain




座標と角度、座標は角度で後々対応する必要があるのでこちらで設定しておきます。

Positionはエンジンオーナーの情報とAddで良いです

角度の情報Rotation(Quat)をMeshOrientationに繋ぎます

 

f:id:tktknkyo:20211228115315p:plain

Niagaraシステム側で、RotationにエンジンオーナーのRotation情報を入れ込みます(右の▼マークを押すと検索できます。)

 

f:id:tktknkyo:20211228000643p:plain

この状態で、Niagaraシステムをレベル上で回すと、発生しているモデルも同じように回ってはくれます...が

元々のモデルの向きと、Niagaraシステムからの矢印の向きがあっていない状態です。

対応する向きのモデルにする方法もありますが、今回はNiagara側で対応する前提で組んでいきます。

また、発生ごとに角度のランダムも対応、発生位置も角度に合わせての対応、これらもやっていきます。

 

【角度の乱数】

今回穴の空いているモデルをサンプルで出しているのは、角度をわかりやすくする為です。

f:id:tktknkyo:20211227183031p:plain

最終的にサムネ画像のような、角度をランダムにする向きに持っていきます。

 

f:id:tktknkyo:20211228115606p:plain



今度はNiagaraシステム側に数値そのものを入れていきます。

「Rotation(Quat)」は角度を制御しているので、こちらを調整していきます。

まずは「MultplyQuaternion」を適応して角度の合成自体を作ります

 

一つ目はエンジンオーナーのRotation情報を入れ込みます

 

二つ目は「MakeQuat from Axis Angle」を適応します(パラメータの右の▼マークから検索すると出てきます。)

これでVectorとFloatが出てくるので、Vector型にはZのみ1を

Floatには「Rand Range Float」を適応し、0と360を設定します。

 

f:id:tktknkyo:20211228001919p:plain

この設定で、発生する角度がランダムになります(穴の空いてるところが目立たなくなっていると思います)

矢印の向きと合っていない問題がここで発生しているので、ここを調整していきます。

 

f:id:tktknkyo:20211228120820p:plain

MultplyQuaternionをさらに追加して、三つを乗算でそれぞれ計算します。(順番によって動きが変わることがどうもあるみたいなので注意してください)

 

f:id:tktknkyo:20211228121141p:plain

ここまでの設定で、矢印の方向に合わせた向きに出るようになりました。

座標の調整もここからやっていきます。

 

 

【座標の調整】

f:id:tktknkyo:20211227183031p:plain

このサムネの画像を見てもらうと、矢印の前後に発生位置がばらついているのが解ると思います。

 

座標調整用のPositionというパラメータはあるので

 

f:id:tktknkyo:20211228122628p:plain

X軸が0~200のランダムになるように設定します

 

f:id:tktknkyo:20211228122659p:plain

そうすると、Niagaraシステムのプレビュー上では綺麗に位置が取れていますが

 

f:id:tktknkyo:20211228122746p:plain

レベル上にもっていくと、このように変な位置になっています。

理由は角度の対応を座標に適応する処理を入れていないからです。

既にあるモジュールからは対応されているものもあると思いますが、自分で作る場合はこの辺の対応もしていく必要があります。

 

f:id:tktknkyo:20211228123434p:plain

対応そのものは複雑なものではなく

「Multply Vector with Quaternion」で角度を適応するだけで終わります。

一つ注意は、エンジンオーナーのPostionと加算する前に回転をかけないといけないという点。

 

クラッチパット上で編集せずとも

f:id:tktknkyo:20211228124343p:plain

こういう組み方をすれば処理は同じように動いてくれます。

ただ、エンジンオーナーの部分に赤線を引いてありますが

このような組み方は、こういう情報が割とむき出しになってしまい、解りにくくなる場合があります。

 

AddやMultplyなども同様で、スクラッチパットやモジュール内で組んでしまえば、このようなものは出てこないので、設定項目も比較的にスッキリするようになります。

 

f:id:tktknkyo:20211228125007p:plain

モジュール自体のアセットにするには、右クリックから項目があるので、そこから行うことができます。

 

 

今回はここまでとなります、まだ処理が甘い部分がある部分は次以降の記事で触れていきます。