Skip to content

改訂前の参考解説

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

第02回 速度場とCurl Noiseによる流れ

1 / 4 位置に対応する速度場 ​

このステップの目的

このステップでは、速度場の考え方を理解し、一定方向の風で動く粒子を用意します。

空間に速度を対応付ける ​

速度場(Velocity Field)は、ある位置を指定すると、その場所での速度ベクトルが得られる仕組みです。速度ベクトルは、移動する方向と、単位時間当たりの移動量を表します。

例えば、すべての場所が(1, 0, 0)を返す速度場では、粒子はWorld空間のX軸の正方向へ同じ速さで流れます。場所によって返す向きが少しずつ変わると、粒子は曲がりながら移動します。

この授業では、空間全体の値を大きな配列へ保存する必要はありません。各粒子が現在いる位置を式へ入力し、その位置の値だけを求めます。

位置の指定と速度の指定を区別する ​

位置を直接指定すると、粒子は計算した場所へ配置されます。速度を指定すると、粒子は現在の場所から少しずつ移動します。

text
次の位置 = 現在位置 + 速度 × 今回の更新で経過した秒数

例えば、速度が(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で位置を直接設定する処理は、この回の構成には加えません。

場所初期設定
SpawnConstant Spawn Rateを1000個/秒に設定します。
InitializeCapacityを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にします。
UpdateUpdate 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の役割を区別できます。
  • 一定の風だけで粒子を動かす構成を確認できます。