moyasiエフェクト館

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


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

【Niagara】メッシュの角度をクォタニオンで制御する

f:id:tktknkyo:20190723191853p:plain



VerはUE4.22.3です。

 

今回は、Niagaraでクォタニオンを使ってちょっとした制御の方法を。

サムネイルが一つの例です。

モーションと合わせる部分は、割とゴリ押しなので、そこはご了承ください。

 

f:id:tktknkyo:20190723191540p:plain

 

こちらが、Niagara上で表示されているこのエフェクトです。

エフェクト単体としては、水平に斬ってるだけの角度となっています。

 

今回のこの斬撃のエフェクトは、モーションに合わせて角度を変更したい。というのがありまして。

なので、固定の角度だけでなく、角度を変更しやすい作りにする必要がありました。

また、管理面も考えて、一つのエフェクトに対して、BPに制御する事でモーションにあった角度で発生させる

というのを目指しました。

 

f:id:tktknkyo:20190723192204p:plain

タイミングの関係で判りにくいですが、水平に斬るモーションに合わせて、水平に角度を調整しています。

 

f:id:tktknkyo:20190723192549p:plain

ちょっとした応用として、このように、前方にそのまま飛ばしたりする処理も作ることができます。

飛ばしてるエフェクトは、別途新しく作る必要はあります。

 

【そもそもクォタニオンについて】

 

まずクォタニオンについてですが、原理としては4元数とか、3つの虚数が、とかはありますが、ちょっと使う程度なら、原理的な所まではそこまで知る必要はないと思います。

UE4などでクォタニオンを使う場合で知っておいたほうがいい事としては。

4つの数値を持つ型である、という事

4つの数値のうち、3つは回転軸を指定し、もう一つで角度を指定している、という事。

 

原理から知ろうとするとややこしいですが、使うだけなら結構簡単です。

 

 

【Meshをクォタニオンで回転させる】

今回は、この斬撃のをメインに例を出していきます。

なので、まずはNiagara上で、水平に回転するという挙動を作っていきます。

 

f:id:tktknkyo:20190723195335p:plain

まずは、このようなメッシュがあったとします。(メッシュは使いたい物で大丈夫です)

 

f:id:tktknkyo:20190723195548p:plain

メッシュを回転させる為のモジュールは最初から入っています。

このMesh Rotation Rateなどがその一つですね。

 

これを、Particle Updateに入れて、Yawに-360と入れてみると、水平方向に回転するようになります。

 

Rotation Rate というパラメータがありますが、これは回転の速度を制御します。

数値を大きくするほど、高速で回転するようになります。

f:id:tktknkyo:20190723200027p:plain

ここに、カーブを入れる事で、回転をだんだん遅くしたり、早くしたりする事も可能です。

 

このモジュール自体がクォタニオンで回転させています。

中身としてはこのようになっています。

f:id:tktknkyo:20190723200240p:plain

デフォルトのモジュールはこれに限らず、結構複雑な事も多いです。

 

f:id:tktknkyo:20190723200428p:plain

特に重要になりそうなのは、この辺でしょうか

内容としては、Yow、Pitch、Rollで指定した角度を元にクォタニオンを作っています。

Euler to Quaternuonという関数が一番重要となります。

 

f:id:tktknkyo:20190723200938p:plain

また、設定したクォタニオンは、Particle.MeshOrientation

に設定する事で、角度が決まります。

このパラメータは、クォタニオンの型なので、クォタニオンで計算したら、そのまま適用出来る、というワケです。

 

特にモジュール自体を使わなくても、この型のパラメータにすれば、角度の制御ができます。

 

f:id:tktknkyo:20190723201250p:plain

Updateに、この型のパラメータを追加します

 

f:id:tktknkyo:20190723201333p:plain

モジュールだけでなく、Dynamic Inputにも、クォタニオン専用のデータがデフォルトであります。

こちらは、回転軸と回転角度から指定すもので、こちらの方がイメージしやすいかもしれません。個人的にはこちらのほうが解りやすいとは思います。

 

ただ、回転角度に固定値を入れても、そのままでは回ってはくれません。

 

f:id:tktknkyo:20190723201657p:plain

このように、カーブを入れる事で回転をしてくれるようになります。

 

 

【クォタニオンでの回転の制御】

ここまでは、単純にクォタニオンで回転させてただけなので

ここから制御出来るようにしていきたいと思います。

 

今回としては、モーションなどと合わせて回転させるのを目標とします。

 

結論から言ってしまうと、回転軸をモーションに合わせて差し替えるだけですが。

 

モーションから角度をとってくる部分は、ちょっとゴリ押しになります、そこはご了承ください。

 

f:id:tktknkyo:20190723202733p:plain

発生位置を、キャラに持ってきて、再生すると、このように真横に振ります。

 

f:id:tktknkyo:20190723202917p:plain

角度を制御する下準備として、Spawn System at Locationの後ろに、Set Niagara Variable(Vector 3)

を繋ぎます。

ただ、これ単体では動きません。

f:id:tktknkyo:20190723203109p:plain

Niagaraの、パラメータの部分で、このようにパラメータを追加します。

User. までは固定なので注意してください、頭のみ大文字にしないと上手く反応してくれないようです。

 

今回は、User.Rotationというパラメータを追加して、ここに角度を入れていきます。

 

このパラメータを使っている部分に、BPで指定した数値が入ってくる、という事になります。

 

tktknkyo.hatenadiary.jp

 

ここの制御法は、以前の記事で書いています、そちらも参照してください。

 

ここから、このRotationのVector型のパラメータを使って、角度を制御していく必要があります。

 

クォタニオンに変換する必要があります。

今回は新規でモジュールを作成しました。

f:id:tktknkyo:20190723203656p:plain

内容としてはVectorをクォタニオンに変換しています。

Particles.InitialRotation というパラメータもありますが。

 

これはMesh Rotation Rateのモジュール内を見ると解りますが

 

f:id:tktknkyo:20190723204608p:plain

クォタニオンの角度の合成をする際に使用されています。

なので、ここで入れておくことで、綺麗に角度の合成をしてくれるようになります。

 

f:id:tktknkyo:20190723203920p:plain

モジュールが完成したら、Particle Spawnに追加します

中身は、BPから取得してきたUser.Rotationを入れます。

 

f:id:tktknkyo:20190723204813p:plain

 

今度は、角度を合成する必要があるので、Mesh Rotation Rateの方で回転させるようにしましょう。

 

f:id:tktknkyo:20190723205615p:plain

XYZをそれぞれ30に設定すると

 

f:id:tktknkyo:20190723205556p:plain

 

このように角度が更新されました。 

 

f:id:tktknkyo:20190723205707p:plain

 

ただし、XYZを固定値で入れて編集しているだけなので、キャラの向きを考慮してくれません。

 

f:id:tktknkyo:20190723205922p:plain

キャラクターが、地面に立っている状態、つまり2次元での角度のみで良いのであれば。

自分はこのように設定して制御しています。

 

まず攻撃を出すアクターの角度を取得し、そこからZ軸だけを変数に格納します。

これにより、キャラの向きの動きを取得してこれるので

そこに固定値を足して、常に出したい向きにエフェクトが出るように調整します。

 

 

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

次は、クォタニオンを使って、発生位置の制御をやっていきたいと思います。