Blog
Shadertoneで遊んでみた – 導入編
Shadertoneで遊んでみたら、なかなか面白かったので、備忘録としてブログに書いてみる。
Shadertoneは、ソースコードがGithubで公開されている。
このリポジトリの要約をみると “A mix of www.shadertoy.com and Overtone” とある。理解してみるとなかなか的を得た要約なのだけれど、最初は何のことやらという感じだったのでここから解読してみる。
まず、shadertoyの方だけれど、こちらはGLSL(Shader)をWebブラウザ上で実行とコーディングする環境。GLSL sandbox に近い感じ。まあ、こちらは理解できる。
問題は、Overtoneのほうで、こちらはオフィシャルのWebサイトが用意されている。
ここの説明の、「SuperColliderとClojureをくっつけたもの」という部分が要点となる。SuperColliderは、コンピュータ音楽言語でありオーディオ生成エンジンとして、すっかりお馴染なので割愛。Clojureとは、Lispの方言の一つで、いま話題の「関数型プログラミング言語」のひとつ。Javaのバーチャルマシンの上で動作する。
つまり、ここまでを要約すると、
- Shadertoneは、OvertoneとGLSLのライブコーディング環境をミックスしたもの
- Overtoneは、ClojureからSuperColliderの音響合成を行うライブコーディング環境
ということ。
別の言語体系で、SuperColliderの音響合成エンジンで音を生成するというアプローチは、Sonic Piに似ている。それもそのはずで、OvertoneおよびShadertoneの作者Sam Aaronは、Sonic Piの開発者でもある。Sonic Piと同様、Overtoneもライブコーディングの機能を重視している。さらに、複数人でソースを共有しながらのライブコーディングも可能となる模様。Overtoneの実行している様子は、本人によるデモがわかりやすい。
Sonic Piが、どちらかというと簡易な文法でライブコーディングを体験できる教育用途に主眼を置いているのに対して、Overtoneはより本格的にゴリゴリとライブコーディングする環境という印象。さらにOvertone/Shadertoneは、インストールと環境構築がややハードルが高いのがちょっとやっかいな感じ。手元のOS X 10.3.3で動かした際の環境構築をざっと書き出してみる。
まず、Clojureを対話的に実行可能なテキストエディタを用意する必要がある。イケてるライブコーディング用エディタとして話題のLight Tableや、vimからでも実行可能なのだが、ここでは作者であるSam Aaronが使用しているEmacsで環境構築してみる。
まず、OS Xにいろいろインストールするのに便利なHomebrewの環境を用意する。Homebrewの導入はこちらを参照。
Homebrewの環境が整ったら、emacsを最新版(2015年4月現在だと、24.5)にしておく。
% brew install emacs
次に、Clojureのプロジェクト生成を自動化してくれるLeiningenという環境を入れる。これもHomebrewをつかうと楽。
% brew install leiningen
次に、Emacsをライブコーディング用にチューンナップする。Sam Aaron自ら、自分の環境をパッケージングしてEmacs-Liveという名前で公開している。こちらもターミナルから1行コマンドでインストール可能。
% bash < (curl -fksSL https://raw.github.com/overtone/emacs-live/master/installer/install-emacs-live.sh)
次に、GithubからShadertoneをZipでダウンロード、もしくはCloneする。
Shadertoneをダウンロードしたフォルダに移動して、emacsを起動
% cd shadertone % emacs
すると、Emacs-liveでバキバキにチューンナップされたEmacsが起動する。
まずは、Shadertoneのサンプルを試してみる。emacsから、example/00demo_intro_tour.clj を開いてみる。
C-x C-f example/00demo_intro_tour.clj
サンプルを開いた状態で、emacsで以下のコマンドを実行
M-x cider-jack-in
これで、Shadertoneを対話的に実行する環境が起動する(起動にはしばらく時間がかかるので注意)。
このあとは、それぞれの行の末尾に移動して、
C-c C-e
を入力するとその行が評価される。例えば、
(t/start "examples/sine_dance.glsl")
の末尾に移動して C-c C-e をすると、ウィンドウが起動してShaderが表示される。ここから先は下記の映像を参照してみてほしい。
こんな感じで、どんどんライブコーディングしながら音と映像を同期していける。なかなか素晴らしい。
だいぶ長くなってきたので、続きはまた今度。