奇妙なアトラクタ(Strange Attractors)
(blog.shashanktomar.com)- Three.js を活用して 奇妙なアトラクタ(Strange Attractors) を可視化したプロジェクトで、単純な数学方程式から複雑で美しいパターンが生成される過程を示している
- 力学系(Dynamical Systems) と カオス理論(Chaos Theory) の基本概念を説明し、時間とともに変化するシステムの状態と、その進化を決定するルールを中心に構成されている
- 奇妙なアトラクタ は、フラクタル構造、初期条件に対する鋭敏性、非周期的軌道、カオスの中の秩序という4つの特徴で定義される
- バタフライ効果 を Thomas Attractor の可視化で示し、パラメータ
aのわずかな変化がまったく異なるパターンを生み出す過程を提示 - GPU ベースの ピンポンレンダリング(ping-pong rendering) 技法を使って数千個の粒子を効率よく計算・レンダリングし、リアルタイム可視化を実現
力学系とカオス理論
-
力学系 は時間とともに変化する現象を数学的にモデル化する方法で、惑星の運動、人口増加、株式市場などさまざまな例を含む
- システムの取りうるすべての状態を表す 位相空間(Phase Space) と、ある状態から次の状態へ移す ダイナミクス(Dynamics) で構成される
- たとえば人口成長モデルでは、人口規模と成長率が位相空間の状態を成し、出生率・死亡率・環境収容力などがダイナミクスを決定する
-
カオス理論(Chaos Theory) は予測不可能なシステムを研究する分野であり、自然界の多くの現象がこのような 非線形で鋭敏なシステム に属する
- ルールは存在していても、不完全な情報のために予測が不可能になる現象を説明する
- 初期条件の小さな違いが結果を大きく変える バタフライ効果 が代表的な特徴
アトラクタ(Attractor)と奇妙なアトラクタ(Strange Attractor)
-
アトラクタ(Attractor) は、システムが時間の経過とともに収束する状態の集合で、たとえば振り子の静止点がこれに当たる
- アトラクタへの収束は 安定性、エネルギー散逸(Dissipation)、収縮(Contraction) などの要因によって生じる
-
奇妙なアトラクタ(Strange Attractor) は、複雑な非線形方程式により予測不可能な軌道を示すアトラクタで、次のような特徴を持つ
- フラクタル構造: さまざまなスケールで繰り返される複雑なパターン
- 初期条件への鋭敏性: 小さな変化がまったく異なる結果につながる
- 非周期的軌道: 同じ経路を繰り返さない
- カオスの中の秩序: 無作為に見えても内部に一定の構造が存在する
バタフライ効果と Thomas Attractor の可視化
- バタフライ効果 は小さな変化が長期的に大きな差を生む現象で、「中国の蝶の羽ばたきがカリブ海のハリケーンを引き起こす」という比喩で説明される
- Thomas Attractor のパラメータ
aの値を 0.10、0.13、0.19、0.21 などに変えると、粒子軌道と全体形状が完全に変わる - 初期状態を
cubeとsphere surfaceに変えると粒子は異なる経路をたどるが、最終的には同じアトラクタ状態へ収束する
実装の詳細
- 可視化は Three.js を使用し、多数の粒子を GPU 上で直接計算・レンダリングする
- ピンポンレンダリング(ping-pong rendering) 技法により CPU と GPU 間のデータ転送を最小化し、2つの フレームバッファオブジェクト(FBO) を交互に使用する
pingとpongバッファがそれぞれ現在の状態と次の状態を保存- シェーダープログラムが各粒子の位置をアトラクタ方程式に従って更新
- 毎フレームごとにバッファを切り替え、新しい粒子状態をレンダリングする
参考および追加資料
- 関連資料として Maxim の Attractor 可視化、Wikipedia: Attractor、List of Chaotic Maps、WebGLFundamentals: Ping Pong Rendering などが引用されている
- 追加の例として chaoticatmospheres.com、dynamicmath.xyz、Reddit r/generative などで 3D アトラクタ可視化の事例を紹介
- ブログの GitHub Discussion ページでフィードバックを受け付けており、今後ブログへ統合予定
1件のコメント
Hacker Newsのコメント
こうした3D相空間の可視化は、私たちがどれほど多くの情報を得られるかをよく示している。
その一方で、3次元を超える世界においてどれほど多くの豊かさを見落としているのかも感じさせられる。
3D断面を見たり、ラグランジュ粒子を追いながら色でD値の変化を表したりする形で、4D以上を可視化できるのか気になる。
こうした可視化は、統計力学の初期にBoltzmannやGibbsらが相空間や平衡の概念をめぐって議論していた時代を思い出させる。
推論や部分的な理解によって近づくことはできても、完全に grasp することはできない。
実際、3D思考そのものが他の動物と比べて人間に与えられた大きな適応能力だと思う。
本当にすごい! a と b の値を調整しながら、それぞれ独自の**ストレンジアトラクタ(strange attractor)**のパターンを探せる機能があればいいのに。
フリーモードのようなものもあると楽しそう。
モバイルでは下部メニューバーから、デスクトップではすぐ目に入ります。
10代のころ、25年ほど前に2Dのカオスアトラクタ可視化ツールを自作したことがある。
そこでふと、「これを可視化ではなく音としてレンダリングしたらどうだろう?」と思った。
周波数を角度に、振幅を大きさに対応させてみて、WAVフォーマットを直接扱いながら**エンディアン(endianness)**という概念を初めて学んだ。
結果はまったく聞けないほどではなく、古いSF映画に出てくるコンピュータの効果音のような感じだった。
たとえば Hypster by Nonlinear Circuits や Orbit 3 by Joranalogue で、予測不能でありながら周期的な動きを音に加えてくれるのがとても面白い。
高校時代、ほとんどジュラ紀みたいなころにアトラクタで遊んでいた。
当時の486コンピュータでは1枚描くのに20〜30分かかっていたのに、今ではリアルタイム3Dレンダリングが可能になっているのが驚きだ。
こうした経験は、軌道や不安定性といったシステム的思考に大きな影響を与えた。
https://fractint.org/
この可視化を見るとPhongを思い出す。
https://phong.com/
偶然にも今週、2002年に高校11年生のとき作ったフラクタル生成プロジェクトを引っ張り出して、SFMLグラフィックスライブラリで現代化したところだった。
https://github.com/gradientwolf/fractals_SFML
これを見て本当にうれしくなった。こういう小さなプロジェクトは、10代のころの素朴で純粋な好奇心の時代へと自分を連れ戻してくれる。
「数学的に正確な拡張かはわからない」という話について言えば、実際には高次元への拡張には唯一の正解があるわけではない。
いろいろなやり方があり得るし、そもそも存在しないことさえある。
それでも、「十分に近い」試みそのものが興味深い。
たとえば3D Mandelbrotを作ろうとする人たちの試みを探してみると、完璧な解答はなくても非常に興味深い可能性がある。
本当に美しい。まるでムクドリの群舞を見ているようだ。
https://www.youtube.com/watch?v=V4f_1_r80RY
数学的な理論の説明の仕方がとても直感的で新鮮だ。
ほかのテーマについても書いてくれたら本当に面白そう。
この可視化を見ると xscreensaver の「strange」モジュールを思い出す。