Niagara の主要概念

このページでは、ナイアガラのキー コンセプトとデザイン フィロソフィーについて説明します。ナイアガラの視覚効果システムについての理解を深めます。

Windows
MacOS
Linux

ナイアガラのデザイン フィロソフィー

Unreal Engine で視覚効果が考案された理由

Unreal Engine のユーザーベースは拡大しており、Unreal Engine は今やゲーム業界を超えた数多くの産業で利用されています。例:

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

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

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

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

カスケード システムの長所と短所

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

  • ビヘイビアを追加すると反応が速くなり、カスケード モジュール同士でレイヤー、スタック、インタラクト操作がしやすい。

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

  • スタック パラダイムを使用して、一目でわかる多くの情報を提供できる。

ただし、カスケードには以下の欠点もあります。

  • カスケードの機能は固定されている。機能の変更、追加/削除をするためにプログラマーが必要である。

  • システムへ何かを追加するとパーティクルのペイロードが肥大化する。

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

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

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

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

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

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

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

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

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

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

目標に対するナイアガラの貢献

データ共有

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

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

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

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

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

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

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

ナイアガラのハイブリッド構造体の階層

モジュール

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

エミッタ

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

システム

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

ナイアガラにおけるスタック選択およびスタック グループ

ナイアガラでのパーティクル シミュレーションは概念的にはスタックとして機能します。シミュレーションは上流から下流方向にモジュールを順番に実行して行われます。各モジュールは、モジュールの実行時を説明するグループに割り当てられます。たとえば、パーティクルを初期化するモジュールやパーティクルのスポーン時に動作するモジュールは 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 は、そのグループのモジュールの読み込み元/書き込み先となるデータを定義する Namespaces と紐づいています。

たとえば、System Group で実行するモジュールは、エンジン名前空間あるいはユーザー名前空間に属するパラメータの読み込みだけが可能です。システム名前空間のパラメータの読み込み/書き込みは可能な場合があります。System Group から Emitter Group 方向へ実行されるので、Emitter Group で実行するモジュールはシステム名前空間、エンジン名前空間、ユーザー名前空間内のパラメータの読み込みと、エミッタ名前空間にあるパラメータの読み込み/書き込みができます。Particle Group のモジュールは、システム名前空間とエミッタ名前空間のパラメータの読み込みのみ可能です。

Emitter Group のモジュールは、システム名前空間内のパラメータからの読み取りが可能な場合があるので、すべてのエミッタに関連するシミュレーションを System Group のモジュールで一度行うことができ、(名前空間に格納されている) 結果を個々のエミッタの Emitter Group モジュールで読み取ることができます。システム名前空間とエミッタ名前空間のパラメータの読み込みが可能な Particles Group モジュールでこれが継続します。これらの関係の簡単な説明については、以下の表を参照してください。

モジュール グループ

名前空間からの読み込み

名前空間への書き込み

System

System, Engine, User

System

Emitter

System, Emitter, Engine, User

Emitter

Particle

System, Emitter, Particle, Engine, User

Particle

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback