Skip to content

改訂前の参考解説

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

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

2 / 4 現在位置からのCurl Noiseの取得 ​

このステップの目的

このステップでは、現在位置をCurl Noiseへ入力し、場所に応じた速度の変化を作ります。

乱数と空間のNoiseを分けて考える ​

各粒子が毎回独立にランダムな方向を選ぶと、近くにいる粒子でも無関係な動きになりやすくなります。空間の座標から連続的な値を得るNoiseでは、近い場所で関連する値を使えます。

Curl Noiseは、そのような座標に応じた値から、渦状の流れを作るベクトルを求めます。この回では、そのベクトルを速度の一部として使います。

Curl Noiseを使うだけで、空気の圧力や物体への衝突を計算する流体シミュレーションが完成するわけではありません。ここでは、流れの見え方を設計するための速度場として扱います。

同じ空間の現在位置を入力する ​

Get Attribute: positionを用意し、LocationをCurrentにしてください。この回のシミュレーションはWorld空間なので、この位置をWorld空間の流れを読む座標として使います。

OperatorのNoiseからCurl Noiseを追加してください。種類をValue、Dimensionsを3Dに設定し、Get Attribute: positionをCoordinateへ接続します。追加メニューに複数の候補が出る場合には、Value Curl Noiseの3Dを選びます。

項目初期設定と意味
Coordinate現在の粒子の位置を渡します。
Frequency0.25から始めます。空間に対する模様の細かさを変えます。
Octaves1にします。最初は一つの細かさだけで変化を確認します。
Amplitude1にします。出力全体の倍率は、後段の操作値で調整します。

3DのCurl Noiseは、X・Y・Zの三成分を持つベクトルを出力します。この出力には方向と大きさが含まれており、すべての場所で長さが1になるわけではありません。

渦の強さを掛けて風へ加える ​

FloatのPropertyとしてFlowStrengthを作成し、初期値を0.4にしてください。Curl Noiseの出力へFlowStrengthをMultiplyで掛け、その結果とWindをAddで足してください。

最後に、Addの出力をUpdateのSet Velocityへ接続してください。

風と局所的な渦を合成する
Get position
現在位置をCoordinateへ渡す
Curl Noise
Curl Noise
FlowStrengthで強さを調整する
Multiply
FlowStrength
倍率を渡す
Multiply
Multiply
渦の速度を渡す
Add
Wind
一定方向の速度を渡す
Add
Add
合成した速度を書き込む
Set Velocity

この式を文章で表すと、「今回の速度は、一定の風に、その場所の渦の速度を加えたもの」となります。

FlowStrengthを0にすると、渦の成分は0になります。この状態で前のステップと同じ一方向の動きに戻ることを確認してください。

位置を更新して同じ場を読み直す ​

粒子が移動すると、次の更新では別の位置をCurl Noiseへ入力します。入力位置が変わるため、返される速度も変わります。この繰り返しが、曲がりながら進む軌道を作ります。

particleIdや粒子ごとの乱数を座標にしてしまうと、同じ場所にいる粒子が同じ場を読む関係が失われます。この回では、現在位置を入力することが重要です。

また、Set VelocityのCompositionはSetのままにしてください。Addで同じ値を毎回速度へ足すと、ここで意図した「その場所の速度を設定する」処理とは異なる動きになります。

チェックリスト
  • Curl NoiseのCoordinateへ現在位置を接続しています。
  • 3Dの出力が速度に使える三成分のベクトルであることを説明できます。
  • FlowStrengthを0へ戻して、一定の風だけの動きを確認できます。
  • 移動先で同じ速度場を読み直す仕組みを説明できます。