Hatena2009-04-03
code:hatena
<body>
*1238707279*Context Free Art
さっそく
||
startshape EGG
rule EGG{
CIRCLE { }
CIRCLE { b 1 s 0.9 }
EGG { x 0.3 s 0.6 r 10}
EGG { x -0.3 s 0.6 r 10}
}
||<
うむ、きれいなレンダラに食わせないとどうしても安っぽくなってしまいがちだった3次元版のStructureSynthに比べて、こっちは適当に白黒で作っただけなのに見栄えがいいな。
||
startshape EGG
rule RING{
CIRCLE { }
CIRCLE { b 1 s 0.9 }
SQUARE { s 0.6 }
}
rule EGG{
RING {}
12 * {r 30} RING { s 0.2 x 0.4 r 30 }
EGG {s 0.6 r -10}
}
||<
わっかなのになぜか渦巻きに見える。
||
startshape EGG
rule RING{
CIRCLE { }
CIRCLE { b 1 s 0.9 }
SQUARE { s 0.6}
}
rule EGG{
RING {}
12 * {r 30} RING { s 0.2 x 0.4 r 30 }
EGG {s 0.8 r -10 z 0.1 a -0.1 b 0.2}
}
||<
あー、いちおうz-order的な意味でzの値もあるんだ。
referenceを見てもmax-depth的なものが見つからないんだが。
||
startshape EGG
rule RING{
10 * {s 0.99 hue 30 z 0.1} CIRCLE {b 1}
CIRCLE {z 1 b 1 sat -1 s 0.9 }
}
rule EGG{
RING {hue 0 sat 1}
3 * {r 120} EGG1 { s 0.8 x 0.1 z 3 r 10}
}
rule EGG1{
RING {hue 0 sat 1}
3 * {r 120} EGG2 { s 0.8 x 0.1 z 3 r 10}
}
rule EGG2{
RING {hue 0 sat 1}
3 * {r 120 z 2} EGG3 { s 0.8 x 0.1 z 3 r 10}
}
rule EGG3{
RING {hue 0 sat 1}
3 * {r 120 z 2} EGG4 { s 0.8 x 0.1 z 3 r 10}
}
rule EGG4{
RING {hue 0 sat 1}
}
||<
アルファがあるのはいいけど、合成が加算合成のみしかないように思える。あとくりぬかれたものを作る手段ってあるのかな。
||
startshape GATES
rule GATE {
SQUARE {x 1 s 1 3}
SQUARE {y 1}
SQUARE {x -1 s 1 3}
}
rule GATE_S {
GATE {}
GATE {z -0.1 b 0.2 s 1 0.6 skew 50 0 y -0.6 x 1.8}
}
rule GATES {
GATE_S {}
GATES { s 0.8 y 2 x 3 b 0.05}
GATE_SPAWN { s 0.8 y 2 x -3 b 0.05}
}
rule GATE_SPAWN {
GATE_S {}
}
rule GATE_SPAWN 0.1 {
GATES {}
}
||<
||
startshape EGG
background { b -1 }
rule GLOW {
20 * { s 0.98 }
CIRCLE {a -0.9 b 1}
}
rule ARC {
8 * {r 30 hue 3} GLOW { x 1 sat 1}
}
rule ARCS {
8 * {r 30 hue 3} ARC { x 4}
}
rule ARCSS {
9 * {r 30 hue 3} ARCS { x 16}
}
rule EGG {
3 * {r 120} ARCSS {x 24.5}
}
||<
||
startshape EGG
background { b -1 }
rule GLOW {
20 * { s 0.98 }
CIRCLE {a -0.9 b 1}
}
rule ARC {
8 * {r 30 hue 3} GLOW { x 1 sat 1}
}
rule ARCS {
8 * {r 30 hue 3} ARC { x 4}
}
rule ARCSS {
9 * {r 30 hue 3} ARCS { x 16}
}
rule ES {
ARCSS {}
ARCSS {r 180 x 41}
}
rule STAR {
7 * {r 51} ES {x 25}
}
rule EGG {
STAR {}
3 * {r 120} STAR {x 100 s 0.3 flip 180 }
}
||<
*1238742197*Context Free Artは教育用途にむいているか?
>
id:TAKESAKO programming, cg 教育用に向いてる言語かな?
<<
一言でいうと「NO」ですね。プログラミング言語を教える教材というより、どちらかというと「フラクタルジェネレータでパラメータをいじっていたらなんかかっこいい画像ができた!」に近いです。「コードを書くと面白いものができる」という経験が全くない人に興味を持たせるとっかかりとしてはいいかもしれませんが、その後の発展性がなさすぎます。
Context Free Artは結局のところ樹木曲線なんかのような「再起呼び出しを使うと自然に書ける図形」を記述するための、とても表現力の限られたDSLにすぎません。長所としては
- 再起呼び出しの終了条件を明示的に書く必要がない(十分小さくなると自動的に停止する)ので無限ループになってしまうありがちなミスをさけられる
- 自動的に適切なサイズにスケールする
- 直接カンバスに描きながら再起呼び出しをするだけではなく、Zオーダーでソートしてから描き直す処理を自動でやってくれる。
- アンチエイリアスしているのできれい(おそらく一度大きなカンバスに描いてから縮めている)
- 回転、スケール、色などのコンテキストのpushとpopを明示的に書かなくてもやってくれる
というあたり。一方短所としては
- 変数がないのでマジックナンバーの嵐
- 加減乗除がないので「360の7分の1」も51.4などとマジックナンバーで記述
- ルールが引数を取れないので、同じ螺旋でも縮まり速度の違うものを作りたかったらルールをコピペしてマジックナンバーを書き換えなければいけない
- 「5個おきに何かをする」というコードが書きたかったら5個のほぼ同じ内容のルールを書くことになる
- アルファベット1文字の命令などとても可読性が低い
というあたりかな。おすすめのユースケースとしては中学か高校の情報の時間に30分くらい学生にいじらせてみて、強い関心を示した子をNodeBoxなりProcessingなりActionScriptなりへ誘導するとかじゃないでしょうか。
*1238768103*Context Free Art 2
||
startshape EGG
rule RING{
100 * {s 0.98 hue 10 z 0.01} CIRCLE {b 1}
}
rule EGG{
5 * {r 6 z 1}{
12 * {r 30 } RING {sat 1 s 10 1}
}
}
||<
こういう配色って見慣れていない人には「おお、すごい」と見えるかもしれないけど、ちょっとわかってくると「あー、はいHSVね」って感じで陳腐に見えてしまう。HDRの写真も、最初に見たときは鮮やかさに驚いたけども、今となっては「ああ、HDRね」という感じになってしまう。陳腐化しない美しさはあるのだろうか。あとContext Free Artだと色相環の回転以外で色をいじるのが至難の業なのでこれ以上を目指すのはとても大変だ。陳腐な配色にするよりはいっそ白黒に徹した方がいいのかもなぁ。
<hr>
||
startshape EGG
rule PART {
SQUARE {x -0.6 y -0.6}
SQUARE {x 0.6 y -0.6}
SQUARE {x 0.6 y 0.6}
SQUARE {x -0.6 y 0.6}
CIRCLE { b 1 s 2 z 1}
}
rule EGG {
PART {}
EGG {s 0.95 x 1.95 r 31}
}
||<
螺旋も螺旋で、陳腐な等角螺旋ばっかり。まあ、ランダム要素を入れて揺らしてやることは不可能じゃないけど。うーん。
いじってたらこんなのなった
||
startshape EGG
rule PART {
SQUARE {x -0.6 y -0.6}
SQUARE {x 0.6 y -0.6}
SQUARE {x 0.6 y 0.6}
SQUARE {x -0.6 y 0.6}
CIRCLE { b 1 s 2 z 1}
PART { s 0.75 z 1 r 5}
}
rule EGG {
PART {}
EGG {s 0.95 x 1.95 r 31 z -1}
}
||<
端が見えているとネタバレだけど、ここだけ切り取るとなぞの模様だ。
<hr>
お、ひねりを大きくしたら面白いことになった。
||
PART { s 0.75 z 1 r 15}
||<
<hr>
おお、なんか書かれていない線が見える!
||
PART { s 0.75 z 1 r 15 flip 180}
||<
<hr>
薔薇っぽい
<hr>
||
startshape EGG
rule EGG {
SQUARE { a -0.8}
EGG {s 0.8 1.01 a -0.01 r 5}
}
||<
*1238771461*お茶
f:id:nishiohirokazu:20090404001058j:image
*1238779865*Context Free Artで数学のお勉強
まあ、黄金比のお話です。
||
startshape EGG
rule PART {
SQUARE {s 16.2 1 a -0.5 x 8.1}
SQUARE {s 16.2 1 a -0.5 x 18.1}
}
rule STAR {
5 * {r 72} SQUARE {y 4.3 s 26.2 0.3 a -0.7}
}
rule EGG {
STAR {x 13.1 y -4.1 }
STAR {x 13.1 y 4.1 flip 0}
EGG_DOWN{y -1.2}
EGG_UP{y 1.2}
}
rule EGG_DOWN{
PART {}
EGG_DOWN {y -1.2 s 0.62 1}
}
rule EGG_UP {
PART {}
EGG_UP {x 10 y 1.2 s 0.62 1}
}
||<
</body>