ナレッジ

Day 3: Emitter の5つの段

Fountain のエミッタを上から順に開いて、エミッタのスポーン・エミッタの更新・パーティクルのスポーン・パーティクル更新・レンダリングの5つの段に何が入っているかを見ていきます。

UE 5.7 の Fountain テンプレート(FountainLightweight)を黒地で動かし、水色に光る粒が下から吹き上がるアニメーション。左に「Niagara 100日 Day 3 Emitter の 5 つの段」の文字

UE 5.7 で撮影しています。

Day 1 では、スタックが「いつ起きるか」の順に並んでいることを、表でざっくり見ました。Day 2 では、いちばん小さいエミッタ(Minimal)を開いて、4 つしかモジュールが入っていないことを確かめました。

今日はそのあいだを埋めます。噴水の Fountain(ファウンテン) を開いて、5 つの段を上から 1 段ずつ 見ていきましょう!実際に中身を 1 つずつ開くと、段ごとに入っている物の性質を見ていきましょう

1. まずは Fountain のエミッタを開いてみましょう

System(システム) のグラフで右クリックして、エミッタを追加… から Fountain を選びます。Day 2 で使ったのと同じ手順です。

「システムにエミッタを追加する」の画面。左の Template で絞り込み、テンプレートの Fountain を選んだところに赤枠 ①、右下の「追加」ボタンに赤枠 ②。右の欄には Fountain の説明と、実行対象 CPU・Template の表示が出ている

足されたエミッタの箱(ノード)を見ると、上から 5 つの段が並んでいます。

Fountain の箱の全体。上から エミッタのスポーン ①・エミッタの更新 ②・パーティクルのスポーン ③・パーティクル更新 ④・レンダリング ⑤ の 5 つの段を、それぞれ赤枠と番号で囲んでいる
番号段の名前(画面の表示)英語名
①エミッタのスポーンEmitter Spawn
②エミッタの更新Emitter Update
③パーティクルのスポーンParticle Spawn
④パーティクル更新Particle Update
⑤レンダリングRender

モジュールの行の左端に細い色の帯が付いていて、①② がオレンジ(エミッタ)、③④ が緑(パーティクル)、⑤ が赤(描画)です。段の右にある + の丸も同じ色です。Day 1 で書いた色分けが、そのまま帯の色になっています(① は空っぽなので、帯はまだありません)。

2. ①エミッタのスポーンと ②エミッタの更新を見ていきます

上の 2 段は、粒ではなく エミッタそのもの の段です。

  • ① エミッタのスポーン … エミッタが生まれたときに 1 回だけ
  • ② エミッタの更新 … エミッタが生きているあいだ、ずっと

Fountain では、① は空っぽで、② に 2 つ入っています。

Fountain の箱で、エミッタの更新の段にある Emitter State(Self・Infinite のバッジ付き)に赤枠 ①、Spawn Rate に赤枠 ②。どちらの行も左端の帯はオレンジ
入っているモジュール何をしているか
Emitter State(エミッタステート)エミッタの寿命。Day 2 で開いたモジュールです
Spawn Rate(スポーンレート)1 秒あたりに粒をいくつ出すか

ここで 1 つ気づいてほしいのが、粒を出す係(Spawn Rate)が、粒の段(パーティクルのスポーン)ではなくエミッタの段にいる ことです。

粒を生むのはエミッタの仕事なので、エミッタ側の段に置かれています。粒の段(③④)には、生まれた後の粒のことしか入っていません。

ちなみに Day 2 の最小エミッタでは Emitter State に System のバッジが付いていましたが、Fountain の Emitter State には、最初から Self のバッジが付いています。

3. ③パーティクルのスポーンを開いて中身を確認

ここからが粒の段です。③ は 粒が 1 つ生まれたときに、その粒に 1 回だけ 走ります。

Fountain の箱で、パーティクルのスポーンの段にある Initialize Particle に赤枠 ①、Shape Location(Sphere)に赤枠 ②、Add Velocity(In Cone)に赤枠 ③。3 行とも左端の帯は緑
入っているモジュール何をしているか
Initialize Particle(イニシャライズパーティクル)寿命・色・大きさなど、粒の最初の値をまとめて決める
Shape Location(シェイプロケーション)粒が生まれる場所の形(Fountain では Sphere=球)
Add Velocity(アドベロシティ)生まれたときの速さと向き(Fountain では In Cone=円すいの範囲)

生まれた瞬間に決めておけばよいこと、つまり「最初の値」がここに集まっています。

4. ④パーティクル更新は、毎フレーム動かす段です

④ は、生きている粒すべてに、毎フレーム 走ります。

Fountain の箱で、パーティクル更新の段にある 5 つのモジュールに上から赤枠と番号。① Particle State・② Gravity Force・③ Drag・④ Scale Color・⑤ Solve Forces and Velocity
入っているモジュール何をしているか
Particle State(パーティクルステート)粒の歳を進めて、寿命が来たら消す
Gravity Force(グラビティフォース)下に引っぱる力(重力)
Drag(ドラッグ)空気の抵抗のように、だんだん遅くする力
Scale Color(スケールカラー)色の濃さを時間で変える
Solve Forces and Velocity(ソルブ フォーシズ アンド ベロシティ)上の力をまとめて、実際に粒を動かす

最後の Solve Forces and Velocity が地味に大事で、Gravity Force や Drag は「力を足す」だけで、粒を実際に動かすのはこのモジュールです。なので、力のモジュールはこれより上に置きます。

といっても、自分で並べ替える必要はあまりありません。+ から Gravity Force を足し直してみたら、UE が自動で Solve Forces and Velocity のすぐ上に入れてくれました。

5. ⑤レンダリングで、粒の見せ方を決めます

最後の段は描画です。Fountain には Sprite Renderer(スプライトレンダラー) が 1 つ入っています。

左は Fountain の箱で、レンダリングの段の Sprite Renderer に赤枠 ①。右はエディタのプレビューで、白く丸い粒が噴水のように上がって落ちている様子を赤枠 ② で囲んでいる

ここまでの ①〜④ で決めたのは「粒の数字」だけで、それを画面に板として描いているのがこの段です。Sprite Renderer のチェックを外すと、プレビューの粒は消えますが、詳細の上の「パーティクル」の数は残ったままです。粒は計算されているのに、描く係がいないので何も見えない、という状態です。

5-1. 上から順に走る、を見ていきます

5 つの段は、上から下へ順番に処理されます。同じ段の中でも、モジュールは上から順です。

なので、同じ値に 2 つのモジュールが手を加えると、下にある方が後から手を加えます。 例えば、③ の Initialize Particle で色を赤にしても、④ の Scale Color で色を掛け算すると、見えるのは掛けた後の色です。

これは Day 8 の色の回で、もう一度出てきます。

5-2. 6 つ目の段もあります

公式の説明では、段は 6 つあると書かれています。足りない 1 つは Event Handler(イベントハンドラー) で、粒がぶつかったとき・消えたときなどに別の粒を出す仕組みです。

最初からは表示されていなくて、エミッタに足したときだけ現れます。今の連載の範囲ではまだ使わないので、名前だけ覚えておけば大丈夫です。

6. 今日の一歩 — 5 つの段を開いてみる

実際に開いてみましょう!

  1. System を新しく作り、グラフで 右クリック して エミッタを追加… から Fountain を選ぶ
  2. Fountain の箱で、モジュールの左端の色の帯(オレンジ・緑・赤)を見る
  3. ② エミッタの更新をクリックして、Spawn Rate がここにいることを確かめる
  4. ③ パーティクルのスポーンと ④ パーティクル更新を開いて、「最初に 1 回」と「毎フレーム」の違いを、入っているモジュールの名前から想像してみる
  5. 余力があれば、④ の Gravity Force のチェックを外して、プレビューで粒が落ちなくなるのを見る
今日の一歩を 5 枚のカードにした図。1 System に Fountain を足す、2 左の色の帯を見る(黄色の枠)、3 Spawn Rate の居場所(黄色の枠)、4 ③ と ④ の中身を見比べる、5 余力があれば Gravity を外す(点線の枠)。下に「黄色の枠の 2 と 3 まで見られれば、今日は十分です」

2 と 3 だけで今日は十分です。「粒を出す係はエミッタの段にいる」が目で分かると、明日の Spawn の回がぐっと読みやすくなります。

7. ここでつまずいたら、だいたいこの 2 つです

  • 段の名前が英語で出ている … エディタの言語が英語になっています。Emitter Spawn / Emitter Update / Particle Spawn / Particle Update / Render が、そのまま上の表の ①〜⑤ です。
  • 箱(ノード)を見ても段が出てこない … 箱がたたまれています。箱の左上の小さな三角をクリックすると開きます。

8. 読み方メモ(この回に出てきた英語)

  • Emitter Spawn(エミッタスポーン)… エミッタが生まれたときに 1 回
  • Emitter Update(エミッタアップデート)… エミッタが生きているあいだずっと
  • Particle Spawn(パーティクルスポーン)… 粒が生まれたときに 1 回
  • Particle Update(パーティクルアップデート)… 生きている粒に毎フレーム
  • Render(レンダー)… 描画
  • Initialize Particle(イニシャライズパーティクル)… 粒の最初の値を決める
  • Shape Location(シェイプロケーション)… 生まれる場所の形
  • Add Velocity(アドベロシティ)… 生まれたときの速さ
  • Gravity Force(グラビティフォース)… 重力
  • Drag(ドラッグ)… 抵抗。だんだん遅くする
  • Solve Forces and Velocity(ソルブ フォーシズ アンド ベロシティ)… 力をまとめて粒を動かす
  • Sprite Renderer(スプライトレンダラー)… 粒を板として描く
  • Event Handler(イベントハンドラー)… 出来事に合わせて別の粒を出す仕組み

9. まとめ

今日の確認したことは 3 つです。

  1. エミッタのスタックは、画面では 5 つの段に分かれています。上の 2 段がエミッタ、次の 2 段が粒(パーティクル一つ一つ)、最後が描画です。
  2. 粒を出す Spawn Rate は、粒の段ではなく、エミッタの更新の段にいます。
  3. 段もモジュールも上から順に走るので、同じ値に手を加えると、下にある方が後から効きます。
Day 3 のまとめを 3 枚のカードにした図。1 段は 5 つ、上から順(エミッタ・粒・描画の色分け)、2 Spawn Rate はエミッタの段(エミッタの更新の Spawn Rate を黄色で強調)、3 下にある方が後から効く(Initialize Particle の赤に Scale Color を掛けると、見える色が変わる)

Day4では、その Spawn Rate のなかまの「粒の出し方」3 つを並べて見ていきます。同じところで迷った方の、ちょっとでも役に立てば幸いです。