https://www.shadertoy.com/view/MtGSWc (※音が出ます)
Shadertoy 楽しいデスネ!
去年(2016)末、javascript でも SiON みたいなソフトウェアシンセを作れないかなと思って GPGPU シンセサイザについて下調べをしていました。その際 Shadertoy が GPU による音生成に対応している事を知り、裏側でどういう処理をしているのか調べていました。
残念ながら、GPGPU シンセサイザは汎用性を持たせるのは難しい、という結論に至ったのですが(この経緯については後日書きたいと思います)、先週 GLSL 作曲入門 という記事が投函され Shader Music が結構注目されているのを見て、せっかく勉強したので乗っかてみることにしました。
どうせならちゃんと描きたい
とりあえず簡単な Shader Music を実装しようと思っていたのですが、せっかくなので Shader Art らしい絵も出したいと考えました。Shader Art の代表格である Ray Marching について、Flash でガリガリ 3D してた頃から知識としては持っていたのですが、ちゃんと触るのは今回が初めてでした。
基本はレイトレーシングなので特に違和感なく実装できましたが、いざ触ってみると、レイトレやポリゴンでは表現の難しい様々な近似表現が簡単に実装できて、気が付けば描画の方にどっぷりハマってしまいました。
とりあえず1週間
際限なくこだわり始めて結局何にも出さないパターンに陥りそうだったので、1週間でできたところまでで切り上げてアップしました。肝心の音楽がかなりおざなりですね。
この1週間いじってみて、記事にできそうなトピックスを書き出してみました(順不同)。基礎的な話はdoxas氏やnotargs氏にお任せして、隠し味みたいな位置づけで、ここら辺の話をいつか投稿できたらと思います。
Shader Art 関連
- 角丸め六角柱
- ハニカム構造
- Soft Shadow の調節
- 疑似 Ambient Occlution と、かなり疑似 Global Illumination
- HSV2RGB 関数
- exponential でモーションにコク(笑
- 1パス焦点ボケ
Shader Music 関連
- 音楽シーケンスの構成
- ADSRエンベロープ関数
- sin波、saw波、FM合成
Shadertoy 関連
- Shadertoyでできる事(意外と多い)
- Shadertoy 母体のソースを読む
- GPGPU シンセサイザの実装