粒子を使った伝搬モデル3:粒子を曲げる

伝搬

はじめに

最近のblog「粒子を使った伝搬モデル1, 2」では、粒子を放出し、それを受け、その数が一定数を超えると、新しいparticle POPから放出する、を繰り返す方法でした。数を増やしていくと複雑になるので、より簡単な方法はないかと考えておりました。今回は放出した粒子にforceを与え、曲げ且つ伝搬させる手法を扱います。過去粒子を曲げる課題も取り組んだことがあります。2025.12.17のblog「パーティクルとポテンシャルによる移動経路設定の基礎検討」です。この時もmetaball SOPを使っています。particle SOPの第4インレットSurface Attractorsに入力して使いました。しかしforce SOPとの組み合わせは思いついていませんでした。metaball SOPとforce SOPの組み合わせは、人工生命と呼んでいるオブジェクトの動きを作る方法で使ってきました(例えば、2025.08.22「ポストモダンと「擾乱を伴う反復系」1」)。この時はparticle SOPではなく、spring SOPを使い、入力は第3インレットのforceを使います。今回はspring SOPの代わりに、particle SOPを使い第3インレットのforceに入力して粒子を曲げます。私の場合、同じような現象を少し変えて別の用途に使うとことになかなか気づかない場合があります。残念ながら”一を聞いて十を知る”タイプではないのです。本来もっと早く気づいてしかるべき内容ですが、今回粒子を曲げる手だてを得たのは嬉しいことです。

metaball SOPとforce SOPを使って粒子を曲げる例1

最初に粒子を曲げた例を見ていただきましょう。

放出した粒子が曲がって伝搬していることがわかります。曲げるためのmetaball SOPも表示した場合が次です。

球はmetaball SOPの大きさを表しています。metaballのサイズとforceの大きさによって粒子を引き付け、forceの向きの設定によって粒子の方向が変わります。一番最初の少し小さい球は、particleをx軸方向に放出するためのモノです。他は粒子を曲げるためのモノです。粒子を曲げるforceはベクトルです。例えば、原点付近から粒子はx軸に飛び出しています、2つ目の球はz軸方向にforceを与えていますが、少し斜めに進んでいます。このようにベクトルとして方向が決まります。「粒子を使った伝搬モデル1, 2」では、到達した場所で新たにparticleを発生させるので、その方向は独立して決めることができました。今回は飛んできた粒子を曲げるため、前の粒子の流れの影響を受けます。この点注意が必要です。向きを変えたり、粒子を飛ばす力は、metaballのサイズとWeight、forceの値と方向の設定で決まります。これらを調整しながら所望の動きを作っていきます。

metaball SOPとforce SOPを使って粒子を曲げる例2

次は円環になる場合の例です。徐々に円環を構成していきます。それでは見てください。

原理は最初の例と全く同じです。急な角度で曲げるために、metaball SOPとforce SOPを2個づつ配置しました。次がその様子です。

プログラムは次です。

particle SOPの第1インレットがParticle Sourceで粒子が飛び出す位置です。これにbox SOPを使っています。particle SOP自体にforceタブがあり、そこでforceを与えることができますが、今回はそれを使わず、全てmetaball SOP -> transform SOP -> force SOPで与えています。transform SOPでmetaballのサイズと位置を設定しています。本質はmetaball SOP -> force SOPにあります。全てをmergeしてparticle SOPの第3インレットのForceに与えています。粒子はbox SOPで作り、これに与えるforceをmetaball SOP -> force SOPの2つで作っています。delete SOPを用意しているのは、外部からパラメータを与えてforceの効果を消すための機能です。映像では最初全てのdelete SOPをオンにして効果を消しています。このため粒子は真直ぐ放出されています。角にある2つづつのforceを有効にしていくことで、粒子を曲げ円環になるようにしました。particle SOPの後は、粒子を分かりやすくするために、大きさと色を変えて2D化する機能です。粒子に働くforceはベクトルなので、forceの値とDirectionを調整する必要があります。例えばx方向からy方向へ直角に曲げる場合、y方向にforceを与えるだけでは斜めになってしまうからです。

今回の方法ではparticleを発生させているのはbox SOPの一か所です。particle SOPにはLife Expectという寿命を決めるパラメータがあります。これが短いとparticleは早く消滅するので円環の途中になります。Life Expectを4.1に調整して、放出した位置に戻るまで維持できるようにしました。

考察

粒子を曲げながら伝搬させることができました。粒子の流れを円環の途中で止める映像を見ていると、記憶をパターンとして保存できる可能性があると思いました。つまり、真っすぐがAという状態、真っすぐの後1回曲がった状態がBという状態、・・・というようにです。実際の記憶もニューロンのパターンとして記憶されていると言われており、興味深く思います。また今回のように粒子を曲げる手法と、「粒子を使った伝搬モデル1, 2」で行ったように、入力の量を測定し、新たに粒子を発生させる方法と組み合わせることで。どの方向に曲げるのか、どこで粒子を発生させるのか、が調整でき、様々な複雑なパターンを作ることができるでしょう。こうなると、単たる伝搬モデルからパターン発生器に進展させることになります。

まとめ

metaball SOP -> force SOPとparticle SOPを使うことで、粒子の方向を変えて伝搬させることができました。delete SOPも併せると、伝搬の途中で止めることもできました。行ってみると、これまでspring SOPを使って同様なことを行っており、もっともなことでした。伝搬先で新たにparticele SOPを使って粒子を発生させる手法と組み合わせると、様々な伝搬パターンが作れるでしょう。

コメント