クライン群をテーマにしたビジュアルパフォーマンスソフトを作ってみた
最近クライン群をテーマにしてVJっぽいことをするプログラムを開発していました。とりあえず動くようになってデモを作成したのでちょっと記事にしておきます。
BSoD2.0という映像パフォーマンスソフトを実際にクラブで試してみようというイベントのために開発を始めました。20分という長丁場だったのですが、そこそこ楽しめてもらえたようなので良かったです。
現場にはRolandのビデオミキサー、V-4EXがあり、映像にエフェクトがかけられたのですが、本番で使い方に戸惑い結局使えませんでした。鏡映とか面白そうだったんだけどなぁ。
中身
本当はCommon Lispで作成したかったのですが、1週間しか時間がなかったのと早いコードが書けなかったので諦め、既にジャバで組んであったクライン群のプログラムをパフォーマンス的な味付けを加えて一つにまとめました。
現在は3つのシーンで構成されており、Korg NanoKONTROL2とマウスで操作するようになっています。
現状、MIDIコントローラのボタンのマッピングも酷いですし、NanoKONTROL2がないと全く操作できないので他の人が使えるようにはなっていません。
放物型交換子群
soma-arc/KleinianWalker · GitHub
書籍、インドラの真珠において、おばあちゃんの放物型交換子群として載っている生成元のレシピから生成される群の極限集合と別の図形を変換させた軌道を描くソフトウェアです。マウスによる操作で蝶が動きます。
パラメータによっては計算に時間がかかるのでリアルタイムで極限集合をアニメーションさせるようなことはできませんでした。蝶が右に移動すると次のパラメータに移るようになっています。
こちらのサイトの方に影響を受けて作成しました。僕のとはクオリティが段違いですね。
http://bugman123.com/Fractals/index.html
接触ショットキー群
4つの円盤が連なるものです。高速回転で万華鏡っぽくなったり、極限集合の位置をトレースしてカメラが動くなどの機能があります。
一点穴あきトーラス群(Once Punctured Torus Group)
soma-arc/JOPTG · GitHub
まだ完成してはいませんがOPTiというソフトウェアを再実装したものです。
得られる絵が多様なので実質パフォーマンスのメイン部分と言える感じになっています。
これは二つの制御点から一転穴あきトーラス群の極限集合を計算しています。この極限集合は平行移動で重なるので、放物型交換子群に比べ、計算量が少なく、割と高速に動きます。
欠点はパラメータと最大探索レベルを間違えると計算が終わらなくなってしまうという危険性があることです。動画でもところどころ止まっていますね…
パラメータが変なところにいくと非離散的な群が生成され、図が崩れます。
ここら辺の詳しい話は数学的なのでインドラの真珠などの書籍を参照してください。これはもうクライン群とは言えなくなってしまうので数学的には意味をなさないのですが、点で描画するとなかなか綺麗になります。
他にはDataRacketからとってきたloud情報に合わせてパラメータが動いたり、回転を加えたりできます。点による描画にすると、意図せずして、IFS(反復関数系)によるフラクタルのようになりました。本当はこれにモーションブラ―やガウシアンフィルタをかけたりすることでより美しくなるのです。
今後の展開
- Common Lisp + OpenGL で書きかえる
今回はジャバの2D機能だけで描画していますので、OpenGLベースで作成したいですね。
- シーンを増やす
三次元形状やシェーダを活用した表現も行いたいです。
- エフェクト
シーンの切り替え時にノイズエフェクトをかける等のエフェクトを実装。
- CUDAサポート
高速であれば表現の幅が広がりますね。問題はNVidiaのGPUを積んだノートPCを持っていないと外でデモれない事ですね…
- 音への反応の改良
特にアシッドフレーズにうまく反応するようなプログラムが書きたいです。