今日は私の大好きな、あるソフトを紹介します。
Structure Synth
こちらです。
Structure Synth
どういうものが出来上がるかは「Structure Synth」で画像検索をしていただくとわかると思います。
あれもこれもできるわけではないですが、唯一できることは莫大な数のループ・再帰構文を用いて、人間の想像の斜め上を行く図形を描く、ということです。
要は3Dの複雑な図形をシンプルなコードで描くことができるソフトです。
できあがる図形は、つくっている側にも予想外で、右脳と左脳の両面を刺激されます。
作っていて非常に気持ちいい。。
「ジェネラティブアート」、「フラクタル図形」といったワードにピンとくる方には刺さるかもと思います。
記述すべきコードは”Eisen Script”というかなり特殊な言語で、初見ではものすごく抵抗があります…
が、実際は、最小限の機能をいたってシンプルな記法で提供してくれています。
記述量が少なくなるよう、関数名がものすごくシンプル( “s” とか “rx” とか)。
100回ループを回したいときは、” 100 * { //何か描く// } “という感じです。
記述、ラク!
なお上述の通り記述も機能もシンプルなので、あれもこれもなんでもできるわけではありません。
しかし機能的な制約が多いからこその面白さというのもあります。
私の主な使い方としては、Structure Synth でフラクタル図形のアイディアを貯め、
Three.js や openFrameworks 等でインタラクティブなアプリケーションを制作する際のネタとしてとっておく、といった感じです。
なお、このソフトの作者は Mikael Hvidtfeldt Christensen 氏というデンマークのアーティスト/技術者/起業家です。
彼の創りだす図形のスゴさは Flickr を覗いてみるとわかると思います…。
CGだけど、畏敬の念を覚えるような荘厳な図形を作り出しています。
機能のサマリ
記法・関数
用意されている文法はたぶん以下で大事なところはカバーできている気がします。
具体的な書き方は割愛します。詳しくは reference をご覧ください。
- 回数指定のループ
- 関数定義
- x方向, y方向, z方向への移動
- x方向, y方向, z方向へのスケーリング
- x軸, y軸, z軸回転
- 3Dプリミティブ図形の描画(BoxとSphereのみ…。)
- 色指定
- 乱数発生器
本当にシンプル…。
Processingなどの経験があれば、すぐ何か描けると思います。
レイトレーシング
レンダリング時に良い感じの質感をレイトレーシングによってつけることもできます。
この点に関しても、あれもこれもはできません(鏡面反射とかはできない)が、以下のような最低限かつ重要な質感表現はできます。
- 被写界深度の設定
- シャドウマップ法による影の表現
- アンビエントオクルージョンによる陰の表現
デッサンにも言えることですが、陰影のあるなしでかなり質感や雰囲気は変わります。
写実表現における陰影づけの表現はおもしろい分野です…。
Sunflow などのレイトレーシングをシミュレーションする外部ソフトと組み合わせることもできるようです。
私の作品とコード
Bone Speher
遊んでたら描けちゃった系。
記述量も少なく生成的といった感じで、個人的に気持ち良かった作品です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
set raytracer::light [0,7,4] set raytracer::shadows true set raytracer::samples 10 set raytracer::dof [0.21, 0.05] 1 * { x 2.5 z 4 } 20 * { rz 18 y 1 } 20 * { ry -18 z 1 } r1 rule r1 { { s 0.1 0.1 1 color #254a64 } box } rule r1 w 0.1 { { s 0.1 0.1 1 color #ff6a80 } box } { s 50 50 0.1 color #254a64 } box |
Concrete Jungle
これは檻のような閉塞感を表現したかった作品です。
x軸, y軸, z軸それぞれに伸びる直方体を描いたのみ。
うまくやれば記述量減らせそう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
set raytracer::light [12.5, 40.5, 12.5] set raytracer::dof [0.34, 0.036] set raytracer::ambient-occlusion-samples 1 8 * { x 3 } 8 * { y 3 } 8 * { z 3 } rotate rule rotate { { rz 90 x 1.5 y 2 z 1 } randomBox } rule rotate { { rx 90 x 1 y 2 z 1.5 } randomBox } rule rotate { { ry 90 x 1 y 2 z 1.5 } randomBox } rule randomBox { { s 0.1 4 0.2 color #ffffff } box } rule randomBox w 0.5 { { s 0.2 3 0.1 color #ffffff } box } { x 12.5 y 12.5 z 25 s 50 25 1 color #6c5887 } box { x 37.5 y 12.5 z 12.5 s 1 25 25 color #6c5887 } box { x 12.5 y 12.5 z 0 s 50 25 1 color #6c5887 } box { x 12.5 y 0 z 12.5 s 50 1 25 color #6c5887 } box |
Cube Fractal
これは再帰構文を使ったフラクタル図形を描く、ということ狙った作品です。
常日頃、複雑な幾何学に飢えているので今後もこういう作品をつくれたらなと思います。
コードは以下ですが、賢い人ならば記述量をぐっと減らせそうです。ご教示ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
set background #ffffff set maxdepth 6 set raytracer::light [0,6,15] set raytracer::dof [0.24 , 0.05] { rx 45 rz 45 y -2.5 s 20 0.1 20 color #ffffff } box { s 1.0 color #cfffe4 a 0.7 } sphere { s 3.6 color #bffed4 a 0.2 } sphere 4 * { ry 90 } 1 * { x 2 z 2 } r1 1 * { rx 90 } 4 * { ry 90 } 1 * { x 2 z 2 } r1 1 * { rz 90 } 4 * { ry 90 } 1 * { x 2 z 2 } r1 rule r1 { { s 0.1 4 0.1 color #dd33ff } box r2 } rule r2 { 1 * { x -0.2 z -0.2 ry 45 } 1 * { s 0.1 0.1 0.5 color #dd33ff } box 1 * { y 1 x -1 rz 45 } 1 * { s 0.1 2.8 0.1 color #affec4 } box 1 * { y 1 x -1 rz 45 } 1 * { x -0.3 z -0.3 s 0.9 } 1 * { s 0.1 2.6 0.1 color #affec4 } box 1 * { y 1 x -1 rz 45 } 1 * { x -0.3 z -0.3 s 0.9 } 1 * { s 0.6 } r2 1 * { y -1 z -1 rx 45 } 1 * { s 0.1 2.8 0.1 color #affec4 } box 1 * { y -1 z -1 rx 45 } 1 * { x -0.3 z -0.3 s 0.9 } 1 * { s 0.1 2.6 0.1 color #affec4 } box 1 * { y -1 z -1 rx 45 } 1 * { x -0.3 z -0.3 s 0.9 } 1 * { s 0.6 } r2 } |
という感じで楽しさは伝わったでしょうか。
フラクタルやレイトレーシングの世界を気軽にチャレンジするには最適なツールだと思います。
参考
以下の書籍は、本ソフトのおそらく唯一の和書です。
基本事項やサンプルプログラムの解説が丁寧です。
紀伊國屋書店でこの本に出会い、Structure Synth を知りました。
感謝!
こちらの記事では Sunflow など外部機能との合わせ技などの使い方の解説をされており、何度か参考にさせていただきました。
Structure Synthで3DCGアートに挑戦