GPU スプライト エフェクト

GPU を使用して数百万にもおよぶスプライト パーティクルをスポーンする方法を説明します。

前提トピック

このページは以下のトピックへの知識があることを前提にしています。まず以下のトピックの内容についてご確認をお願いします。

エフェクトによっては、数万にもおよぶパーティクルのスポーンが必要になるものがあります。しかし、多数のパーティクルを標準的な CPU で生成すると、パフォーマンスに問題が生じることがあります。このガイドでは、CPU の代わりに GPU を使用するスプライト パーティクル エフェクトを作成し、シミュレーションを実行する方法を説明します。

システムとエミッタを作成する

Niagara のエミッタとシステムは独立して機能します。現時点では、既存のエミッタまたはエミッタ テンプレートからシステムを作成するワークフローが推奨されています。

  1. まず、コンテンツ ブラウザ内で右クリックし、表示されるメニューから [FX] > [Niagara System] を選択して Niagara System を作成します。Niagara System ウィザードが起動します。[Niagara System] ウィザードが開きます。

    画像をクリックするとフルサイズで表示されます。

  2. [New system from selected emitters (選択したエミッタに基づく新規システム)] を選択します。[Next (次へ)] をクリックします。

    画像をクリックするとフルサイズで表示されます。

  3. [Templates (テンプレート)][Simple Sprite Burst (シンプル スプライト バースト)] を選択します。

    画像をクリックするとフルサイズで表示されます。

  4. プラス記号 (+) のアイコンをクリックして、システムに追加するエミッタのリストに目的のエミッタを追加します。次に [Finish (完了)] をクリックします。

    画像をクリックするとフルサイズで表示されます。

  5. 新しいシステムに「GPUSprite」と名前を付けます。これをダブルクリックして Niagara エディタで開きます。

    画像をクリックするとフルサイズで表示されます。

  6. 新しいシステム内のエミッタ インスタンスには、デフォルトで「SimpleSpriteBurst」という名前が付けられていますが、この名前は変更することができます。[System Overview (システム概要)] でエミッタ インスタンスの名前をクリックすると、このフィールドが編集可能になります。エミッタの名前を「FX_GPUSprite」に変更します。

    画像をクリックするとフルサイズで表示されます。

  7. GPUSprite システムをレベルにドラッグします。

パーティクル エフェクトを作成する時は、システムをレベル内にドラッグアンドドロップすることを推奨します。こうすることで、すべての変更をコンテキスト内で確認して編集することができます。システムに加えた変更内容は、レベルにあるシステムのインスタンスにも自動的に反映されます。

エミッタの設定 - エミッタのプロパティ

最初に、[Emitter Properties (エミッタのプロパティ)] でいくつかの設定を変更する必要があります。ここで CPU シミュレーションを GPU シミュレーションに切り替えることができます。

  1. [System Overview] にある [Emitter Settings (エミッタの設定)] をクリックして、[Selection (選択)] パネルで開きます。

    画像をクリックするとフルサイズで表示されます。

  2. [Emitter Properties] を展開します。[Sim Target] フィールドを確認します。ここで Unreal Engine に GPU を使ってシミュレーションするように伝えます。ドロップダウンをクリックして [GPUComputeSim] を選択します。

    画像をクリックするとフルサイズで表示されます。

  3. [Fixed Bounds (固定した境界)] が設定されていないという警告が表示される場合があります。その場合は [Fixed Bounds] のチェックボックスをクリックしてオンにします。これでエラーが解決します。[Minimum (最小値)][Maximum (最大値)] をデフォルト値のままにします。

    パーティクルのシミュレーションは GPU で実行されるため、システムはエフェクトの大きさを読み込むことができません。そのために、固定した境界の設定が必要となります。この手順で示した方法でエミッタの境界を設定するか、または [System Properties] の項目でシステム全体に対する境界の固定を設定することができます。

Emitter Update グループの設定

次に、Emitter Update グループのモジュールを編集します。挙動には、エミッタに適用されるものと各フレームを更新するものがあります。

  1. [System Overview][Emitter Update] をクリックして [Selection (選択)] パネルで開きます。

    画像をクリックするとフルサイズで表示されます。

  2. Emitter State モジュールを展開します。モジュールはこのエミッタの時間とスケーラビリティを制御します。既に「Simple Sprite Burst」テンプレートを使用したので、Life Cycle Mode[Self] に設定されています。通常、これは特定のエミッタに対してエミッタ ライフ サイクル ロジックを完全にカスタマイズするために使用しますが、このエフェクトに対しては必要ありません。ドロップダウンをクリックして Life Cycle Mode[System] に設定します。こうすることでシステムによってライフ サイクルの設定が計算されるようになり、通常はパフォーマンスが最適化されます。デフォルトで、システムは 5 秒間隔で無限にループします。

    画像をクリックするとフルサイズで表示されます。

  3. Spawn Burst Instantaneous モジュールは、エミッタがスポーンする時にパーティクルの大きなバーストを作成します。このモジュールは、「Simple Sprite Burst」テンプレートに含まれています。[Spawn Count (スポーン数)] は「2500」に設定します。[Spawn Time (スポーン時間)] を「0」に設定しているため、バーストは起動直後に発生します。

    画像をクリックするとフルサイズで表示されます。

  4. このエフェクトの場合、エミッタのスポーン時にパーティクルがバーストするだけでは不十分です。Spawn Rate モジュールは、エミッタが有効な間、パーティクルのストリームを継続して作成します。Emitter Updateプラス記号 (+) のアイコンをクリックして [Spawning (スポーン)] > [Spawn Rate] を選択し、Spawn Rate モジュールを追加します。

    画像をクリックするとフルサイズで表示されます。

  5. [Spawn Rate] を「500」に設定します。これによりパーティクルが毎秒 500 のレートでスポーンされ、最初のバースト後にパーティクルのストリームが継続して発生します。

    画像をクリックするとフルサイズで表示されます。

Particle Spawn グループの設定

次に、Particle Spawn グループのモジュールを編集します。これらはパーティクルが初めてスポーンされるときに適用される動作です。

  1. [System Overview] にある [Particle Spawn] をクリックして [Selection (選択)] パネルで開きます。

    画像をクリックするとフルサイズで表示されます。

  2. Initialize Particle モジュールを展開します。このモジュールでは、関連するいくつかのパラメータを 1 つのモジュールにまとめてスタック内を整理します。Point AttributesLifetime パラメータを確認します。

  3. Lifetime パラメータでは、パーティクルが消滅するまでの表示期間を指定します。このエフェクトには、パーティクルをエフェクトの効果時間中ずっと表示させるための定数値が必要です。そこで、[Lifetime] を「5」に設定します。

    画像をクリックするとフルサイズで表示されます。

  4. このガイドではスプライト サイズをランダム化する箇所もありますが、ここではスプライトの基本サイズを設定します。[Sprite Attributes (スプライト属性)] にある Sprite Size パラメータが有効になっていることを確認します。Sprite Size を次のように設定します。

    画像をクリックするとフルサイズで表示されます。

    サイズ ベクター

    X

    5

    Y

    5

  5. [Sphere Location (球体の場所)] では、スプライトがスポーンする場所の形状を制御します。[Particle Spawn] セクションで プラス記号 (+) のアイコンをクリックして [Location (場所)] > [Sphere Location] を選択し、[Sphere Location] モジュールを追加します。

    画像をクリックするとフルサイズで表示されます。

  6. Sphere Location モジュールを追加するとスプライトは球体の形状でスポーンし、半径を指定することにより球体のサイズを設定することもできます。ドロップダウン メニュー [Shape Primitive] > [Sphere][Sphere] を選択します。

    画像をクリックするとフルサイズで表示されます。

Particle Update グループの設定

次に Particle Update グループのモジュールを編集します。これらの挙動はエミッタのパーティクルに適用され、それぞれのフレームを更新します。

  1. [System Overview] にある Particle Update グループをクリックすると、[Selection] パネルで開かれます。

    画像をクリックするとフルサイズで表示されます。

  2. Particle Spawn グループの Initialize Particle モジュールでは、スプライトの基本サイズを選択しました。Scale Sprite Size モジュールを追加することにより、スプライトのサイズをランダム化できます。これにより、基本サイズにスケーリング係数が適用されます。プラス記号 (+) のアイコンをクリックして [Size (サイズ)] > [Scale Sprite Size] を選択し、Scale Sprite Size モジュールを追加します。

    画像をクリックするとフルサイズで表示されます。

  3. ドロップダウン メニュー [Scale Sprite] > [Non-Uniform] から [Non-Uniform] を選択します。

    画像をクリックするとフルサイズで表示されます。

  4. Scale Sprite Size のデフォルト値を X:1Y:1.これらのデフォルト値を変更すると、すべてのパーティクルが一様に大きくなったり小さくなったりします。しかし、サイズのバリエーションがランダムな方が、スタティックなものと比べてエフェクトがビジュアル的に面白くなります。[Scale Factor (スケーリング係数)] フィールドの横にある下向き矢印をクリックして、[Dynamic Inputs (動的入力)] > [Vector2D from Float] を選択します。

    画像をクリックするとフルサイズで表示されます。

  5. Scale Factor の値がスタティックな値に変更されていることに注意してください。パーティクルの外観をどのようにしたいかによって、浮動小数点値を追加する方法が異なります。流れるような緩やかなサイズ変更の場合、カーブが理想です。[Value (値)] の横にある下向き矢印をクリックして [Dynamic Inputs] > [Float From Curve] を選択します。

    画像をクリックするとフルサイズで表示されます。

  6. Scale Sprite Size モジュールを開きます。Ramp Up Down カーブ テンプレートをクリックして形状をカーブに適用します。

    画像をクリックするとフルサイズで表示されます。

  7. カーブに一致するテンプレート上でクリックします。

    画像をクリックするとフルサイズで表示されます。

  8. 現在の設定で作成されたボールには、特にこれといった特徴はありません。このパーティクルにいくつかの要素を追加してバリエーションや動きを増やすことができます。Particle Update の プラス 記号アイコン (+) をクリックして [Forces (フォース)] > [Curl Noise Force] を選択します。

    画像をクリックするとフルサイズで表示されます。

  9. Curl Noise Force を使うと様々なことが行えます。Noise Strength は、ノイズのフィールド全体の大きさ (つまり、パーティクルの元の球体を妨害するノイズの量) を制御します。Noise Frequency は、カール ノイズがパーティクルに適用される頻度を制御します。数が小さいと、パーティクルの球体の場所がより歪みます。ここでは以下の設定を使用しますが、後でこれを変更して別の外観を試すことができます。 

    画像をクリックするとフルサイズで表示されます。

    パラメータ

    Noise Strength

    72

    Noise Frequency

    .02

  10. こうすると、最初は渦を巻いていたパーティクルが、消滅するまで継続的に外側に動いていくことがわかります。このエフェクトでは、パーティクルは外側に移動してから最初の位置に戻ることにより、渦巻きが形成されます。Point Attraction Force (点の引力) モジュールは、パーティクルを単一の位置に移動させます (デフォルトでは、この位置はエミッタの位置です)。Particle Updateプラス 記号アイコン (+) をクリックして [Forces (フォース)] > [Point Attraction Force] を選択します。

    画像をクリックするとフルサイズで表示されます。

  11. Attraction Strength は、パーティクルをアトラクタの位置まで引く力の量です。Attraction Radius は点引力がパーティクルに適用されるフィールドのサイズを表します。Falloff Exponent は、球体の広がりを制御します。数値が小さいと、球体のパーティクルがより広がります。Kill Radius は、存続期間の終わりにパーティクルが消滅する領域のサイズを設定します。[Attraction Strength][Attraction Radius][Falloff Exponent]、および [Kill Radius] をそれぞれ次の値に設定します。

    モジュールの下にある三角形のアイコンをクリックして Kill Radius パラメータを表示します。チェックボックスにチェックが入っていない場合はクリックして有効化します。

    画像をクリックするとフルサイズで表示されます。

    パラメータ

    Attraction Strength

    5.5

    Attraction Radius

    300.0

    Falloff Exponent

    0.6

    Kill Radius

    4.0

  12. 次に、色を変更します。Particle Update の プラス 記号アイコン (+) をクリックして [Colors] > [Color] を選択して Color モジュールを追加します。

    画像をクリックするとフルサイズで表示されます。

  13. Color の横にある下向き矢印をクリックして [General] > [Dynamic Inputs] > [Color from Curve] を選択します。

    画像をクリックするとフルサイズで表示されます。

  14. カラーバーの上のスペースをクリックすると、カーブにカラー経由点を追加することができます。経由点をダブルクリックしてカラーピッカーを開き、カラーを変更することもできます。

    画像をクリックするとフルサイズで表示されます。

  15. オパシティ分岐点を設定するには、カラーバーの下にあるスペースをクリックします。

    画像をクリックするとフルサイズで表示されます。

  16. 時間を設定するにはバーの下にあるスペースをクリックします。

    画像をクリックするとフルサイズで表示されます。

  17. カラーとオパシティを次のように設定します。

    画像をクリックするとフルサイズで表示されます。

    カラー経由点またはオパシティ分岐点

    時間

    カラー

    経由点 1

    0.0

    R:1, G:0, B:1

    経由点 2

    .35

    R: .08, G:0, B:1

    経由点 3

    ..60

    R: .2 , G:1, B: .8

    経由点 4

    .8

    R:1, G: .96, B: .3

    オパシティ

    分岐点 1

    0

    1

    分岐点 2

    .7

    1

    分岐点 3

    1

    0

最終結果

お疲れさまでした。CPU の代わりに GPU を使用する素晴らしいスプライト エフェクトが作成できました。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル