概要
- Three.js を使った Strange Attractors の可視化体験談
- 力学系 と カオス理論 の基礎解説
- ストレンジアトラクター の性質とバタフライ効果の紹介
- GPU活用 による効率的な描画手法(Ping-Pongレンダリング)
- ブログやGitHub でのフィードバック募集とプロジェクト裏話
ストレンジアトラクターに魅せられて
- 数ヶ月前、 Three.js で遊んでいるときに Strange Attractors に出会い、計画が大きく変わった体験
- 最初は一つだけ描画して終わるつもりが、 美しいパターン の無限の可能性に夢中
- 単純な数式 から生まれる複雑さと秩序の発見
- 何時間も パターンの生成 を眺めてしまう満足感
- ランダム性から秩序が現れる 現象への深い魅力
力学系とカオス理論の基礎
- 力学系 とは、時間とともに変化する現象を数式で記述する枠組み
- フェーズ空間 :システムが取りうる全ての状態の集合
- ダイナミクス :現在の状態から次の状態への移り変わりを決めるルール
- 例:振り子、天候、鳥の群れ、ウイルス拡散、株式市場など多様な応用
- 物理学・生物学・経済学 などで広く研究される対象
カオス理論の世界
- カオス理論 は、予測困難な振る舞いを示すシステムを研究する分野
- 非カオス系 は決定論的で予測可能だが、 カオス系 は初期条件に敏感で予測困難
- バタフライ効果 :初期条件のわずかな違いが大きな結果を生む現象
- 自然界の多くの現象 (天候、液体の拡散、経済行動など)はカオス的
- 完全なルールを得られない複雑系では予測に不確実性が増幅
アトラクターとストレンジアトラクター
- アトラクター :システムが時間とともに引き寄せられる状態や集合
- 例:振り子は最終的に下で静止し、その状態がアトラクター
- アトラクターの特徴
- 安定性 :到達後はそこに留まる傾向
- エネルギー散逸 :エネルギー損失による低エネルギー状態への収束
- 収束性 :近い状態同士が徐々に集まる性質
- ストレンジアトラクター の特徴
- フラクタル構造 :スケールを変えても繰り返される複雑なパターン
- 初期条件への極端な感度 :バタフライ効果
- 非周期的軌道 :決して同じ軌道をたどらない
- カオスの中の秩序 :無秩序の中に現れるパターン
バタフライ効果の実演
- ストレンジアトラクター の核心は「バタフライ効果」
- 小さな初期値やパラメータの違いが 全く異なる軌道 やパターンに
- Thomas Attractor を例に、パラメータaの微小な変化で粒子の軌道やアトラクターの形状が大きく変化
- 初期状態 をキューブと球面で切り替えて軌道の違いを観察可能
- 最終的には同じアトラクターに収束するが、経路が大きく異なる現象
Three.jsとGPUによる効率的な可視化
- 大量のパーティクル をGPUで効率的に描画するため、 Ping-Pongレンダリング 手法を採用
- 2つのFBO(フレームバッファオブジェクト)を交互に使用し、CPU-GPU間の転送を最小化
- 一方で現在の状態を描画し、もう一方で次の状態を計算
- シェーダープログラム でアトラクター方程式を適用し、パーティクル位置を更新
- 各フレームごとにFBOをスワップし、効率的な描画を実現
まとめ・フィードバック募集
- GitHub Discussions でコメントやフィードバックを歓迎
- 近い将来、ブログ本体との統合も予定
- 参考文献やインスピレーション元として Wikipedia、WebGLFundamentals、各種ブログ・コミュニティ を挙げている
サイドプロジェクト裏話とSimone Attractor
- サイドプロジェクトとして Strange Attractors (https://blog.shashanktomar.com/posts/strange-attractors)をThree.jsで構築
- 初期の「遊びとしての数学」への回帰と、 驚きや発見の楽しさ を再認識
- Simone Attractor (Threadsで教えてもらった2Dアトラクター)を GPTに3Dへ拡張させて実装
- 全パラメータを自由に調整可能、 誰でも実験・体験可能なインタラクティブ設計
- 数学・アート好きの方、特に 数理的な知見 を持つ方からのフィードバックを強く希望