ノートの端の書き残し

UnityやらC#やら。設計が得意かもしれない。

UE5機能別サンプルを見る Niagara①

UE5.1.0
レベル:Nagara_Particles

Niagara関連のレベルは3つあります(Particles, Fluids, Advanced)が、とりあえず一番基本的そうなParticlesから。

学習の手順

各レベルに含まれるNiagaraコンポーネントのアクタを選択して、コンテンツブラウザでブラウズを押して出てくるNiagaraSystemを見ていく。 エミッタやコンポーネントのオンオフしたり、自分で作ったNiagara内でコンポーネントを試用してとりあえず片っ端からコンポーネントの役割を見ていきます。 機能別サンプルのブループリントやNiagaraSystemにはコメントで仕様など解説が貼り付けられているので、英語でダルいですがちゃんと読んでいきます。

Simple_system

コメントの内容

まずはシステムの説明ですね。

Niagaraはどのように動くのか。

Niagaraは一連のスクリプトを走らせます。それをスタックと呼びます。まず、青いSystem Scriptです。

System Scriptはパーティクルシステムのライフサイクル全体を制御します。 システムスポーンは、システムが生成された最初のフレームで起こることを制御し、 システムアップデートはそれ以降毎フレーム走るロジックです。

ここで生成された属性は、システム-> エミッター -> パーティクルと流れるデータで、システム内の全てのエミッターとパーティクルにアクセスできます。

次にその右側のなんか色々あるやつ。 エミッター内の各大項目についてですね。

エミッタのスポーンとエミッタの更新についての話です。

次に、このオレンジ色のセクションは、システム内のすべてのエミッターに対して実行されます。各エミッターは同様のspawnとupdateスクリプトを持っています。これは、システム内の各エミッターのライフサイクルを制御する場所です。ループするのか?一度しか再生しないのか?パーティクルの生成は許可されているか?もしそうなら、数は?エミッタースクリプトは、このような質問に答えるためのものです。

次はその下の、パーティクルのスポーンとパーティクルの更新の話。

そして、これらの緑色のParticleスクリプトは、エミッター内の個々のパーティクルに対して独立して実行されます。パーティクルスポーンとパーティクルアップデートの両方には多くのビルドイン動作(モジュールと呼ばれる)があり、各スクリプトヘッダの横にある色のついた「+」ボックスからアクセスするか、モジュールを右クリックして「上に挿入」または「下に挿入」を選択することでアクセスできます。

最後、

最後に、レンダラー(今回はスプライトレンダラー)を選択します。マテリアルを割り当てたり、ベロシティ・アライメントやカメラ・フェイシングなどのオプションを選択することができます。

その右に最後のコメント

システムには、複数のエミッターを含めることができます。

別のエミッタを追加したい場合は、右クリックして「Add Emitter」を選択し、「Template only」を選びます。これらは、新しいエフェクトの出発点となるエミッターです。

もし、そこにテンプレートがない場合は、コンテンツブラウザで右下の目玉をクリックし、「プラグインコンテンツを表示」と「エンジンコンテンツを表示」を選択してください。これで、ナイアガラのテンプレートがいくつも表示され、使い始めることができます。

バースト、ファウンテン、フローティングポイント、あるいはゼロから始めたい場合は空のテンプレートがあります。

DeepL先生にペッと貼り付ければ(訳の正誤は確認した方がいいけど)すぐ読めるんで、いいドキュメントですね。

各モジュールの中身

流石に一番最初のシステムだけあってめちゃくちゃシンプルですが、

  • エミッタの更新
    • Spawn Rate: 毎秒5個生成
  • パーティクルのスポーン
    • Initialize Particle: パーティクルの初期状態(色とか、大きさとか)
    • Add Velocity: パーティクルの初期速度
  • パーティクル更新
    • Scale Sprite Size: パーティクルの大きさ変更。今はSprite描画なのでSpriteサイズ。
    • Scale Color: 色変更。(スケール……?)
  • レンダリング
    • Sprite Renderer: 各パーティクルとしてSpriteを描画する設定。マテリアルとかシェーダ周りはここですね。

他はおまじない的なものだと思えばよさそう…… このNiagaraシステムで見るべきはパーティクルのサイズと色の変更でカーブを書いたり細かい設定ができるところ。 多分毎フレームの計算は他のモジュールでも出てくるので、なんか色々細かい計算式やカーブを設定できるって覚えといて、必要な時にいじればよさそう。

一番シンプルなシステムをとりあえず見ましたが、機能別サンプルを端折らずに見ていくのはだいぶ良さそうですね。

MeshRotation_System

見た目は割と違いますが、Simple_systemとほぼ同じ。メッシュを使って回転させているみたいですね。機能別サンプルは隣同士で近い実装になっているので、ちゃんと順番に見ることで少しずつ学んでいけるようです。

Simple_systemからの主な変更点は以下。

  • レンダリング
    • Mesh Renderer: SpriteじゃなくてMeshをパーティクルとして描画するのでこっち。
  • パーティクルのスポーン
    • Initialize particle: パーティクルの大きさ設定は、今回はメッシュを使うのでMesh Attributeの中で設定。おなじ「大きさ」でもSpriteと別の項目ということですね。
    • Initial Mesh Orientation: メッシュの向き初期化。
  • パーティクル更新
    • Update Mesh Orientation: メッシュの向き更新。
    • Mesh Size Scale: メッシュのサイズ更新。

SpriteとMeshで違うモジュールを使うかもしれない、ということは頭に入れておくべきでしょうね。

この2つがとりあえずNiagaraの超基本っぽいです。