
GPUSprite は GPU パーティクルのシミュレーションをサポートします。従来の CPU システムは数十万のパーティクルがフレームで処理されました。GPU シミュレーションは数十万のパーティクルのシミュレーションおよびレンダリングを効率よく処理します。
GPU パーティクルは従来の CPU パーティクルで利用できた全ての機能に対応しているわけではありませんが、GPU パーティクルならではの機能を備え、さらに効率を高めています。スポーンする場所、時間、数を決定するために、パーティクルの放出はまだ CPU 上で行われます。CPU は従来の CPU パーティクルで利用できるメソッドで使用するサイズとベロシティなどの初期属性の割り当ても行います。
GPU パーティクル スプライトは GPU スプライト タイプデータモジュールをエミッターに追加してカスケードに作成します。カスケードに作成されるその他のエフェクトと同様に、シミュレーションのパラメータはモジュールをエミッターに追加および編集して修正します。シミュレーションはプロパティの変更と同様、リアルタイムで更新されます。
プロパティ
プロパティ | 説明 |
---|---|
Beam | |
Camera Motion Blur Amount | カメラのモーション ブラーを元にストレッチされるスプライト |
サポートされている属性
次の属性は GPU パーティクルでサポートされています。
$ 初期位置 : スポーン時に決定されます。 CPU パーティクルで利用できるほとんどのメソッドをサポートしています。 $ 初期速度: スポーン時に決定されます。 スポーン ソースの動作から速度を継承する場合もあります。 $ 加速度 : 全てのパーティクルおよびエミッターのライフタイムを通じて一貫しています。 $ ドラッグ : 初期ドラッグ係数はスポーン時に決定され、パーティクル毎に異なる場合があります。 カーブでパーティクルのライフ期間をスケールすることが可能です。カーブは全てのパーティクルで共有されます。 $ ライフタイム : スポーン時に決定され、パーティクル毎に異なる場合があります。 $ カラー : 初期カラーはスポーン時に決定されます。パーティクル全てがこの色になります。 カーブでライフ期間をスケールすることができます。カーブは全てのパーティクルで共有されます。 $ サイズ : 初期サイズはスポーン時に決定され、パーティクル毎に異なる場合があります。 カーブでライフ期間をスケールすることができます。カーブは全てのパーティクルで共有されます。 $ 回転 : 初期回転はスポーン時に決定され、パーティクル毎に異なる場合があります。 $ RotationRate : 回転率はスポーン時に決定され、パーティクル毎に異なる場合があります。 $ SubImageIndex : サブイメージ インデックスは、カーブで定義されたパーティクルのライフタイムに渡り変化します。 カーブは全てのパーティクルで共有されます。
最も重要な概念
GPU パーティクルをシーンで使用するにあたり、以下のキーとなる概念を理解しておくことが重要です。
モーション
パーティクル モーションはシンプルな Newtonian ダイナミクスに管理されます。ステップの都度、パーティクルの位置と速度は、現在位置、現在の速度、一定の加速度、ドラッグによる力に基づいて前方に統合されます。
GPU パーティクルは、従来の CPU パーティクルに対して提供されていたものと詳細は異なりますが、軌道もサポートします。概念的にいうと、変化する量に合わせてオフセットされたパーティクルの実際の位置の周りをスプライトが周回しているかのようにパーティクルは移動します。軌道は追加の詳細なモーションをパーティクルに追加するために使用されます。
ベクター フィールド
効率性はさておき、GPU パーティクルの最も興味深い機能はベクター フィールドです。ベクター フィールドはベクトルの統一グリッドで、パーティクルの動作に影響を及ぼします。ベクターフィールドはアクタ (グローバル ベクター フィールド) としてワールドに配置され、その他のアクタ同様に移動、回転、そしてスケーリングされます。ベクター フィールドは、動的でいつでも移動させることができます。フィールドはカスケード (ローカル ベクター フィールド) 内に配置することも可能で、関連するエミッタに及ぼす影響を制限します。パーティクルがベクター フィールド範囲に突入すると、パーティクルの動作はフィールドに影響され、パーティクルがフィールド範囲を離れるにつれて影響度が薄れます。
ベクター フィールドは、デフォルト設定でフィールド内のパーティクルへ影響力を与えます。ベクター フィールドには、正確さを制御するパラメータもあります。このパラメータは、パーティクルがフィールドのベクターを追跡する正確さを制御します。Tightness を 1 に設定すると、パーティクルはベクターのベロシティを直接フィールドから読み出し、フィールドを正確に追跡します。
スタティック ベクター フィールドは、ベクターのグリッドが絶対に変化しません。フィールドは Maya からエクスポートして、ボリューム テクスチャとしてインポートします。スタティック フィールドは負荷がほとんどかからず、特にフィールド自体の動作をアニメートすることによって興味深い動作をパーティクルに追加します。
加えて、ベクター フィールドは 2D 画像から再構成することもできます。この場合、法線マップによく似た画像をボリューム付近で押し出しまたは回転させることによって、ボリューム テクスチャを再構成するためにインポートおよび使用されます。この再構成に加えて、スタティック ベクター フィールドがノイズやランダムな動きを発生させるために追加されます。2D 画像は、テクスチャアトラスで個別のフレームを格納することによってアニメートされます。これによって液体シミュレーションオフラインを実行し、わずかなコストで動作をリアルタイムで再構成することができます。
パフォーマンス
GPU パーティクルの CPU コストのほとんどが、パーティクルのスポーンによるものです。パーティクルは従来の CPU パーティクルと同じメソッドで CPU 上にスポーンされるので、パフォーマンスの特性は似ています。
パーティクルの GPU コストは主にパーティクルの数によって決まります。すでに存在する固定費にさらに GPU パーティクルに対する追加コストが必要となる機能はほとんどありません。GPU コストのほとんどはソーティングとレンダリングです。ソートはオプションで、特定のエミッターが必要な時のみ有効化します。レンダリングのほとんどはフィルレートです。パーティクルのサイズ、パーティクルのマテリアルに対するインストラクション数、そしてパーティクルの合計数の削減はすべて役立ちます。パーティクルが非常に小さいと、レンダリングのほとんどが頂点コストになってしまう場合があります。その場合は、コストを削減する唯一の方法はパーティクル数を削減することです。
シミュレーション コストは、エミッタと重複するベクター フィールドの数でスケールを行うので、重複しているベクトルフィールド数の削減はシミュレーション コスト削減に役立ちます。
モバイル デバイスの GPU スプライト

GPU パーティクルとベクター フィールドがモバイル デバイスで使用できるようになりました。ただし、この機能は、MRT 対応で 32 ビット浮動小数点レンダー ターゲットをサポートするモバイル デバイスが必要なので、使用は以下のモバイル デバイスに限られます。
製品名 | デバイス クラス | デバイス名 |
---|---|---|
Apple | A8+ | iPhone 6、iPad Air 2、iPad Mini 4 以上。 |
Android | Adreno 4xx および Mali-T7xx GPUs | Galaxy Note 4、Note 5、S6、S7、Nexus 6P など。 |
この機能を使うためにパーティクルを有効にするには、パーティクルに以下のタイプ データがアタッチされていることを確認してください。

- GPU Sprites タイプ データ
- Global Vector Fields タイプ データ
また、パーティクル システムに 1 つ追加するか、レベル内に 1 つ配置するかの方法で、パーティクル システムに Vector Field が付いていることも確認してください。
モバイル デバイスでの GPU スプライトの制約
GPU スプライトをモバイル デバイス上で使用する場合、以下の制約を覚えておいてください。
-
ベクター フィールド インタラクション: PC でのベクター フィールドと同じように、モバイル GPU スプライトは 4 つまで同時に影響を与えることができます。4 つとは、1 つのローカルベクターフィールドと、ワールドに配置された最高 3 つまでのベクター フィールドです。
-
GPU パーティクル コリジョン: モバイル GPU スプライトは、モバイル デバイス上でサポートされていないシーンやメッシュ ディスタンス フィールドとの衝突オプションに対応 していません。