Niagaraの入門(10) Add Event Handlerについて

Niagaraの入門(10)

UE4確認バージョン  4.20.0

※なおこの段階ではNiagaraはアーリーアクセスなので

※今後内容がかわるかもしれないのでご注意ください

 Add Event Handlerについて

EmitterのAddEventHandlerについてですが、

はまりました、、、どはまりしました、、、

Emitterのパーティクルからパーティクルへのイベント通知だと

思っていたのですが

f:id:CrabPunch:20180726230809p:plain

 そもそもここのSourceの指定の仕方がわからず、かなり時間を食いました。

 

プログラムをみてみると

f:id:CrabPunch:20180726230905p:plain

となっており、どうやらEmitterを指定するもののようです。

つまりAddEventHandlerとはEmitterから別Emitterへのイベント通知のようです。

(正確には違いますが、後に記載)

 

作成の流れ

手順1

まず新規にEmitterを名前をparentEmitterとして作成します。

中身はいつものシンプルな赤いスプライトのみとしてから

Moduleを設定します。

f:id:CrabPunch:20180726231326p:plain

 

手順2

ParticleUpdateにGenerateLocationEventのModuleを追加します。

f:id:CrabPunch:20180726231524p:plain

 以下、動画のような赤いスプライトが円周の動きをするようになります。

 

 

手順3

次に別のEmitterを作成し、名前をchildEmitterとして作成します。

中身は新規作成したままの状態で、colorだけ青色にします。

手順4

childEmitterにAddEventHandlerを追加して以下のように設定します。

f:id:CrabPunch:20180726232148p:plain

  以下、動画のように青いスプライトが複数飛び出すような動きをするようになります。

 

手順5

Systemを作成してparentEmitterとchildEmitterを追加します。

f:id:CrabPunch:20180726232400p:plain

 

手順6

system内のchildEmitterを選択して、

EventHandlerPropertiesの

Sourceから[ParentEmitter][LocationEvent]

が選べるようになっているので、選択します。

f:id:CrabPunch:20180726232511p:plain

 

手順7

EventHandlerProperties内の設定を以下のようにします。

f:id:CrabPunch:20180726232736p:plain

次にEventHandlerPropertiesの横の+からReceiveLocationEventを選び。

ReceiveLocationEventのinheritedVelocityScaleを0.25とします。

 

f:id:CrabPunch:20180726232928p:plain

手順8

最後にchildEmitterのEmitterUpdateのSpawnRateを無効にします。

f:id:CrabPunch:20180726233055p:plain

完成

 

 

 

 EventModuleについて

EventHandlerProperties

イベントの通知方法の設定

f:id:CrabPunch:20180727055750p:plain

ExecutionMode

通知先の対象

・EveryParticle

System内の全てのパーティクル


・SpawnedParticles

イベントによってスポーンしたパーティクルにのみ


・SingleParticle

IDにて指定した1つのパーティクルにのみ

 

MaxEventsPerFrame

フレーム内でのイベント通知の生成の上限を設定します。

上限を超えた場合は無視されます。

 

SpawnNumber

ExecutionModeがSpawnedParticlesの場合

いくつパーティクルを生成するか指定できます。

またrandomSpawnNumberがチェックされている場合は

この値をランダムの上限とします。

 

RandomSpawnNumber

スポーンさせるパーティクルの数をランダムにするか。

 

GenerateLocationEvent

親パーティクルでの

位置イベントの送信に対する設定。

親パーティクルから子パーティクルへどの程度の頻度やタイミングで

イベントを送信するかなど。

f:id:CrabPunch:20180727055812p:plain

EventCondition

位置イベントを送信するかどうか。

 

EventSendRate

1秒間にどれだけイベントを送信するか

指定した数を1秒間に均等に送信します。

下限は0.000001

 

GapCorrectionAmount

イベント遅延を考慮し、フレーム位置を先行させます。

これは前回からの経過時間が考慮された近似値となります。

その結果、Ribbonなどのねじれなどが生じることがあります。

 

ReceiveLocationEvent

子パーティクルでの

位置イベントの受信時の設定。

 

 

f:id:CrabPunch:20180727055945p:plain

 

 

InheritedVelocityScale

どの程度親パーティクルの速度の影響をうけるか。

 

InheritedParentNormalizedAge

親パーティクルのlifetimeを受信します。これは親パーティクルが消失したときなど、

子パーティクルも同じように消す時になどに役立ちます。

 

Niagaraの入門(9)  ベクトルなど

Niagaraの入門(9)

UE4確認バージョン  4.20.0

※なおこの段階ではNiagaraはアーリーアクセスなので

※今後内容がかわるかもしれないのでご注意ください

 ベクトルなどについて

パーティクルの速度や位置を計算するModule

※デフォルトで用意されているベクトル関連は多いので

※あくまでそこそこ使いそうなものを一部抜粋

 

 

AddVelocity

パラメーター[Particles.Velocity]に対しての加算

ParticleSpawnで使用すれば初速となり、
その後他ベクトルの設定をしないのであれば
等速で移動します。

ParticleUpdateで使用すれば毎回加算されるので、
加速で移動します。

AddVelocity from Point

(ParticleUpdate)
パラメーター[Particles.Velocity]に対する更新
指定の座標に対してのベクトルを計算

 

VortexVelocity

(ParticleUpdate)
パラメーター[Particles.Velocity]に対する更新
指定の軸に対しての渦のようなベクトルを計算

 

JitterPosition

(ParticleUpdate)
パラメーター[Particles.Position]に対する更新
時間ごとの位置のゆらぎ。

 


--------------------------------------------------------------------------------------------

AccelerationForce

(ParticleUpdate)
AddVelocityとは違い
パラメーター[Physics.Force]に対して加算

LimitForce

パラメーター[Physics.Force]に対して
ベクトルの大きさに対する上限制限。

VectorNoiseForce

パラメーター[Physics.Force]に対して
ノイズベクトルの積和

 

CurlNoiseLocation

(ParticleSpawn)
パラメーター[Physics.Position]に対して

CurlNoiseForce

(ParticleUpdate)
パラメーター[Physics.Force]に対して
ノイズを元にした流体のような動きをするベクトル計算です。

 

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 

f:id:CrabPunch:20180723224322p:plain

これは1秒間にいくつパーティクルを生成するか指定するものです。

これはEmitterが存在する間毎フレーム計算されます。

仮に3と指定した場合は1秒間に3パーティクルが生成されます。

これは同時に3ではなく1秒間に等間隔に3分割して1パーティクルづつ生成されます。

 

●SpawnBurstInstantaneous

f:id:CrabPunch:20180723224601p:plain

こちらは定期的に生成するのではなくEmitter生成からSpawnTimeで指定した秒数に

SpawnCountの数だけまとめてパーティクルを生成します。

注意点としてはSpawnTimeはEmitterのLifeTimeより短くしないと生成されません。(あたりまえですが)

f:id:CrabPunch:20180723224843p:plain

この緑のラインです。これだと8秒以下に指定しないといけません。

 

●SpawnPerUnit

f:id:CrabPunch:20180723225056p:plain

 こちらは時間ではなくEmitterの距離によって生成されます。

値は1=1cmです。

プレビューですと確認しづらいのでSystemで配置してから

SystemをLevel上で動かした図がこちらです。

※私の認識不足なだけかもしれないのでだれか知っていたら教えてください。

f:id:CrabPunch:20180723225245p:plain

 

 

 

Locationについて

 パーティクルを生成する位置について指定するModuleです。

 

 

●SphereLocation

f:id:CrabPunch:20180723225530p:plain

指定した半径の球体の範囲内にパーティクルを生成します。

 

●BoxLocation

f:id:CrabPunch:20180723225709p:plain

 

 指定して四面体の範囲内にパーティクルを生成します。

※ちなみにSpawnBurstあたりと組み合わせるとこのようになります。

 

f:id:CrabPunch:20180723225821p:plain

 

 

 

 ●ConeLocation

f:id:CrabPunch:20180723225933p:plain

 

●CylinderLocation

f:id:CrabPunch:20180724000538p:plain

 ●TorusLocation

f:id:CrabPunch:20180723230019p:plain

 

 

●InitializeMeshReproductionSprite

こちらはSkeltalMeshのポリゴントライアングルの位置を計算して

パーティクルを生成しています(頂点ではないです)

f:id:CrabPunch:20180723230228p:plain

 

 

f:id:CrabPunch:20180723230416p:plain

 

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 (赤が個人的にわかりやすいので)

 

f:id:CrabPunch:20180722192242p:plain

f:id:CrabPunch:20180722192246p:plain

 

上記のように設定すればシンプルに、画面に赤いスプライトが動かないものが確認できます。

そこにAdd velocityのzの値を100にすると上方向にパーティクルが飛んでいくのが確認できます。

f:id:CrabPunch:20180722192901p:plain

 

 

EmitterModuleの自作

 

の前に、まずEmitterSpawnにてParameterの設定を行います。

ParameterをModuleの繋がりを理解すると応用が色々と効くため。

EmitterSpawnの+から[Create New Parameter]>[Vector]を作成し、

名前を[Emitter.testVec]とします。

f:id:CrabPunch:20180722193521p:plain

f:id:CrabPunch:20180722193523p:plain

 

次にAddVelocityを開いてから別名保存してMyAddVelocityとします。

その後MyAddVelocityをEmitterに追加します。

f:id:CrabPunch:20180722193745p:plain

 

MyAddVelocityの中身のGetMapを+アイコンからVectorを追加して名前を[Emitter.testVec]とします。

f:id:CrabPunch:20180722194057p:plain

f:id:CrabPunch:20180722194058p:plain

 

最後にEmitterSpawnにある[SetVariables][Emitter.testVec]の値xを100にします。

そうするとMyAddvelocityのパラメーターを直接編集するのでなくてEmitter全体として使い回せるパラメーターを

Moduleと連携されれることが解るかと思います。

f:id:CrabPunch:20180722194726p:plain

 

 

 

Systemでのオーバーライド

最後に上記で作成したEmitterを2つ取り込んだNiagaraSystemを作成します。

1つ目のEmitterのXを100

2つ目のEmitterのZを100に

f:id:CrabPunch:20180722195737p:plain

f:id:CrabPunch:20180722195752p:plain

 

こうすることによって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だと表示されるなどがあるようです。

追記 対処方法発見

 

 

f:id:CrabPunch:20180722165238p:plain

f:id:CrabPunch:20180722165254p:plain

 

 

BlueprintやMaterialを触ったことがある人なら見慣れた画面かとおもいます。

これらの出力先は

・EmitterSpawn

・EmitterUpdate

・ParticleSpawn

・ParticleUpdate

への流れとなっています。

 

右クリックメニューからノードを作成して、中間の計算などの処理を挟むことも可能です。

f:id:CrabPunch:20180722165734p:plain

 

f:id:CrabPunch:20180722165749p:plain

 

 

 

ModuleのGraph

Emitterの全体のModuleの流れを示したGraphです。

またEmitterに対するModuleとは別に

Moduleへの与えるパラメーターに対して動作するModuleがあります。

青枠のModuleのパラメーターに対して赤枠のModuleがそれにあたります。

 

Module名の部分をクリックすればGraphを見ることができます。

f:id:CrabPunch:20180722170757p:plain

f:id:CrabPunch:20180722170858p:plain

f:id:CrabPunch:20180722170907p:plain

f:id:CrabPunch:20180722170915p:plain

 

※これらは編集して変更することが可能です

※ただ注意点としてEmitterのGraphと違い

※標準で用意されていたModuleのGraphを変更した場合は同名で保存しないでください

※必ず別名で保存してください。そのEmitterだけでなく他でも使用されている可能性があるので

※問題がいろいろと派生して起こりかねません。

 

別名で保存した後はEmitterなどのModule追加をやれば、

自分で保存したModuleを選んで追加することが可能になります。

コンテンツブラウザ上からも新規で作成はできますが、

なれない内は既存の似たような動作のModuleの中身を見ながら

別名保存して編集していくのがよいかと思われます。

 

 

 

 

Niagaraの入門(5) EmitterのModuleついて

Niagaraの入門(5)

UE4確認バージョン  4.20.0

※なおこの段階ではNiagaraはアーリーアクセスなので

※今後内容がかわるかもしれないのでご注意ください

EmitterのModuleついて

Emitterは複数のModuleからなりたっています。

f:id:CrabPunch:20180722155212p:plain

これらはの赤い丸は全てEmitterへの動作に対象としたModuleです。

 

 

またEmitterに対するModuleとは別に

Moduleへの与えるパラメーターに対して動作するModuleがあります。

青枠のModuleのパラメーターに対して赤枠のModuleがそれにあたります。

 

 

f:id:CrabPunch:20180722155938p:plain

 

青枠のModuleを新規で作成した場合はシンプルな状態となります。

f:id:CrabPunch:20180722160054p:plain

 

 

 

Moduleへ投げる値の最小値や最大値を制限したい。

また色を数字でなくカーブで指定したい。

など値に対して動作が多いかと思われます。

 

Moduleの追加

Moduleに対する追加場合は

青丸の+ボタンを

パラメーターに対するものであるならば

パラメーター横の下▼のボタンから[DynamicImputs > Color from Curve]

などを選べば値の入力方法を変えれます。

f:id:CrabPunch:20180722160738p:plain

 

 

 

 

Niagaraの入門(4) Renderの種類

Niagaraの入門(4)

UE4確認バージョン  4.20.0

※なおこの段階ではNiagaraはアーリーアクセスなので

※今後内容がかわるかもしれないのでご注意ください

Renderの種類

EmitterのRenderは

・SpriteRenderer

・MeshRenderer

・RibbonRenderer 

・LightRenderer

 

の4つになります。

 

 

SpriteRenderer

俗に言う2Dスプライトです。

TextureとMaterialがあれば描画できます。

 

 

 

MeshRenderer

こちらはStatickMeshを生成して描画するタイプです。

 

 

 

RibbonRenderer 

煙や水蒸気といった自然現象向けのものになっています。

カスケードですとSpriteやMeshのようなことはできたのですが、

Ribbonはいろいろと新しい応用ができそうです。

 

 

 

LightRenderer

パーティクルと同時にライトを生成するものです。

(Rendererっていわれると、少し毛色が違いますが)