Gaming Life

一日24時間、ゲームは10時間

UE4 Niagaraを触ってみる(1)

 そろそろ正式実装されると一部で噂のUE4の新パーティクルシステムNiagara。現時点では英語情報すらほぼ無く、手探りでやっていくしかない。が、UE4.20のPreview版時点では前バージョンと比較してもかなり使いやすくなっているのでチョットずつ触り始めている。

 多くの人に触ってもらって情報共有されることを期待して、基本的なことばかりになってしまうがNiagaraに関する記事も書いていこうと思う。

環境

UE4.20 Preview5

Niagaraを有効にする

 現段階では実験的機能で、プラグイン扱いとなっている。有効にするにはプラグイン -> FXのNiagaraをEnabledにしなければならない。

 Niagara Extrasは必須ではないが、参考になるNiagara EmitterやNiagara Module Scriptが用意されている。今回作るエフェクトではこちらに用意されているスクリプトを流用するのでEnabledにする。

f:id:ai_gaminglife:20180711173345p:plain

 再起動後、プラグインに含まれているアセットを見たい時は、コンテンツブラウザのView OptionsでShow Plugin Contentにチェックを入れる必要がある。

CascadeNiagaraの違い

 これについてはこちらの記事がとても詳しい。

papersloth.hatenablog.com

 ここでも簡単な解説を。

従来のCascadeの編集画面。

f:id:ai_gaminglife:20180711173357p:plain

 CascadeではEmitterという一つの塊に寿命、初速度、加速度、色といった予め用意されているModuleを追加する。そうして作った複数のEmitterで一つのエフェクトを作っていた。

 一方Niagara。これはコンテンツブラウザのFX->Niagara Emitterで追加できるNiagara Emitterの編集画面。

f:id:ai_gaminglife:20180711173407p:plain

 大元にある

  • Emitter Spawn
  • Emitter Update
  • Particle Spawn
  • Particle Update
  • Render

というモジュールが Niagara Module Script からの入出力を受け取り、寿命、初速度、加速度、色等を制御する。

 大きな違いは

  • NiagaraはEmitterをそれぞれ別ファイルとして保存できる
  • モジュールをノードベースでプログラマブルに制御出来る

こと。

 NiagaraNiagara Emitterという形でEmitterを別ファイルとして保持する。そして個別に作られたEmitterは Niagara Systemでまとめて管理され、ここで一つのエフェクトが完成する。

 こちらはNiagara Systemの編集画面。NE_CircleGeneというNiagara Emitterを2つ持ち同時に再生することで一つのエフェクトとなっている。

f:id:ai_gaminglife:20180711173418p:plain

 そしてNiagaraではモジュールをノードベースでプログラマブルに制御出来る。ここがNiagara最大の特徴と言える。

 Niagara Emitter内でSelected Emitter Graphを見てみるとこのようなノードベースのコードが見られる。

f:id:ai_gaminglife:20180711173429p:plain

 これは先程見せたNiagara Emitterのモジュール編集画面(Selected Emitters Tab)と対応しており、Graphを編集するとSelected Emittersが、Selected Emitterを編集するとGraphが対応して自動で変更される。

(ブログ資料製作中、Emitter Graphを誤って消したところ、前バージョンにはあったはずのWindow -> Selected Emitter Graphが消えていて再起動するしか再び表示させる方法がなかった。不具合?)

 ノードベースの編集が可能になったことでCascadeでは実現できなかったプログラムチックな動きを実装できる。

 勿論このモジュールも再利用できる。例えばパーティクルに重力を与えたい、と思ったらコンテンツブラウザでNiagara Module Scriptを追加し、ここでその制御を実装する。一度作ったNiagara Module ScriptはどのEmitterでも利用可能。プログラマが複雑なModule Scriptを用意し、デザイナーがそのModuleを組み合わせて一つのEmitterを作る……といったことができるようになる。

Niagara Module Scriptの編集画面

f:id:ai_gaminglife:20180711173438p:plain

Niagaraを使ってみる

 今回はNiagara Extrasに用意されているEmitterを利用して作っていく。

 NiagaraExtras Content/Emittersに入っているEmitterを自分のコンテンツフォルダの中にコピーして入れる。そのEmitterを開くとおそらくこの様なエフェクトが見れるだろう。これだけでも圧巻。

f:id:ai_gaminglife:20180711173451p:plain

パーティクルに重力をかける

Selected Emittersタブ上でParticle Updateの右側にある+マークをクリック。Acceleration Forceを検索し追加する。このままではエラーが出るのでドラックアンドドロップでSolve Force and Velocityの上に表示されるようにする。

f:id:ai_gaminglife:20180711173506p:plain

Acceleration Forceは標準で用意されているModule Scriptでパーティクルに加速度を与えることが出来る。

Module Scriptを編集する

 デフォルトのままだと同じ方向にぐるぐる回るようにパーティクルがスポーンされている。これはParticle Spawnに設定されている Point Spiral Location Moduleで計算されている。ここではこのScriptを改造してこの回転方向を制御出来るようにする。

 Graph上でPoint Sprial Locationを見つけダブルクリック。するとPoint Spiral Locationの編集画面に移れる。

 Map Getの右側のプラスピンを押し Module -> Make New -> Floatと選択しModule.RotDirectionという名前の出力ピンを追加する。自動で入力ピンも用意されるが0.0という値が表示されていると思う。これはデフォルトの値を意味する。今回は1.0と設定しておく。

f:id:ai_gaminglife:20180711173518p:plain

 このRotDirectionをMap SetのParticles.Velocityにつながっている値と掛け合わせる。

f:id:ai_gaminglife:20180711173530p:plain

 Emitter編集画面に戻ってSelected EmittersタブにあるPoint Sprial Locationを見てみると、新たにRotDirectionという数値を設定する枠が用意される。この値を1.0にすれば順回転、-1.0に設定すれば逆回転させることが出来る。

Niagara Systemにまとめる

 コンテンツブラウザでNiagara Systemを追加。最初の段階では何も表示されていない。Timelineの +Track を選択して先程作ったEmitterを追加できる。今回は作ったEmitterを2つ追加する。

f:id:ai_gaminglife:20180711173538p:plain

 Timelineで選択したEmitterのパラメータは、これまでと同じくSelected Emittersタブで制御出来る。

 最初に追加したEmitterは、RotDirection 1.0に、次に追加したEmitterはRotDirection -1.0に設定すると、順回転、逆回転する2つのEmitterが同時に発生する。

 Particle Update内の Set VariablesタブでParticle.Colorを赤と青に設定するなどするとこんな遺伝子のようなParticleの完成。

まとめ

 比較的簡単に、Cascadeでは難しかったであろうエフェクトが作れた。一部標準実装のModule Scriptのコンパイルが通っていないのにエフェクトは正常に動作するなど怪しい部分もあるが、今回の作業中にクラッシュすることは一度もなかった。正式版も近いかも……?