moyasiエフェクト館

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


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

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

f:id:tktknkyo:20211227183031p:plain

Verは4.27です

 

【初めに】

tktknkyo.hatenadiary.jp

 

今回はこの記事の続きで

1の記事であまり触れていなかった部分や、制御などをもう少し詳しく書いていきます。

 

【角度の整理】

 

f:id:tktknkyo:20211228182114p:plain

まずは1の記事で作った「Rotation(Quat)」の中身が長いので整理しましょう

クォタニオンを三つ合成しるのは固定でいいので、Niagaraシステム側ではなく、モジュール側に計算を入れます

また、エンジンオーナーの情報も固定で使うので、こちらもモジュールの中に仕込みます

 

f:id:tktknkyo:20211228182639p:plain

今まで使っていた「Rotation(Quat)」を削除して

新しいQuaternion型のパラメータとしてQuat1とQuat2を追加します。

そしてエンジンオーナーのRotationとそれぞれ合成します。

 

f:id:tktknkyo:20211228182940p:plain

そしたら先ほどと同じ情報を入れます

これで動きは同じで不必要な項目は表示されない状態になります。

 

大分行数はスッキリ減りました...がまだ減らせますね

そもそもNiagaraシステム上でクォタニオンを作るのではなく

必要な情報から、モジュール側でクォタニオンを生成しましょう

二つとも、回転軸のVectoruと回転角度のFloatから生成しているので、これらに置き換えます

 

f:id:tktknkyo:20211228184843p:plain

パラメータをVectorとFloatに分解するとこのようになります。

Floatの角度の後には「DegreesTpRadians」を入れています

必須ではありませんが、これがないと角度はラジアンで制御する事になるので注意。

モジュール側で回転軸と角度からクォタニオン生成はVector4から作ることになります

パラメータでVector4からでもいいのですが、角度のFloatのみ乱数をしにくくなるので、個人的にオススメはしません。

 

f:id:tktknkyo:20211228185144p:plain

これでここまでスッキリさせる事ができるようになります。

乱数も制御できれば良かったのですが、かなりややこしそうなので、一旦置いておきます(できそうなら視野に入れます)

 

 

整理自体はこれでもいいのですが、もう少し手を加えていきます。

 

回転軸に入っている数値、今の現状だとシステム側ではなく、モジュール側に固定値を入れてしまっても問題の無い作りになっています。

 

f:id:tktknkyo:20211228185554p:plain

ですが、このモデルのように、向いている方向が違うモデルの場合、モジュール内に固定値を入れてしまうと対応する事ができません。

なので、回転軸の数値を入れて対応が今の状態なのですが

X,Y,Zのどれかであるならば、軸の方向だけ指定する仕方も可能なので、そこも触れていきます。(流石に原点の位置が変なところにあるとか、方向が変な向きのものは対応しきれませんが)

 

まずは角度に乱数を与えているQuat2から調整していきます。

f:id:tktknkyo:20211228190349p:plain

Niagaraには、軸専用かのようなパラメータが既に存在しています

Axisなどで検索するとすぐ見つかると思います。

名前が妙に長いですが、単純にXかYかZのどれかの軸を選択して出力するパラメータとなります。

 

f:id:tktknkyo:20211228190803p:plain

このパラメータ使う手段として、等しいとあるノードを使いますが

こちらはパラメータを自分で変換する必要があります

 

f:id:tktknkyo:20211228191012p:plain

変換したら、回転軸のパラメータを接続して判定をとります。

出力はbool型になるので、選択ノードで条件によって取得する軸を選びます。

 

f:id:tktknkyo:20211228191140p:plain

実際に軸を作っている変換ノードがややこしくなっていますが

XAxisはXのみ1のように、対応する軸のみ1を接続

それ以外は0を接続しているだけです。

 

f:id:tktknkyo:20211228191649p:plain

クォタニオンの生成して繋げるところまで終わるとこのようになります。

 

Quat1の方も調整する場合は、それぞれ判定をとって、それに合わせた角度と回転軸を設定してあげてください(やり方は同じなので記事内では省きます。)

 

 

【位置調整】

1の記事で、座標のところは角度に対応はしたものの、XYZでそれぞれ数値入れるスタイルでやっていました...が

前後なら前後の専用の数値の方がおおよそ調整しやすいと思いますし

前後以外の、中央から外に出すパーツは、外に向かう角度と距離の方が調整しやすいと思うので、その部分を調整していきます。

 

f:id:tktknkyo:20211228204509p:plain

パラメータを作ったら、マップ取得に入れていきます

前後に出す距離の「Position_BackLength」

前後以外に出す距離の「Position_SideLength」

前後以外に出す距離の角度を制御する「Position_SideLengthAngle」

 

f:id:tktknkyo:20211228204744p:plain

前後を取得するだけなら、角度の時に使った軸と乗算で済むのですが

ほかの部分はどうしても調整しにくくなるので注意です。

 

f:id:tktknkyo:20211229084807p:plain

ただ軸を取得した判定などは使えるので

この部分は複製して使いまわします

Boolの変数は、同じところから情報を拾ってきます

 

f:id:tktknkyo:20211229085641p:plain

それぞれの軸に情報を入れるとこのようになります

BackLengthの情報は、軸と合わせた場所に(XAxisならXに)

SideLemgthの情報は、軸とは違う場所のいずれかに(XAxisならYかZに)

そうすると一つ情報が空くので、そこには0を入力します。

 

SideAngleはそのまま流してるだけなので任意で大丈夫です

ここから、向きで使った三つのクォタニオンをそれぞれ適応していきます。

 

f:id:tktknkyo:20211229122737p:plain

少しややこしいので矢印なども入れています

緑枠が一つ目、青が二つ目、紫が三つ目(紫のは大元が見えていませんがエンジンオーナーのRotationです)

 

緑だけやや変則的ですが、角度の情報だけ、位置用のもの(SideLengthAngle)に差し替えているからです。

既に軸は出来ているので、回転軸は同じものを流用ですが、角度のみ変わるので

別情報でVector4を生成し、クォタニオンに変換します。

 

青枠は、角度の方で作ったクォタニオンをそのまま使うだけです。

 

f:id:tktknkyo:20211229123439p:plain

グラフが長くて見えなくなっていますが、最後にエンジンオーナーのPositionと加算して完了です。

 

 

f:id:tktknkyo:20211229123605p:plainf:id:tktknkyo:20211229123717p:plain

今回の機能で出来ることとしては、このように円状に並べつつ

中央だけ抜いたり、中央も詰めたりしたり

 

f:id:tktknkyo:20211229123832p:plainf:id:tktknkyo:20211229123910p:plain

直線ベースで、外側に少し乱数で発生位置をずらしたり

 

f:id:tktknkyo:20211229124058p:plain

空洞のある長い円柱を作ったりできるようになります。

 

 

 

今回はここまでとなります。

 

Niagaraの角度とか位置制御のあれこれは、基本的な部分はこの辺の情報から大体なんとかなると思います。

Positionとかをいじる場合、エンジンオーナーの角度とかを適応をしてから、最後にエンジンオーナーの座標加算するのは入れておくと割とやりやすいと思います。

中に入れるかどうかは、どういうモジュールにするかで変わってくると思うので、用途によっては不要だと思いますが