Structure Synthで3DCGアートに挑戦

公式サイト:
Structure Synth

概要

簡単に言うと, Context Free Artの3Dバージョンです.
Context Freeについては以下を参考のこと.


Context Free Art で楽しくアート - Haitena だいありー


個人的な印象ですが, 3DCGアートほど素人が手を出し難いものもないと思います. ちなみに3DCGアートの定義とかは突っ込まないでください>< 何となく語感的に用いているだけであまり厳密なものをここで求めているわけではないので. 3Dアートというと違うみたいなので. ここでは, 3DCG + アートのことを指します.
手を出し難い理由は以下の通り.

  • ソフトウェアを使うためには慣れが必要じゃね?
  • 3次元オブジェクトの作成にはセンス必要じゃね?
  • 数学的な知識(行列演算とか)が必要じゃね?
  • ハイスペックなPCじゃないと無理じゃね?

というもの.
まぁ, 数学的知識は高度なことをしようと思わなければ別に問われないし, ハイスペックなPCの方が良いのはいわずもがな.
ですが, Structure Synthは3Dアート未経験者でも簡単に3Dなアレコレが出来ちゃうという素晴らしいソフトウェアです.


俺的には3次元にはあまり興味がなく, 2次元のみで満足していたのだけれど, 井戸の中の蛙オーシャンを知らず, あるいは引きこもりの俺リア充を知らずといった具合に, 3次元もやってみると良いものです(ぇ
といっても, まだ敷居が高い感が多少あります.


以下で, Structure Synthのインストールから実際に使ってみるまでを簡単にまとめます.
Structure Synth自体はWindows, Mac OS, Linuxで動作しますが以下では基本的にWindows, Mac OS X 10.5をターゲットとしています(俺の環境).

インストール

公式サイトのGetから各プラットフォーム向けバイナリがダウンロード出来ます. 解凍したフォルダ内, StructureSynth.exeが本体です(MacではStructure Synth.app). 俺の環境ではMac版がよく落ちます.(ぇ 原因はよくわかりませんが, 不安定なので基本的にはWindowsで試しています.)


……これで使えます(ぇ
ソフトを立ち上げてRenderもしくはF5で描画します. 3ペインになっていて, 左ペインがスクリプトを書くペイン, 右ペインに図形がレンダリングされ, 下ペインはログ画面となってます. ソースコードは色分けされるので見やすいです!



レンダリング画面では, マウスの左クリック, 右クリック, シフトキー等を駆使して希望のアングルになるよう調節します.

超基本

Learnで基本をおさえます. といってもContext Freeとほとんど一緒なので以下でおkだと思います(再掲). が, 別にそっちを読まなくても十分わかると, どちらも大して理解してない俺が言ってみる(ぇ


Context Free Art で楽しくアート - Haitena だいありー


Context Freeとの違いは, Context Freeでは

startshape Main

rule Main {
  CIRCLE { }
  Main { z -1 s .7 y .7 x 1.5 }
}

と書くところをStructure Synthでは, 例えば

Main

rule Main {
  { } sphere
  { z -1 s 0.7 y 0.7 x 1.5 } Main
}

と書きます. つまり, 状態の記述を書く{ } がruleもしくはプリミティブ名の前に来ます.
また, Context Freeでは小数の記述では先頭の0を省略できましたが, Structure Synthでは省略できません.
あと, startshapeの記述も不要となっており, ただ, ruleもしくはプリミティブ名を書くだけでおkです.
CIRCLEがsphereになっているのは, Structure Synthでのプリミティブは, mesh, grid, line, dot, box, sphere なので最も近そうなsphereで代替しました. プリミティブのレンダリング

Examples > Tutorials > Primitives.es

を実行することで見られます.


そして, 何より重要なのが再帰です.
Context Freeでの再帰停止条件は, 図形の描画が見えないくらい小さくなったとき勝手に停止されました.
しかし, Structure Synthでそれは困難らしく, 再帰回数が限定されます.
上記のように何も指定しない場合はデフォルト値(1000?)が設定されます.
例えば, 明示的に設定する場合は次のようにします.

set maxdepth 5

Main

rule Main {
  { } sphere
  { z -1 s 0.7 y 0.7 x 1.5 } Main
}

スクリプトのグローバル領域にset maxdepthとして再帰回数を設定します. ちなみに上記スクリプトを実行すると3個しか球が表示されません. ログではしっかり5回再帰しているみたいですが……
また, ruleごとに再帰回数を設定することもでき, その場合は

Main

rule Main maxdepth 5 {
  { } sphere
  { z -1 s 0.7 y 0.7 x 1.5 } Main
}

のように, rule名の後にmaxdepth 再帰回数, と設定します(こちらはちゃんと5個の球が描画されます(^_^;)).
さらに面白いのは, 次のような設定が可能な点です.


まず, 普通に.

set maxdepth 50

Main

rule Main {
  { } sphere
  { s 0.95 x 3 ry 30 h 30 } Main
}


次に, 少し変更.

set maxdepth 50

Main

rule Main maxdepth 12 > Sub {
  { } sphere
  { s 0.95 x 3 ry 30 h 30 } Main
}

rule Sub {
  { } box
  { s 0.95 x 3 ry 30 h 30 } Sub
}

としてやると……



という風に, 指定回数の再帰後, 別ruleもしくはプリミティブを指定出来る!
使い方によっては表現の幅がかなり広がりそう.


ただし, 以下のように相互再帰的な動作は出来ないみたい(ソフトが不正終了してしまいます).

// Subを以下のようにすると×
rule Sub maxdepth 12 > Main { … }


あとContext Freeとの明確な差異は, 重み付けの際にはwを付けることでしょうか.

rule R1 { … }
rule R1 w 0.1 { … }

といった具合.


このようなContext Freeとの違いや, リファレンスはreferenceにあります.
ぶっちゃけ, Structure Synthの基本部分は公式サイトのlearnとreferenceでおkな気がします.

SunFlowとの連携

そう, 実はStructure SynthはSunFlowと連携が可能だそうです. そして, 俺がまとめようと思ったのもSunFlowとの連携の際の設定についてであって, 実は今までのは前振りだったんだ. な, なんだっt(ry


SunFlowについては, 以下がわかりやすいと思います.

CGソフト(Sunflow) - WBS+(Web/Blender Studio+)

Sunflowのチュートリアルもあるみたいです.

Sunflowチュートリアル・メニュー - WBS+(Web/Blender Studio+)



Sunflowを使うためにはJDK1.5以降が必要なので, インストールされてない場合は設定が必要です.
MacではTerminal上で,

java -version

で確認できます.
インストールされてない場合は, 以下からJDKをダウンロードしインストールします.
Java SE Downloads - Sun Developer Network (SDN)


Sunflow本体は公式サイトのDownloadsからバイナリがダウンロード出来ます.


公式サイト:
Sunflow - Global Illumination Rendering System


解凍して出来たフォルダにWindowsならbatファイル, Macならshスクリプトが同梱されており, 以降それらを起動することでSunflowを実行します.
Windowsではbatファイルは以下のようになると思います(JDKのインストール先がデフォルトの場合).

@set javadir="C:\Program Files\Java\jdk1.6.0_12"
@set mem=1G
@%javadir%\bin\java -Xmx%mem% -server -jar sunflow.jar %*
@if %errorlevel% neq 0 pause

また, Macではshスクリプトを用いる場合は実行権限を与える必要等がありますが, 短かいコマンドなのでそのまま実行すればおk.

java -Xmx1G -server -jar sunflow.jar


また, Sunflow本体と一緒に, 公式サイトのDownloadsからExample scenesもダウンロードしておきます. シーンのサンプルデータ等が含まれています.

さらに, 以下でImage Based Lighting(IBL)レンダリング用テンプレートを配布されているので, これも使わせてもらいます. 多謝!!!

シン石丸の電脳芸事ニッキ: Structure Synth SunflowでのIBLレンダリング


Structure Synthのメニューで,

Render > Template Render to File…

から用いるテンプレートが選べますが, 上記IBLレンダリングのテンプレートをダウンロードし, Structure SynthのフォルダにあるMiscフォルダに入れれば, 選べるテンプレートにIBLレンダリングが追加されます.
テンプレートを選択し保存するときにファイルの拡張子には『.sc』と指定しておきます.


Sunflowを起動した後, File > Open… (ctrl-O)で先ほどのSCファイルを開くことで読み込まれます.
その後, Sunflowの子ウィンドウであるImageウィンドウのIPRボタンを押すとプレビューがレンダリングされます.
それでおkならRenderでちゃんとレンダリングすれば完成. Renderはやっぱり時間がかかりますねーwww
ちなみに, 先の2つの画像はIBLです. はじめはあまりの綺麗さに驚きました. 超感動です.
また, 上記IBLテンプレートを用いる場合はSunflowの追加ダウンロードしたExample scenesを解凍して出来るExamplesにあるsky_small.hdrを用いるので同じフォルダに置いておく必要があります.


シン石丸さんの他, id:KZRさんも参考にさせていただきました. そして,

Context Free 日記 - Radium Software

のmetroという作品を参考にさせていただいて, 以下を作りました.

set maxdepth 400
Start

rule Start { 8 * { h 100 y 10 z 10 rz 30 } 1 * { } P }

rule P { Arm { y 3.5 rx 45 ry 45 } P }
rule P { Arm { y 3.5 ry -45 rz -45 } P }
rule P { Arm { y 3.5 rx -45 ry 45 } P }
rule P { Arm { y 3.5 ry -45 rz 45 } P }
rule P  w 0.06 { Dott }

rule Dott {
	{ h 100 } grid
	{ h 200 } Sphere
}

rule Arm {
	{ y -0.3 } Dott
	6 * { y 0.5 } 1 * { s 0.15 0.6 0.15 h 200 } Box
}




似た例にはContext Freeの

Example > underground

があります.
ノードの接合というか, 描き方がRadium Softwareさんのものとは異なっており, undergroundよりmetroの方がスマートだなーと思ったので, そちらを参考にしました.


ちなみに, これはSunflowでレンダリングしたものではなく, Structure Synthで出力したものです.
というのも, テンプレートにgridの設定がなく, また俺は書き方がわからなかったためです(ぇ
あと, Structure Synthでアルファ値(a)を設定していてもちゃんとレンダリング出来ません.
設定加える必要がありそうです……

結論

Context FreeもStructure Synthも手軽にはじめられ, スクリプトの記述量からは想像もつかないほど豊かな表現力があります. これらを使っていると, 普段使わないような脳の領域を使っているようで不思議な感じがします. まだ全然経験値が足りていないけれど, もっといろいろ作れたらいいなーと思います.


ただ今回Structure Synthを使ってみて, 一つ悟ったのは……


2次元もいいが, 3次元もいい.


3DCGアートに手を出せないでいた2次元嫁な人のひとりでも多くが3次に目覚めたなら, この文章に意味があったと思えるだろうか……いや, ただのメモだけれども. 実際.