そろそろ正式実装されると一部で噂のUE4の新パーティクルシステムNiagara。現時点では英語情報すらほぼ無く、手探りでやっていくしかない。が、UE4.20のPreview版時点では前バージョンと比較してもかなり使いやすくなっているのでチョットずつ触り始めている。
多くの人に触ってもらって情報共有されることを期待して、基本的なことばかりになってしまうがNiagaraに関する記事も書いていこうと思う。
環境
UE4.20 Preview5
Niagaraを有効にする
現段階では実験的機能で、プラグイン扱いとなっている。有効にするにはプラグイン -> FXのNiagaraをEnabledにしなければならない。
Niagara Extrasは必須ではないが、参考になるNiagara EmitterやNiagara Module Scriptが用意されている。今回作るエフェクトではこちらに用意されているスクリプトを流用するのでEnabledにする。
再起動後、プラグインに含まれているアセットを見たい時は、コンテンツブラウザのView OptionsでShow Plugin Contentにチェックを入れる必要がある。
CascadeとNiagaraの違い
これについてはこちらの記事がとても詳しい。
ここでも簡単な解説を。
従来のCascadeの編集画面。
CascadeではEmitterという一つの塊に寿命、初速度、加速度、色といった予め用意されているModuleを追加する。そうして作った複数のEmitterで一つのエフェクトを作っていた。
一方Niagara。これはコンテンツブラウザのFX->Niagara Emitterで追加できるNiagara Emitterの編集画面。
大元にある
- Emitter Spawn
- Emitter Update
- Particle Spawn
- Particle Update
- Render
というモジュールが Niagara Module Script からの入出力を受け取り、寿命、初速度、加速度、色等を制御する。
大きな違いは
こと。
Niagaraは Niagara Emitterという形でEmitterを別ファイルとして保持する。そして個別に作られたEmitterは Niagara Systemでまとめて管理され、ここで一つのエフェクトが完成する。
こちらはNiagara Systemの編集画面。NE_CircleGeneというNiagara Emitterを2つ持ち同時に再生することで一つのエフェクトとなっている。
そしてNiagaraではモジュールをノードベースでプログラマブルに制御出来る。ここがNiagara最大の特徴と言える。
Niagara Emitter内でSelected Emitter Graphを見てみるとこのようなノードベースのコードが見られる。
これは先程見せた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の編集画面
Niagaraを使ってみる
今回はNiagara Extrasに用意されているEmitterを利用して作っていく。
NiagaraExtras Content/Emittersに入っているEmitterを自分のコンテンツフォルダの中にコピーして入れる。そのEmitterを開くとおそらくこの様なエフェクトが見れるだろう。これだけでも圧巻。
パーティクルに重力をかける
Selected Emittersタブ上でParticle Updateの右側にある+マークをクリック。Acceleration Forceを検索し追加する。このままではエラーが出るのでドラックアンドドロップでSolve Force and Velocityの上に表示されるようにする。
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と設定しておく。
このRotDirectionをMap SetのParticles.Velocityにつながっている値と掛け合わせる。
Emitter編集画面に戻ってSelected EmittersタブにあるPoint Sprial Locationを見てみると、新たにRotDirectionという数値を設定する枠が用意される。この値を1.0にすれば順回転、-1.0に設定すれば逆回転させることが出来る。
Niagara Systemにまとめる
コンテンツブラウザでNiagara Systemを追加。最初の段階では何も表示されていない。Timelineの +Track を選択して先程作ったEmitterを追加できる。今回は作ったEmitterを2つ追加する。
Timelineで選択したEmitterのパラメータは、これまでと同じくSelected Emittersタブで制御出来る。
最初に追加したEmitterは、RotDirection 1.0に、次に追加したEmitterはRotDirection -1.0に設定すると、順回転、逆回転する2つのEmitterが同時に発生する。
Particle Update内の Set VariablesタブでParticle.Colorを赤と青に設定するなどするとこんな遺伝子のようなParticleの完成。
Niagara練習 #UE4 pic.twitter.com/fkD7oKinqJ
— ai (@ai_9684_dct) 2018年7月11日
高画質版 #UE4 pic.twitter.com/zjlpmSUcnU
— ai (@ai_9684_dct) 2018年7月11日
まとめ
比較的簡単に、Cascadeでは難しかったであろうエフェクトが作れた。一部標準実装のModule Scriptのコンパイルが通っていないのにエフェクトは正常に動作するなど怪しい部分もあるが、今回の作業中にクラッシュすることは一度もなかった。正式版も近いかも……?