Niagaraの入門(10) Add Event Handlerについて
Niagaraの入門(10)
UE4確認バージョン 4.20.0
※なおこの段階ではNiagaraはアーリーアクセスなので
※今後内容がかわるかもしれないのでご注意ください
Add Event Handlerについて
EmitterのAddEventHandlerについてですが、
はまりました、、、どはまりしました、、、
Emitterのパーティクルからパーティクルへのイベント通知だと
思っていたのですが
そもそもここのSourceの指定の仕方がわからず、かなり時間を食いました。
プログラムをみてみると
となっており、どうやらEmitterを指定するもののようです。
つまりAddEventHandlerとはEmitterから別Emitterへのイベント通知のようです。
(正確には違いますが、後に記載)
作成の流れ
手順1
まず新規にEmitterを名前をparentEmitterとして作成します。
中身はいつものシンプルな赤いスプライトのみとしてから
Moduleを設定します。
手順2
ParticleUpdateにGenerateLocationEventのModuleを追加します。
以下、動画のような赤いスプライトが円周の動きをするようになります。
ぐ~るぐる pic.twitter.com/NbG2NTnIdh
— カニパンチ (@CrabPunch) July 26, 2018
手順3
次に別のEmitterを作成し、名前をchildEmitterとして作成します。
中身は新規作成したままの状態で、colorだけ青色にします。
手順4
childEmitterにAddEventHandlerを追加して以下のように設定します。
以下、動画のように青いスプライトが複数飛び出すような動きをするようになります。
青いこ pic.twitter.com/wdTWeXnSak
— カニパンチ (@CrabPunch) July 26, 2018
手順5
Systemを作成してparentEmitterとchildEmitterを追加します。
手順6
system内のchildEmitterを選択して、
EventHandlerPropertiesの
Sourceから[ParentEmitter][LocationEvent]
が選べるようになっているので、選択します。
手順7
EventHandlerProperties内の設定を以下のようにします。
次にEventHandlerPropertiesの横の+からReceiveLocationEventを選び。
ReceiveLocationEventのinheritedVelocityScaleを0.25とします。
手順8
最後にchildEmitterのEmitterUpdateのSpawnRateを無効にします。
完成
合体! pic.twitter.com/0bBoZsHd6Q
— カニパンチ (@CrabPunch) July 26, 2018
EventModuleについて
EventHandlerProperties
イベントの通知方法の設定
ExecutionMode
通知先の対象
・EveryParticle
System内の全てのパーティクル
・SpawnedParticles
イベントによってスポーンしたパーティクルにのみ
・SingleParticle
IDにて指定した1つのパーティクルにのみ
MaxEventsPerFrame
フレーム内でのイベント通知の生成の上限を設定します。
上限を超えた場合は無視されます。
SpawnNumber
ExecutionModeがSpawnedParticlesの場合
いくつパーティクルを生成するか指定できます。
またrandomSpawnNumberがチェックされている場合は
この値をランダムの上限とします。
RandomSpawnNumber
スポーンさせるパーティクルの数をランダムにするか。
GenerateLocationEvent
親パーティクルでの
位置イベントの送信に対する設定。
親パーティクルから子パーティクルへどの程度の頻度やタイミングで
イベントを送信するかなど。
EventCondition
位置イベントを送信するかどうか。
EventSendRate
1秒間にどれだけイベントを送信するか
指定した数を1秒間に均等に送信します。
下限は0.000001
GapCorrectionAmount
イベント遅延を考慮し、フレーム位置を先行させます。
これは前回からの経過時間が考慮された近似値となります。
その結果、Ribbonなどのねじれなどが生じることがあります。
ReceiveLocationEvent
子パーティクルでの
位置イベントの受信時の設定。
InheritedVelocityScale
どの程度親パーティクルの速度の影響をうけるか。
InheritedParentNormalizedAge
親パーティクルのlifetimeを受信します。これは親パーティクルが消失したときなど、
子パーティクルも同じように消す時になどに役立ちます。
Niagaraの入門(9) ベクトルなど
Niagaraの入門(9)
UE4確認バージョン 4.20.0
※なおこの段階ではNiagaraはアーリーアクセスなので
※今後内容がかわるかもしれないのでご注意ください
ベクトルなどについて
パーティクルの速度や位置を計算するModule
※デフォルトで用意されているベクトル関連は多いので
※あくまでそこそこ使いそうなものを一部抜粋
AddVelocity
パラメーター[Particles.Velocity]に対しての加算
ParticleSpawnで使用すれば初速となり、
その後他ベクトルの設定をしないのであれば
等速で移動します。
ParticleUpdateで使用すれば毎回加算されるので、
加速で移動します。
AddVelocity from Point
(ParticleUpdate)
パラメーター[Particles.Velocity]に対する更新
指定の座標に対してのベクトルを計算
AddVelocity from Point pic.twitter.com/HfqYdAxvxZ
— カニパンチ (@CrabPunch) July 25, 2018
VortexVelocity
(ParticleUpdate)
パラメーター[Particles.Velocity]に対する更新
指定の軸に対しての渦のようなベクトルを計算
VortexVelocity pic.twitter.com/UONSpgPV7u
— カニパンチ (@CrabPunch) July 25, 2018
JitterPosition
(ParticleUpdate)
パラメーター[Particles.Position]に対する更新
時間ごとの位置のゆらぎ。
JitterPosition pic.twitter.com/81NAYB8LPh
— カニパンチ (@CrabPunch) July 25, 2018
--------------------------------------------------------------------------------------------
AccelerationForce
(ParticleUpdate)
AddVelocityとは違い
パラメーター[Physics.Force]に対して加算
LimitForce
パラメーター[Physics.Force]に対して
ベクトルの大きさに対する上限制限。
VectorNoiseForce
パラメーター[Physics.Force]に対して
ノイズベクトルの積和
VectorNoiseForce pic.twitter.com/SWpD0F0wJK
— カニパンチ (@CrabPunch) July 25, 2018
CurlNoiseLocation
(ParticleSpawn)
パラメーター[Physics.Position]に対して
CurlNoiseForce
(ParticleUpdate)
パラメーター[Physics.Force]に対して
ノイズを元にした流体のような動きをするベクトル計算です。
CurlNoise pic.twitter.com/gx656OScHp
— カニパンチ (@CrabPunch) July 25, 2018
SolveForces and Velocity
(ParticleUpdate)
ネームスペース Phsics関連を用いて(質量や速度など)
パラメーター[Physics.Position]と
パラメーター[Physics.PreviousVelocity]に対しての更新
物理エンジンなどを使ったことがある人なら理解しやすいとは思います。
物理関連のパラメーターを設定することによって
自動で計算して結果を出してくれるものです。
なのでパラメーターPhysics関連のものはこのModuleより先にスタックしましょう。
Niagaraの入門(8) SpawnとLocation
Niagaraの入門(8)
UE4確認バージョン 4.20.0
※なおこの段階ではNiagaraはアーリーアクセスなので
※今後内容がかわるかもしれないのでご注意ください
Spawnについて
EmitterUpdateにてパーティクルの生成タイミングと量を指定できるModuleについて
●SpawnRate
これは1秒間にいくつパーティクルを生成するか指定するものです。
これはEmitterが存在する間毎フレーム計算されます。
仮に3と指定した場合は1秒間に3パーティクルが生成されます。
これは同時に3ではなく1秒間に等間隔に3分割して1パーティクルづつ生成されます。
●SpawnBurstInstantaneous
こちらは定期的に生成するのではなくEmitter生成からSpawnTimeで指定した秒数に
SpawnCountの数だけまとめてパーティクルを生成します。
注意点としてはSpawnTimeはEmitterのLifeTimeより短くしないと生成されません。(あたりまえですが)
この緑のラインです。これだと8秒以下に指定しないといけません。
●SpawnPerUnit
こちらは時間ではなくEmitterの距離によって生成されます。
値は1=1cmです。
プレビューですと確認しづらいのでSystemで配置してから
SystemをLevel上で動かした図がこちらです。
※私の認識不足なだけかもしれないのでだれか知っていたら教えてください。
Locationについて
パーティクルを生成する位置について指定するModuleです。
●SphereLocation
指定した半径の球体の範囲内にパーティクルを生成します。
●BoxLocation
指定して四面体の範囲内にパーティクルを生成します。
※ちなみにSpawnBurstあたりと組み合わせるとこのようになります。
●ConeLocation
●CylinderLocation
●TorusLocation
●InitializeMeshReproductionSprite
こちらはSkeltalMeshのポリゴントライアングルの位置を計算して
パーティクルを生成しています(頂点ではないです)
Niagaraの入門(7) Moduleの自作+EmitterParameterの連携
Niagaraの入門(7)
UE4確認バージョン 4.20.0
※なおこの段階ではNiagaraはアーリーアクセスなので
※今後内容がかわるかもしれないのでご注意ください
EmitterModuleの動作の把握
Moduleを自作する前に既存のEmitterのModuleを把握しましょう。
新規にEmitterを作成した後、Moduleのパラメーターなどが多いので
基本動作を把握するために一旦シンプルな状態にしましょう。
・SpawnRateを1.0 (生成させるパーティクルの数
・AddVelocity 0 0 0 (パーティクルの加速度)
・SphereRadius 0 (パーティクルの生成されるランダム座標の球空間の半径)
・Color 1 0 0 (赤が個人的にわかりやすいので)
上記のように設定すればシンプルに、画面に赤いスプライトが動かないものが確認できます。
そこにAdd velocityのzの値を100にすると上方向にパーティクルが飛んでいくのが確認できます。
EmitterModuleの自作
の前に、まずEmitterSpawnにてParameterの設定を行います。
ParameterをModuleの繋がりを理解すると応用が色々と効くため。
EmitterSpawnの+から[Create New Parameter]>[Vector]を作成し、
名前を[Emitter.testVec]とします。
次にAddVelocityを開いてから別名保存してMyAddVelocityとします。
その後MyAddVelocityをEmitterに追加します。
MyAddVelocityの中身のGetMapを+アイコンからVectorを追加して名前を[Emitter.testVec]とします。
最後にEmitterSpawnにある[SetVariables][Emitter.testVec]の値xを100にします。
そうするとMyAddvelocityのパラメーターを直接編集するのでなくてEmitter全体として使い回せるパラメーターを
Moduleと連携されれることが解るかと思います。
Systemでのオーバーライド
最後に上記で作成したEmitterを2つ取り込んだNiagaraSystemを作成します。
1つ目のEmitterのXを100
2つ目のEmitterのZを100に
こうすることによって1つのEmitterをパラメーターをオーバーライドすることによって
使い回し、別のパターンを表現できます。
このModuleの作成とパラメーターの連携は
基礎の基礎として使われることになるかと思われます。
Niagaraの入門(6) Graphについて
Niagaraの入門(6)
UE4確認バージョン 4.20.0
※なおこの段階ではNiagaraはアーリーアクセスなので
※今後内容がかわるかもしれないのでご注意ください
Graphについて
ここまでの内容だとCascadeと対して変わっていなかったのですが、
Niagaraで目立つ機能としてはノードベースでの作成ができる
Graphまわりです。
主によく使うGraphとしては
・EmitterのGraph
・ModuleのGraph
の2つになります。
EmitterのGraph
Emitterの全体のModuleの流れを示したGraphです。
Emitterの上メニューのウィンドウ>Selected Emitter Graphから表示することができます。
※4.20.0時点ですとこの項目が上手く表示されないとの報告がいくつかあります。
※条件が未定で再起動やら別のPCだと表示されるなどがあるようです。
※追記 対処方法発見
Selected Emitter Graphが表示されない人はUE4コンソールコマンドにて
— カニパンチ (@CrabPunch) July 23, 2018
fx.ShowNiagaraDeveloperWindows 1
と入力してみてください。#UE4#Niagara pic.twitter.com/otuAjYC6BH
BlueprintやMaterialを触ったことがある人なら見慣れた画面かとおもいます。
これらの出力先は
・EmitterSpawn
・EmitterUpdate
・ParticleSpawn
・ParticleUpdate
への流れとなっています。
右クリックメニューからノードを作成して、中間の計算などの処理を挟むことも可能です。
ModuleのGraph
Emitterの全体のModuleの流れを示したGraphです。
またEmitterに対するModuleとは別に
Moduleへの与えるパラメーターに対して動作するModuleがあります。
青枠のModuleのパラメーターに対して赤枠のModuleがそれにあたります。
Module名の部分をクリックすればGraphを見ることができます。
※これらは編集して変更することが可能です
※ただ注意点としてEmitterのGraphと違い
※標準で用意されていたModuleのGraphを変更した場合は同名で保存しないでください
※必ず別名で保存してください。そのEmitterだけでなく他でも使用されている可能性があるので
※問題がいろいろと派生して起こりかねません。
別名で保存した後はEmitterなどのModule追加をやれば、
自分で保存したModuleを選んで追加することが可能になります。
コンテンツブラウザ上からも新規で作成はできますが、
なれない内は既存の似たような動作のModuleの中身を見ながら
別名保存して編集していくのがよいかと思われます。
Niagaraの入門(5) EmitterのModuleついて
Niagaraの入門(5)
UE4確認バージョン 4.20.0
※なおこの段階ではNiagaraはアーリーアクセスなので
※今後内容がかわるかもしれないのでご注意ください
EmitterのModuleついて
Emitterは複数のModuleからなりたっています。
これらはの赤い丸は全てEmitterへの動作に対象としたModuleです。
またEmitterに対するModuleとは別に
Moduleへの与えるパラメーターに対して動作するModuleがあります。
青枠のModuleのパラメーターに対して赤枠のModuleがそれにあたります。
青枠のModuleを新規で作成した場合はシンプルな状態となります。
Moduleへ投げる値の最小値や最大値を制限したい。
また色を数字でなくカーブで指定したい。
など値に対して動作が多いかと思われます。
Moduleの追加
Moduleに対する追加場合は
青丸の+ボタンを
パラメーターに対するものであるならば
パラメーター横の下▼のボタンから[DynamicImputs > Color from Curve]
などを選べば値の入力方法を変えれます。
Niagaraの入門(4) Renderの種類
Niagaraの入門(4)
UE4確認バージョン 4.20.0
※なおこの段階ではNiagaraはアーリーアクセスなので
※今後内容がかわるかもしれないのでご注意ください
Renderの種類
EmitterのRenderは
・SpriteRenderer
・MeshRenderer
・RibbonRenderer
・LightRenderer
の4つになります。
SpriteRenderer
俗に言う2Dスプライトです。
TextureとMaterialがあれば描画できます。
SpriteKanimisoBasedRenderer#UE4#Niagaraさいかいしました#Niagara pic.twitter.com/7exRHi0yRG
— カニパンチ (@CrabPunch) July 21, 2018
MeshRenderer
こちらはStatickMeshを生成して描画するタイプです。
MeshKanimisoBasedRenderer#UE4 #Niagara pic.twitter.com/rXhcz1TMmv
— カニパンチ (@CrabPunch) July 21, 2018
RibbonRenderer
煙や水蒸気といった自然現象向けのものになっています。
カスケードですとSpriteやMeshのようなことはできたのですが、
Ribbonはいろいろと新しい応用ができそうです。
RibbonKanimisoRenderer
— カニパンチ (@CrabPunch) July 21, 2018
(う○こ)#UE4#Niagara pic.twitter.com/b5sVNPB7iW
LightRenderer
パーティクルと同時にライトを生成するものです。
(Rendererっていわれると、少し毛色が違いますが)
LightKanimisoRenderer#UE4#Niagara pic.twitter.com/CjQkLIvjtc
— カニパンチ (@CrabPunch) July 21, 2018