2 / 4 粒子ごとの初期配置の保存
このステップでは、粒子の初期位置を設定し、その値をCustom Attributeへ一度だけ保存します。
一度に発生する粒子群を用意する
Spawn、Initialize Particle、Update Particle、Output Particle QuadがつながったVFX Graphを用意してください。一定数の粒子を保ったまま配置を比較するため、この回では連続発生を使いません。
- SpawnのConstant Spawn Rateを外し、Single Burstを追加してください。
- Single BurstのCountへ
Countプロパティを接続し、Delayを0にしてください。 - InitializeのCapacityを32768に設定してください。
- 粒子の寿命を60秒、初期速度を
(0, 0, 0)に設定してください。 - シミュレーションのSpaceをLocalにし、Visual Effectを置くTransformのScaleを
(1, 1, 1)にしてください。
最初の比較用にBoundsのCenterを原点、Sizeを(12, 12, 12)にしてください。位置の分布と球殻状の変形を範囲内へ収めるための開始設定です。
Capacityは、同時に保持できる粒子数の上限です。CountをCapacityより大きくしても、要求した粒子をすべて保持できません。この例のCapacityは、後で30000個まで比較するための設定値です。
UpdateのAge ParticlesとReap Particlesは有効のままにします。60秒が経過すると粒子は寿命を迎えるため、比較を続ける場合にはSceneのPlayを終了し、再びPlayして発生し直します。Countを変える比較でも同じ操作を使います。
空間へ初期位置を分布させる
InitializeにSet Positionを追加し、次の設定を行ってください。
| 項目 | 設定 |
|---|---|
| Composition | Set |
| Source | Port |
| Random | Per Component |
| A | (-5, -3, -5) |
| B | (5, 3, 5) |
Per Componentは、X・Y・Zの各成分について範囲内の値を選びます。この設定によって、粒子は横10、縦6、奥行き10の箱形の範囲へ分布します。
Uniformを選ぶと、各成分に共通の乱数を使ってAとBの間を補間するため、位置は対角線上へ並びます。空間を満たす配置を作るためには、各成分を独立に選ぶ必要があります。
この箱は、発生位置を指定する数学的な範囲です。表示用の箱のメッシュを置く必要はありません。
保存用のAttributeを作る
BlackboardのAttributesを開き、追加メニューから三成分の浮動小数点数を持つCustom Attributeを作成してください。型はVector3/Float3に相当するものを選び、名前をhomeにします。
Get Attribute: positionを用意し、LocationをCurrentにしてください。続いて、Initializeへhomeを書き込むSet Attributeを追加し、CompositionをSet、SourceをPort、RandomをOffにしてください。
位置を決めるSet Positionより後に、homeへ書き込むBlockを置きます。その入力へGet Attribute: positionの出力を接続してください。
Currentは、現在処理している粒子のデータを読みます。Sourceは、発生元など別のデータの受け取りに使う指定なので、この位置のコピーには使いません。
一度だけ保存する理由を確認する
homeへ書き込むBlockは、Initializeにだけ置きます。Updateで毎回homeを現在位置へ書き換えると、元の配置が失われます。
後のUpdateがhomeを参照すると、VFX Graphは、その値をContext間で使う粒子データとして保持します。Attributeへの書き込みと保存の関係は、UnityのAttributesの説明でも確認できます。
Outputで粒子を小さく表示し、再初期化した直後に立体的な範囲へ分布しているか確認してください。この時点では、粒子が動く必要はありません。
- Single Burstの発生数をCapacity以下に設定しています。
- 位置を各成分でランダムに設定し、立体的な範囲へ分布させています。
- 位置の設定より後に
homeを保存しています。 -
homeをInitializeで一度だけ設定しています。