ストレンジアトラクターのコントロール

微分方程式

はじめに

ストレンジアトラクターは非線形の微分方程式です。何度も紹介してきたトーマスのストレンジアトラクターは、以下の式をTouchDesignerのPOP、特にmath mix POPオペレータを使って解くことができました(2025.04.24のblog「微分方程式1」を参照ください)。

微分方程式が作るストレンジアトラクターをある程度自由にコントロールしたいと思っても、これは数式で決まった動きなのでそうはいきません。なんとかコントロールに繋げようと思い、2026.05.11「ストレンジアトラクターを使ったノイズ誘起遷移」と2026.05.12「ストレンジアトラクターを使った確率共鳴」を検討してきました。これらは、上の式のbの値にnoiseを加えたり、「noise+信号」を加えて作る現象でした。
今回は微分方程式を解くフィードバックのプログラム内に、magnet SOPを入れ、metaball SOPにより制御することを試みました。粒子を強制的に移動させる、移動させたところで方程式に従わせる手法です。結論を先に述べると、相当にストレンジアトラクターをコントロールできます。AIのCopilotはこれまでにない研究だと絶賛してくれました。カオスのコントロール等、関心がある方がおられましたら、是非発展させてください。ストレンジアトラクターとmetaballとの関係性は今後も検討したいと思っています。

場のイメージと地形:再び

本題に入る前に、インスピレーションを得る切っ掛けを先に示します。先々回のblog「場のイメージと地形」で、「粒子の動きである「現われ」には、その背後に場があり、それは地形として捉えることができる」、ことを述べました。このため地形を変えると「現われ」である粒子の動きも変わります。これを試してみようと思いました。山の形状はメッシュでできており、その下にmetaball SOPを置いて動かすと、形状を変えることができます。この方法はmagnet SOPを使って実現できます。次の図を見てください。

magnet SOPの第1インレットにgrid SOP, 第2インレットにmetaball SOPを繋いています。左側はmetaball SOPのパラメータであるWeightが1の時、右側が-1の時です。このようにgridを膨らませたり、へこませたりできます。このサイズはmetaballの大きさとWeightの値によってコントロールできます。gridの形状が見えているので、グリッドの形状を動かしたと感じるわけですが、これはグリッドを構成するポイントを動かしたことでもあります。この方法はこれまでも何度か使っています。例えば2026.02.13「視線の違いによる映像表現」、2025.11.4「痕跡3」等です。
これを山の地形の変形に適用して粒子の変化を見たのが次の映像です。

右から山の形が崩れていき、それに伴って粒子の流れが変化して行っています。gridのポイントが変化しているわけで、これは粒子を動かすことができるのと同じことです。そこでストレンジアトラクターを構成する粒子を動かせるのではないか、と思いました。ストレンジアトラクターの場合は、粒子そのものを計算によって動かしているので、背後の場が今回のようにgrid等で作っているわけではありません。ですので場を動かしてストレンジアトラクターである粒子の流れを変えるというのは比喩です。しかしイメージとしてはmetaballで背後にある場を動かし、ストレンジアトラクターの軌道を変えるというイメージは有りです。

ストレンジアトラクターのコントロール

それではまず映像を見てください。少し長めです。

最初はmetaballのweightは0としており、metaballの機能は使っておりません。パラメータbはb=0.22に設定しています。2領域が結合しはじめる臨界状態はb=0.197です。bの値にはこの0.22に対してnoiseを加えています。その振幅は0.02です。ですので0.197を下回ることなく、通常2領域に分かれています。noizeを加えているのは、常に僅かに軌道を変えるためです。noiseを無くすと、後述するようにストレンジアトラクターの状態を大きく変えた時、見ためでは非常に近しい軌道に落ち着いたように見える場合があります。常にnoiseにより僅かに揺らすことで、こうした安定状態に陥ることを防ぐことができるからです。

暫くすると、青白い球が中央に現れます。これはmetaballを現わしています。この時、半径=2.5, Weight =-3です。ですので、metaballが作用する領域に粒子が入ると、マイナス側(下側の領域)に粒子を強制的に動かします。つまり大きく位置が変わります。変わった状態から微分方程式に従って動きます。即ち、上の軌道を動いていた粒子はmetaballの領域には入ると、強制的に下側の領域に動かされ、その位置の軌道に従って動くようになります。これによって、上の領域の粒子は下の領域に移動されます。

次に中心の球は青くなります。この時metaballは半径=2.5, Weight=3で、Weightが反転しています。このため、metaballの作用する領域に入ると、上の領域に粒子は強制移動させられます。この作用によって、青い球の上側に粒子は集められました。その後Weight =0にして、metaballの効果を無効にします。すると、微分方程式にしたがって軌道を描くので、最初の上側の状態のような軌道で、上の領域にだけ粒子は分布するようになります。

次にまた、青白い球が現れます、半径=2.5, Weight =-3ですので、下の領域に粒子を移動させます。途中でWeight=0にして、mataballの効果を無効にすると、その状態から微分方程式だけに従った軌道に移ります。これにより2領域に粒子が在る状態が作れました。

即ち、中央のmetaballを0, -3, 0, 3とWeightをコントロールすることで、両側の状態、下側に状態、上側の状態と、そして両側の状態と、ストレンジアトラクターをコントロールすることができました。

それでは、プログラムの解説を致します。主要部分を次に示します。

黄色で書いた、POP to SOPからSOP to POPまでをフィードバック内に入れたことが特徴です。これはmagnet SOPをフィードバック内に入れるためです。そしてmagnet SOPが必要なのは、metaball SOPを粒子に作用させるためです。Weightのパラメータ値0, -3, 3を切り替えて映像を作製しました。他の部分は微分方程式のPOPによる基本手な解き方です(「微分方程式1」が参考になります)。映像は4倍速で記録しています。フィードバック内にmagnet SOPを入れると、相当に計算速度が遅くなったからです。

まとめ

非線形の微分方程式を解くフィードバック内にmagnet SOPを入れて、metaballを作用させました。metaballのWeightパラメータをコントロールすることで、ストレンジアトラクターの状態をコントロールすることができることが分かりました。状態A、状態B、AからBへの遷移、BからAへの遷移を作ることができました。比喩的には微分方程式の背後にある場をmetaballによって変えることです。直接的には粒子を強制的に移動させ、移動先の場所で微分方程式に従わせる手法です。個人的には人工ニューロン等への展開があるのではないかと思っています。

コメント