1 / 4 位置に対応する速度場
このステップでは、速度場の考え方を理解し、一定方向の風で動く粒子を用意します。
空間に速度を対応付ける
速度場(Velocity Field)は、ある位置を指定すると、その場所での速度ベクトルが得られる仕組みです。速度ベクトルは、移動する方向と、単位時間当たりの移動量を表します。
例えば、すべての場所が(1, 0, 0)を返す速度場では、粒子はWorld空間のX軸の正方向へ同じ速さで流れます。場所によって返す向きが少しずつ変わると、粒子は曲がりながら移動します。
この授業では、空間全体の値を大きな配列へ保存する必要はありません。各粒子が現在いる位置を式へ入力し、その位置の値だけを求めます。
位置の指定と速度の指定を区別する
位置を直接指定すると、粒子は計算した場所へ配置されます。速度を指定すると、粒子は現在の場所から少しずつ移動します。
次の位置 = 現在位置 + 速度 × 今回の更新で経過した秒数例えば、速度が(2, 0, 0)で、更新間隔が0.02秒なら、X方向の移動量は0.04です。速度を毎回そのまま位置へ加えると、同じ1秒間でも更新回数によって移動距離が変わってしまいます。
VFX GraphのUpdate Particleは、Update Positionを有効にすると、この経過時間を使った位置更新を行います。この回では、速度だけを書き込み、位置の積分をUpdateに任せます。
独立した粒子システムを用意する
Spawn、Initialize Particle、Update Particle、Output Particle Quadを持つVFX Graphを用意してください。第01回のhomeの保存や、Updateで位置を直接設定する処理は、この回の構成には加えません。
| 場所 | 初期設定 |
|---|---|
| Spawn | Constant Spawn Rateを1000個/秒に設定します。 |
| Initialize | Capacityを16384、Lifetimeを8秒、Sizeを0.04程度に設定します。 |
| Initializeの位置 | Set PositionのRandomをPer Componentにし、Aを(-4, -2, -2)、Bを(-3, 2, 2)にします。 |
| シミュレーション空間 | SpaceをWorldに設定します。Visual Effectを置くTransformは、最初は位置と回転を0、Scaleを1にします。 |
| Update | Update Position、Age Particles、Reap Particlesを有効にします。 |
最初の比較用にBoundsのCenterを原点、Sizeを(40, 40, 40)程度にしてください。移動範囲を確認した後の調整方法は、最後のステップで扱います。
毎秒1000個を発生させ、各粒子が8秒生きる場合、十分に時間がたつと生存数はおおむね8000個になります。Capacityには、その数を保持できる余裕を持たせます。
一定の風を設定する
BlackboardにVector3のPropertyとしてWindを作成し、値を(1, 0, 0)にしてください。続いて、UpdateにSet Velocityを置き、CompositionをSet、RandomをOffにして、Windを接続してください。
この値は、World空間の速度として扱います。まずすべての粒子が同じ方向へ流れることを確認してください。WindのX成分を2へ変えると、粒子がX方向へ進む速さは2倍になります。比較後はXを1へ戻し、次の渦の比較ではWindを固定します。
この構成では、Set Velocityへ渡す値にDelta Timeを掛けません。Update Positionが移動量を求める際に経過時間を使うため、ここでも掛けると二重に適用されてしまいます。
- 速度場を位置と速度の対応として説明できます。
- 位置と速度が異なる量であることを説明できます。
- Set VelocityとUpdate Positionの役割を区別できます。
- 一定の風だけで粒子を動かす構成を確認できます。