Cluster,Inc. Advent Calendar 2018、8日目の記事です。
概要
VFX Graphでローレンツアトラクタを描画してみました。 ローレンツアトラクタは、下の画像のように、円が2個くっついたような挙動をする方程式です。
式を読む
ローレンツアトラクタは下記の式で表されます。(Wikipediaより引用)
これは、
、
それぞれにおける特定の位置(
)での速度を表す式で、
の速度なら
で計算できることがわかります。
、
、
は適当な値で、当初の論文では
、
、
を与えていたようです。
実装していく
p、r、bの実装
、
、
をそのまま実装します。
ここについては見たままなのでスルーで。
dx、dy、dzの実装
Get Attribute: position(Current)
ノードで現在の、
、
の値が取れるので、各数式をノードで実装していきます。
、
、
と比べると少し複雑ですが、よく見比べてみると数式をそのまま書き起こしただけということがわかると思います。
速度に代入する
AppendVector
ノードで、
、
からベクトルを作り、
Multiply
で速度を調整して、Updateノード内のSetVelocity
にそのまま代入します。
初期位置を調整する
原点からSpawnさせてもあまりいい動きをしてくれないため、InitializeにPosition(Sphere)
ブロックをくっつけて位置を調整します。
適当に飾り付け
あとは時間に応じて大きさを変えたり、パーティクルの数を増やしてみたり、ランダムな色に光らせてみたり、出力をLine Output
にしてみたり、飾り付けをすれば完成です!
全体のノードはこんな感じになりました。