Niagara のキー コンセプト

このページでは、Niagara のキー コンセプトとデザイン フィロソフィーについて説明します。Niagara ビジュアル エフェクト システムについての理解を深めます。

Windows
MacOS
Linux

Niagara のデザイン フィロソフィー

Unreal Engine の視覚効果が見直された理由

Unreal Engine のユーザーベースは拡大しており、現在 Unreal Engine はゲーム業界を超えて、以下のような数多くの産業で利用されています。

  • アーキテクチャ ビジュアライゼーション

  • 自動車設計などのインダストリアル デザイン

  • 仮想的なテレビと映画の制作

Unreal Engine のユーザーはかつてないほど多様化し、デザインを学ぶ学生から、インディー デベロッパー、そして大規模なスタジオのプロのチームに及びます。Unreal Engine が進化すると、Epic のデベロッパー達はもやはエキスパートではなくなります。私達の目標は、すべての産業における、すべてのユーザーの役に立つビジュアル エフェクト (VFX) システムを作ることでした。

Cascade システムの長所と短所

Cascade は Unreal Engine で長年採用されてきた VFX システムです。Cascade には以下のような長所があります。

  • ビヘイビアをすぐに追加でき、Cascade モジュール同士でレイヤー、スタック、インタラクト操作がしやすい。

  • 非技術系のアーティストが自由に制御し、一般的な挙動を一通り使用できる。

  • スタック パラダイムは、数多くの情報を一目で分かるように提供できる。

ただし、Cascade には以下の欠点もあります。

  • 機能が固定である。機能の変更、追加/削除をするためにプログラマーが必要である。

  • システムへの追加によりパーティクルのペイロードが肥大化する。

  • パーティクル システムとエンジン内のその他のシステム間でのデータ共有がほぼ不可能である。

  • イベントは制限があり、扱いにくい。

  • CPU と GPU のシミュレーションが非常に難しい。

新しい VFX システムが掲げる目標

Cascade の短所を排除した新しい要素を取り入れつつ、Cascade の長所と強みを進化させた新システムの作成を目指しました。以下が新しい VFX システムが掲げる目標です。

  • アーティストが自由自在に制御できる。

  • 軸ごとにプログラミングとカスタマイズができる。

  • デバッグ、ビジュアル化、パフォーマンスのより良いツールを提供する。

  • Unreal Engine 4 の他の部分、または外部ソースからのデータをサポートする。

  • ユーザーの邪魔にならない、控えめなシステムである。

目標に対する Niagara の成果

データの共有

ユーザーが自由自在に制御するには、データへのアクセスが必要です。ユーザーが Unreal Engine のすべての部分、そして他のアプリケーションからも自由にデータを使用可能にするために、すべてをユーザーに公開することにしました。

パーティクルのペイロード

このすべてのデータをユーザーに公開するには、データの使用方法を構築する必要があります。名前空間は階層データにコンテナを提供します。たとえば、Emitter.Age はエミッタ用のデータを、また Particle.Position はパーティクル用のデータを含みます。パラメータ マップはパーティクルの属性のすべてを運ぶパーティクル ペイロードです。この結果、すべてがオプションとなりました。

様々なデータ タイプの追加を可能にする

どんな種類のデータでもパーティクル パラメータとして追加できます。複雑な構造体を追加したり、マトリクスやBoolean フラグを変形できます。それだけでなく、他のデータ タイプも追加して、エフェクトのシミュレーションで使用できます。

グラフ パラダイムとスタック パラダイムを結合する

スタック パラダイム (Cascade で使用されるような) とグラフ パラダイム (ブループリントで使用されるような) はそれぞれ長所があります。スタック パラダイムはユーザーに対してモジュラーの挙動を分かりやすく提供します。グラフ パラダイムでは、ユーザーは挙動をより自由に制御することができます。この 2 つのパラダイムの長所を結合して新しいエフェクト システムが誕生しました。

Niagara のハイブリッド構造体の階層

モジュール

モジュールはグラフ パラダイムにおいて機能します。視覚的なノード グラフを使用して、スクリプト エディタの中で HLSL でモジュールを作成できます。モジュールは、Cascade ではビヘイビアに当たります。モジュールは一般的なデータと対話し、ビヘイビアをカプセル化し、まとめてスタックします。

エミッタ

エミッタはスタック パラダイムで機能します。モジュールのコンテナとして動作し、まとめてスタックして様々なエフェクトを作成できます。エミッタの用途は単一ですが、再利用ができます。パラメータはモジュールからエミッタ レベルへ送られますが、エミッタでモジュールとパラメータを変更できます。

システム

エミッタ、システムはスタック パラダイムで機能します。また、システム内のエミッタの挙動を制御するために使用するシーケンサー タイムラインとも機能します。システムはエミッタ用のコンテナです。システムはこれらのエミッタを 1 つのエフェクトにまとめます。Niagara Editor でシステムを編集する場合、システム内にあるすべてのパラメータ、モジュール、エミッタの変更およびオーバーライドができます。

Niagara におけるスタック選択およびスタック グループ

Niagara でのパーティクル シミュレーションは概念的にはスタックとして機能します。シミュレーションは上流から下流方向にモジュールを順番に実行して行われます。各モジュールは、モジュールの実行時を説明するグループに割り当てられます。たとえば、パーティクルを初期化するモジュールやパーティクルのスポーン時に動作するモジュールは Particle Spawn モジュールに割り当てられます。

各グループ内には、複数のステージがある場合があり、それらはシステムのライフサイクルの特定のポイントで呼ばれます。エミッタ、システム、パーティクルにはすべてデフォルトで Spawn ステージと Update ステージがあります。Spawn ステージはグループが存在する最初のフレームで呼び出されます。例えば、システムは、システムがレベルで最初にインスタンス化されアクティベートされる時に、Spawn ステージを呼び出します。パーティクルは、エミッタがパーティクルを放出すると Spawn ステージを呼び出し、作成された新しいパーティクルそれぞれに対して Spawn 命令が実行されます。Update ステージはシステム、エミッタ、パーティクルがアクティブなフレームで呼び出されます。

さらに、EventSimulation Stage などの詳細なステージもあります。これらは Spawn と Update フローに追加することができます。Event は、パーティクルが新しいイベントを生成し、エミッタがそのイベントを処理する設定にすると呼び出されます。可能な場合は、イベント ハンドラ ステージが同一フレームで発生します。ただし、元になるイベントの後です。Simulation Stage は高度な GPU 機能です。この機能は、複数の Spawn ステージおよび Update ステージを順番に発生させることができます。流体シミュレーションなど複雑な構造体の作成に便利です。

モジュールはアイテムですが、アイテムはモジュールではありません。「モジュール」はユーザーが作成することができる編集可能なアセットです。「アイテム」はユーザーが作成することはできないシステムまたはエミッタの一部を指します。アイテムの例は、システム プロパティ、エミッタ プロパティ、レンダラです。

ステージ、グループ、名前空間、データのカプセル化

各モジュールをグループ (システム、エミッタ、パーティクル) のステージ (Update、Spawn、Event、Simulation) に割り当てることで、「いつ」モジュールを実行するのかだけでなく、モジュールが「どのデータ」と機能するのかも制御できます。Stack Group は、そのグループのモジュールの読み込み元/書き込み先となるデータを定義する Namespace と紐づいています。

たとえば、System Group で実行するモジュールは System Namespace のパラメータに対しては読み書きが可能ですが、Engine Namespace または User Namespace に属するパラメータに対しては読み込みのみ可能です。実行は System Group から Emitter Group に対して行われるので、Emitter Group で実行するモジュールは Emitter Namespace のパラメータに対しては読み書きが可能ですが、System Namespace または Engine Namespace のパラメータに対しては読み込みのみ可能です。Particle Group のモジュールは、System Namespace と Emitter Namespace のパラメータの読み込みのみ可能です。

Emitter Group のモジュールは、System Namespace のパラメータからの読み取りが可能な場合があるので、すべてのエミッタに関連するシミュレーションを System Group のモジュールで 1 回だけ実行できます。そして (System Namespace に格納されている) 結果を個々のエミッタの Emitter Group モジュールで読み込むことができます。System Namespace と Emitter Namespace のパラメータの読み込みが可能な Particles Group モジュールで継続します。、これらの関係性を簡単に説明した以下の表を参照してください。

モジュール グループ

Namespace からの読み込み

Namespace への書き込み

System

System, Engine, User

System

Emitter

System, Emitter, Engine, User

Emitter

Particle

System, Emitter, Particle, Engine, User

Particle

Select Skin
Light
Dark

新しい Unreal Engine 4 ドキュメントサイトへようこそ!

あなたの声を私たちに伝えるフィードバックシステムを含め、様々な新機能について開発をおこなっています。まだ広く使える状態にはなっていないので、準備ができるまでは、ドキュメントフィードバックフォーラムで、このページについて、もしくは遭遇した問題について教えていただけると助かります。

新しいシステムが稼働した際にお知らせします。

フィードバックを送信