ナイアガラの概要

このページでは、Unreal Engine 4 のナイアガラ VFX システムの概要について説明します。

Windows
MacOS
Linux

カスケードとナイアガラは両方とも Unreal Engine (UE4) 内でのビジュアル エフェクト (VFX) の作成に使用できますが、ナイアガラを使用して VFX を作成、調整する方法は、カスケードとはかなり異なります。

ナイアガラは Unreal Engine の次世代 VFX システムです。ナイアガラを使用することで、テクニカル アーティストはプログラマーのサポートなく、自分で追加の機能を作成できます。VFX システムは、わかりやすく、使いやすいシステムでありながら、できる限り適応性と柔軟性に富んだシステムになるよう設計されています。

ナイアガラのコア コンポーネント

ナイアガラ VFX システムには、次の 4 つのコンポーネントがあります。

  • システム

  • エミッタ

  • モジュール

  • パラメータ

システム

ナイアガラ システムは、複数のエミッタ用のコンテナであり、これらすべてのエミッタを 1 つのエフェクトにまとめます。例えば、花火エフェクトを作成する場合、花火で複数のバーストが必要になる場合があります。そのためには、複数のエミッタを作成して、作成したすべてのエミッタを Firework というナイアガラ システムに配置します。 ナイアガラ システム エディタでは、システム内にあるすべてのエミッタまたはモジュールの任意の要素を変更および上書きすることができます。システム エディタの [Timeline (タイムライン)] パネルでは、どのエミッタがシステムに含まれているかが示されており、このパネルを使用して、それらのエミッタを管理できます。 エミッタ エディタとシステム エディタはほとんど同じです。システム エディタ インターフェースの詳細については、「ナイアガラ システムとエミッタ エディタのリファレンス」 を参照してください。システム エディタで動作が異なる UI 要素は、各セクションで示されています。

エミッタ

ナイアガラ エミッタはモジュールのコンテナです。ナイアガラ エミッタは 1 つの目的にしか使用できませんが、再利用することができます。ナイアガラ エミッタ固有の特長の 1 つは、モジュール スタックを使用してシミュレーションを作成し、同じエミッタでそのシミュレーションを複数の方法でレンダリングできることです。引き続き花火エフェクトを例として挙げると、火花用のスプライト レンダラと、火花に続く光線用のリボン レンダラを含むエミッタを 1 つ作成することができます。 ナイアガラ エミッタ エディタ インターフェースの詳細については、「ナイアガラ システムとエミッタ エディタのリファレンス」 を参照してください。

モジュール

ナイアガラ モジュールは、ナイアガラ VFX の基本レベルです。モジュールは、カスケードのビヘイビアに相当し、一般的なデータとの対話、ビヘイビアのカプセル化、他のモジュールとのスタック、および関数の作成を行います。 モジュールは High Level Shading Language (ハイレベル シェーディング ランゲージ、略称:HLSL) を使用して作成されますが、グラフでノードを使用して視覚的に作成することもできます。関数を作成したり、入力を含めたり、値やパラメータ マップに書き込んだりすることができます。グラフで CustomHLSL ノードを使用して、HLSL コードをインラインで記述することもできます。 ナイアガラ エミッタで使用可能なデフォルトのモジュールの詳細については、「ナイアガラ システムとエミッタ モジュールのリファレンス」 を参照してください。

パラメータとパラメータの型

パラメータは、ナイアガラ シミュレーションにおいてデータを抽象化したものです。パラメータには、パラメータが表すデータを定義する型が割り当てられています。パラメータには、次の 4 つの型があります。

  • プリミティブ:幅広い精度とチャンネル幅を持つ数値データを定義します。

  • 列挙型:名前付きの値の固定セットを定義し、いずれかの名前付きの値を受け入れます。

  • 構造型:プリミティブ型と列挙型を併用したセットを定義します。

  • データ インターフェース:外部データ ソースからデータを提供する関数を定義します。これは、UE4 の他の部分のデータであったり、外部アプリケーションのデータであったりする場合があります。

プラス ボタン (+) をクリックして、[Create New Parameter (パラメータの新規作成)] を選択すると、エミッタにカスタムのパラメータ モジュールを追加できます。また、プラス ボタン (+) をクリックして、[Set Specific Parameter (特定のパラメータの設定)] を選択すると、エミッタにカスタムの Set Variable モジュールを追加できます。これらのエミッタ モジュールや他のエミッタ モジュールの詳細については、「ナイアガラ システムとエミッタ モジュールのリファレンス」 を参照してください。

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

ナイアガラ スタック モデルとスタック グループ

ナイアガラのパーティクル シミュレーションは 1 つの スタック として機能します。シミュレーションはそのスタックの上から下に向かって、「モジュール」と呼ばれるプログラム可能なコード ブロックを順番に実行します。重要なのは、どのモジュールも、モジュールがいつ実行されるかを決定するグループに割り当てられていることです。

System Group に属するモジュール (System Spawn、System Update など) を最初に実行し、すべてのエミッタで共有されているビヘイビアを処理します。次に、Emitter Group のモジュールおよびアイテム (Emitter Spawn、Emitter Update など) を一意の各エミッタに対して実行します。その次に、Particle Group のパラメータを個々のエミッタで一意の各エミッタに対して実行します。最後に、各エミッタがシミュレートされたパーティクル データを画面に出力する方法を Renderer Group のアイテムが記述します。

テンプレートおよびウィザード

初めてナイアガラ エミッタまたはナイアガラ システムを作成する際は、作成するエミッタまたはシステムの種類に関して複数のオプションを提示するダイアログが表示されます。これらのオプションの 1 つに、テンプレートを選択する方法があります。これらのテンプレートは、複数の一般的な基本エフェクトに基づいており、スタックにはすでに各種モジュールが配置されています。 テンプレートのパラメータはいずれも変更可能です。どのモジュールも追加、変更、または削除することができます。また、システム テンプレートでは、どのエミッタも追加、変更、または削除できます。テンプレートは、クリエイティビティを促進するために、すぐに操作できるように作成されています。

エミッタ ウィザード

エミッタ ウィザードには、新しいエミッタを作成するための次のオプションがあります。

  • Create a new emitter from an emitter template (エミッタ テンプレートから新しいエミッタを作成する):このオプションを選択すると、一般的に使用されるいくつかの種類のエフェクトを表示するテンプレートのリストから選択できます。大規模な開発スタジオでは、企業のベスト プラクティスがテンプレートに確実に反映されるようにするため、テンプレートのリストはアート関連の責任者やクリエイティブ ディレクターが作成する場合があります。また、UE4 を初めて使用する場合は、手始めにこれらのテンプレートを使用することをお勧めします。

クリックしてフルサイズ表示。

  • Copy an existing emitter from your project content (プロジェクトのコンテンツから既存のエミッタをコピーする):このオプションを選択すると、作成済みのエミッタをコピーして新しいエミッタを作成できます。同じようなエミッタを複数作成する必要がある場合に役立ちます。コピーするエミッタの名前を検索バーに入力して、検索結果のリストから選択します。

クリックしてフルサイズ表示。

  • Inherit from an existing emitter in your project content (プロジェクトのコンテンツの既存のエミッタから継承する):このオプションを選択すると、既存のエミッタのプロパティを継承するエミッタを新規作成できます。このオプションを使用すると、新しいエミッタが、選択した既存のエミッタの子になります。すべてが共通の特定のプロパティを持つ多数のエミッタが必要な場合は、このオプションを選択することをお勧めします。親エミッタを変更すると、すべての子エミッタにその変更が反映されます。

クリックしてフルサイズ表示。

  • Create an empty emitter with no modules or renderers (Advanced) (モジュールまたはレンダラなしで空のエミッタを作成 (上級者向け)):このオプションを選択すると、モジュール、アイテム、レンダラを含まない新しいエミッタが作成されます。このオプションは、空白の状態からエミッタを作成したい場合に適しています。ただし、このオプションを使用するには、ナイアガラ システムの仕組みを理解しており、エミッタに実行させる処理について明確な考えを持っている必要があります。

クリックしてフルサイズ表示。

システム ウィザード

システム ウィザードには、新しいシステムを作成するための次のオプションがあります。

  • Create a new system from a system template (システム テンプレートから新規システムを作成する):このオプションを選択すると、一般的に使用される複数のエフェクト システムを表示するテンプレートのリストから選択できます。エミッタ テンプレートと同様に、このリストはアート関連の責任者やクリエイティブ ディレクターによって作成される場合があります。UE4 を初めて使用する方のために、このオプションでは、ナイアガラでの FX システムのビルド方法のサンプルが提供されます。

クリックしてフルサイズ表示。

  • Create a new system from a set of selected emitter (選択した一連のエミッタから新規システムを作成する):このオプションを選択すると、検索バーの下に使用可能なエミッタのリストが表示されます。新しいシステムに含めるエミッタを選択して、緑色の プラス (+) ボタンをクリックして追加します。このオプションは、システムに必要なエミッタがすべて作成済みである場合に使用してください。

クリックしてフルサイズ表示。

  • Copy an existing system from your project content (プロジェクトのコンテンツから既存のシステムをコピーする):このオプションを選択すると、検索バーの下に既存のシステムのリストが表示されます。コピーするシステムを 1 つ選択します。

クリックしてフルサイズ表示。

  • Create an empty system with no emitters (エミッタを含まない空のシステムを作成する):このオプションを選択すると、完全に空のシステムが作成されます。このオプションは、他のシステムとまったく異なるシステムを作成する場合に便利です。

クリックしてフルサイズ表示。

ナイアガラ VFX のワークフロー

エミッタを作成する

エミッタを作成するときは、そのエフェクトがどのように表示されるか、実行されるアクションなどを定義するモジュールをスタックに配置します。[Emitter Spawn (エミッタのスポーン)] グループには、エミッタが最初にスポーンしたときに行われる処理を定義するモジュールを配置します。[Emitter Update (エミッタの更新)] グループには、時間の経過とともにエミッタに影響を及ぼすモジュールを配置します。[Particle Spawn (パーティクルのスポーン)] グループには、パーティクルがエミッタから最初にスポーンされたときに行われる処理を定義するモジュールを配置します。[Particle Update (パーティクルの更新)] グループには、時間の経過とともにパーティクルに影響を及ぼすモジュールを配置します。[Event Handlers (イベント ハンドラ)] グループには、任意のデータを定義する 1 つ以上の Generate イベントを作成することができますその後で、生成されたイベントに反応するビヘイビアをトリガーする Listening イベントを他のエミッタに作成することができます。

システムを作成する

個々のエミッタを 1 つのシステムに結合します。このシステムで、作成しようとしているビジュアル エフェクト全体を表示します。システム固有のモジュールが複数あるため、エミッタではなくシステムを編集しているときは、エディタの一部の要素の動作が異なります。ナイアガラ エディタでシステムを編集する時に、システムに含まれるエミッタのどのモジュールでも、変更またはオーバーライドすることができます。ナイアガラ エディタの [Timeline (タイムライン)] パネルを使用して、含まれているエミッタのタイミングを管理することもできます。

モジュールを作成する

Module Function Flow

モジュール関数のフロー

  • モジュールが一時的な名前空間に蓄積されるため、より多くのモジュールをまとめてスタックできます。同じ属性に関与する限り、モジュールは適切にスタックおよび蓄積されます。

  • モジュールを記述する際は、次のように多くの関数を使用できます。

    • ブール演算子

    • Math 式

    • 三角公式

    • カスタマイズ関数

    • ボイラープレート関数をより簡単にするノード

  • モジュールを作成したら、誰でもそのモジュールを使用できます。

  • モジュールはすべて HLSL を使用します。ロジック フローは次のとおりです。

HLSL Logic Flow

作成したモジュール、エミッタ、システムはそれぞれリソースを使用することを覚えておいてください。リソースを節約しパフォーマンスを改善するには、ナイアガラに既存するモジュールを見て、新しいモジュールを作成しなくても目的を達成できるかかくにんします。動的入力 がここで大きな効果があります。

ナイアガラのパラダイム

継承

  • 平坦な階層では、ライブラリ内で既存のアセットを効果的に見つけて使用することはできません。その結果、既存のアセットを再度作成することになります。重複する作業は効率が低下するだけでなく、コストが増大します。

  • 階層的な継承では検出可能性が高まるため、既存のアセットを効果的に再利用できます。

  • システムの子エミッタでは、継承されたものはすべてオーバーライドできます。

  • モジュールを追加したり、親の値に戻したりすることができます。

  • これは、スポーン、存続期間、ループ、バーストなどのエミッタレベルのビヘイビアにも当てはまります。

動的入力

  • 動的入力は、モジュールの作成と同じ方法で作成されます。

  • 動的入力により、ユーザーは継承に関して無限の拡張性を得ることができます。

  • 動的入力は、パラメータ マップに作用するのではなく、値の型に作用します。

  • いずれの値もグラフ ロジックとユーザー向けの表示値で実行されます。

  • 動的入力はモジュールの作成とほぼ同じではありますが、実際に新規モジュールを作成することなく、動的入力を選択してスタックに含めることができます。

  • 動的入力を使用およびチェーンすることで、既存モジュールをさまざまな方法で変更およびカスタマイズできます。モジュールの肥大化を減らし、パフォーマンスを改善します。

マクロ式

  • インライン値はすべて HLSL 式のスニペットに変換できます。

  • ユーザーは、パーティクル、エミッタ、またはシステムの任意の変数、および任意の HLSL 関数または VM 関数にアクセスできます。

  • これは、新規モジュールを必要としない、小規模の一度限りの機能に適しています。

イベント

  • イベントは、要素 (パーティクル、エミッタ、システムなど) 間でやり取りを行う手段です。

  • イベントとしてあらゆる種類のデータを使用でき、ペイロード (構造体など) にパックして送信します。その後は、他のどの要素でもそのイベントをリッスンしてアクションを実行できるようになります。

  • 使用可能なオプションは次のとおりです。

    • Particle.ID を使用して、パーティクルに対してイベントを直接実行する。

    • システム内のすべてのパーティクルでイベントを実行する。

    • イベントに応じてパーティクルをスポーンするように設定し、それらのパーティクルに対してアクションを実行する。

  • イベントはグラフの特殊なノード (構造体) です。Event ノードを使用するには、次の手順を実行します。

    • イベントに名前を付けます。

    • 必要なデータをすべて追加します。

    • エミッタ スタックにイベント ハンドラを追加します。

    • イベント ハンドラのオプションを設定します。

  • イベントには個別の実行スタックがあります。

    • 精密なグラフ ロジックをイベント ハンドラに配置できます。

    • 複雑なロジックを使用してパーティクル システム全体を設定し、イベントがトリガーされたときに発生する一連のビヘイビアを個別に設定できます。

データ インターフェース

  • 任意のデータにアクセスできるようにする拡張可能なシステムがあります。

  • 任意のデータには、メッシュ データ、音声、外部 DDC 情報、コード オブジェクト、およびテキスト コンテナが含まれます。

  • データ インターフェースは、将来に向けた拡張性を高めるためのプラグインとして作成できます。

  • ユーザーは、スケルタル メッシュのデータ インターフェースを使用して、スケルタル メッシュに関連付けられたあらゆるデータを取得できます。

Houdini (フーディーニ)

  • Houdini を使用すると、スプリット ポイント、スポーン位置、衝撃位置、衝撃速度、法線などを計算できます。

  • その後、そのデータを Houdini から一般的なコンテナ形式 (CSV) にエクスポートできます。

  • その CSV を UE4 プロジェクトでナイアガラにインポートできます。

Select Skin
Light
Dark

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

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

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

フィードバックを送信