Skip to content

改訂前の参考解説

このページは改訂前の教材です。現在の授業の回番号・内容は、後期の授業計画で確認してください。

第01回 GPU粒子の配置と群れの変形

1 / 4 共通のPropertyと粒子ごとのAttribute ​

このステップの目的

このステップでは、VFX Graphの基本構成を確認し、PropertyとAttributeの役割を区別します。

四つのContextを確認する ​

VFX Graphは、Contextを通して粒子の発生、初期設定、更新、描画を組み立てます。前期の第12回を受講していない場合にも、まず次の四つの役割を確認してください。

Contextこの回で担当する処理
Spawnは、発生数と発生のタイミングを決めます。再生開始時に粒子をまとめて発生させます。
Initialize Particleは、新しい粒子へ初期値を設定します。最初の位置、保存用の位置、寿命、大きさを設定します。
Update Particleは、生きている粒子を更新します。保存した位置と共通の操作値から現在の位置を求めます。
Output Particle Quadは、粒子を板状の画像として描画します。粒子群の形を画面へ表示します。

Context内のBlockは、粒子の位置や色などを書き換えます。Contextの外に置くOperatorは、計算した値を接続先へ渡します。ここでは、「値を計算する部分」と「粒子へ値を書き込む部分」を区別して把握してください。

一つの値を群れ全体で共有する ​

Propertyは、VFX Graphに与える共通の入力です。Exposedを有効にしたPropertyは、Visual EffectコンポーネントのInspectorなどから変更できます。

この回では、次の値をPropertyとして用意します。

名前型と初期値値の役割
CountFloat、10000一度に発生させる粒子数を指定します。整数の値を入力します。
SpreadFloat、1保存した配置の広がりを指定します。
RadiusFloat、4変形先の球殻の半径を指定します。
BlendFloat、0元の配置から球殻状の配置へ移る割合を指定します。

BlackboardのPropertiesから各項目を作成し、Exposedを有効にしてください。Spreadは0.25〜1、Blendは0〜1を操作範囲とします。

CountはSpawnで使います。すでに発生した粒子数は、Countの値を変更するだけでは変わりません。粒子数を変更した比較では、エフェクトを再初期化し、粒子を発生させ直します。

粒子ごとに異なる値を保存する ​

Attributeは、粒子ごとに持つデータです。例えば、positionは現在の位置、ageは発生からの経過時間、lifetimeは寿命を表します。

この回では、最初の位置を保存するCustom Attributeとしてhomeを追加します。homeは標準で用意された特別な機能名ではなく、この教材で付けた名前です。

データ粒子Aの例粒子Bの例
共通のSpread1を参照します。1を参照します。
個別のhome(2, 0, 0)を保存します。(0, 1, 0)を保存します。
home * Spread位置は(2, 0, 0)になります。位置は(0, 1, 0)になります。

Spreadを0.5へ変えると、Aは(1, 0, 0)へ、Bは(0, 0.5, 0)へ移動します。同じ式でも、各粒子が持つ入力が異なるため、結果の位置も異なります。

GPUへ任せる処理を理解する ​

VFX Graphは、GPU上で粒子ごとの更新を並列に実行できます。一個ずつ粒子を選んで位置を書き換える必要はありません。

ただし、粒子数を増やすと、粒子のデータを保持するメモリや、更新・描画の処理量も増えます。また、GPU粒子は、そのまま個別のColliderを持つGameObjectになるわけではありません。大量の見た目を作る用途と、個別のゲームオブジェクトを制御する用途を分けて考えます。

チェックリスト
  • Spawn・Initialize・Update・Outputの役割を説明できます。
  • Propertyが共通の入力で、Attributeが粒子ごとのデータであることを説明できます。
  • CountとSpreadを変更した際に、再初期化が必要か判断できます。
  • 粒子群の位置計算をGPUへ任せる構成を説明できます。