2009年1月29日木曜日

Context Free Art 解説②

急がしくてなかなか更新できなかった。

Context Free の続き。
まず以下のコード

startshape main  

rule main {
CIRCLE{z 1 b 1}
TRIANGLE{s 2}
}

rule main 2{
CIRCLE{s 1.2 z -1}
TRIANGLE{b 1 flip 0 }
}

Context Freeの特徴の一つだと思うんだけど、
同じ名前のルールがあるとランダムにどちらかを選んでくれるのだ。

この場合 main という名前のでそれぞれ違う図形を描くルールを2つ作っている。

renderボタンを押す(command + R)とどちらかのルールが描かれる。
そして、それぞれのルールの名前の後に数字を入れる事で
ランダムに選ばれる確率を制御できる、これが重要。
この場合上の main は数字を入れていないので 1 を入れているのと同じ扱い。
この場合、1:2の割合になるので それぞれ1/3と2/3の確率で選ばれるという事になる。

ちなみに前回使わなかった z や flip を使っているのでその説明も。

z 数字 //z位置を移動、ただし3D空間ではないので、レイヤーの順番を決める感じ。
数が大きい方が手前に表示される。
上の使い方だと、丸の表示位置を三角より手前にするか奥にするのかを指定するのに使っている。

flip 角度 //その度数の角度の線で反転。例えばflip 0だと0度の線つまり水平な線に大して図形を反転するので上下が逆になる、flip 90 だと左右が逆になる。

startshape main

rule main{
CIRCLE{}
main{s .9 x 1 rotate 30}
}

Context Freeの一番の特徴だと思うのがこれである。
mainという名前のルールの中にまたmainがでてくる、
つまり自分自身を描く命令をしている、
そしてそのmainの中にもmainがいるわけで無限ループが出来上がっているわけです。
しかし、無限に描き続けると困るので、止まる条件もある。

s .9 の部分だ、これは main を実行して CIRCLE を書いて
サイズを .9に小さくしてまたmainを書く。
つまりだんだん小さくなってある程度まで図形が小さくなったら描くのを止めましょうってゆう意味。
だからサイズを小さくしないで 無限ループなルール作っても実行されない。

だいたいこれがわかればcontext freeっぽいものは描けると思う。
そしてやっぱりcontext freeを使ったら木を書いてみたくなると思うので、
このブログのタイトルバックに使っている木のコードを解説。
startshape tree

rule tree{
point{}
tree{s .93  y 1 r 9 b .04 }
}

rule tree .3{
tree{}
tree{ flip 90}
}

rule point{
CIRCLE{s 1 2 h 70 sat 1 b 0}
}


これだけ、簡単。
まず point ってゆうのはサイズでyを2倍にして縦長にした円、
色(hue)は緑だけど明るさ(brightness)を0にして最初は黒にしている。

treeというルールは二つあってそれぞれ 1:0.3 の比率でランダムに選ばれる。
上のtreeは point をすこしずつ上に移動させながら回転させてえがいていく。
b .04 ってしているので描くたびにすこしずつ色が明るくなって
葉っぱの方が緑に見えるようにしてる。

そしてもう一つの tree は tree を描きながら 左右反転させたtree も描いている。
このおかげでたまに枝分かれしたようになっているってわけです。

それぞれの tree 比率を 0.3 から 0.2 とかに変えるだけで形が結構かわってくるのがおもしろい。

今日はここまで、また続き書きます。

2009年1月21日水曜日

Context Free Art 解説①

Contex Freeの使い方が少しはわかってきたので、
備忘録としてメモ。

CFDGについてはここに詳しく説明されている。
リフェレンスカードにわかりやすくまとめられているので印刷しておくと便利かも。

ContextFreeがどんな物か一番理解しやすいのが、
アプリケーションについてるExampleだと思う。
これで、どんな事ができるのかわかるし、
これを元に値を変更してレンダリングしてみるだけで楽しい。

メニューバーのhelpにlessonファイルも用意されている
これで一通り理解できるようになっているみたい。










僕も基本的な使い方を解説しみますが、
プログラミング自体が初心者なので
言葉の使い方とか間違いが多いと思います、ご了承ください。

まず、簡単なコードの解説から
startshape MARU

rule MARU{
CIRCLE{}
}
このコードをレンダリングすると黒い丸が一つ描かれます。
先頭の startshape はその後に書かれた名前の図形を描くという意味、
この場合はMARUという名前の図形を描くという意味になる。

そしてそのMARUという図形の中身が以下に書かれている。
改行自体にはあまり意味はないので改行せずに書くと
rule MARU{CIRCLE{}} となる。
これは rule 図形の名前{図形の内容} という規則になっている。
つまり、名前がMARUで内容はCIRCLE{}の図形の定義ですってことかな。

ちなみにCIRCLEってゆうのは元々用意されている図形です、
他にもSQUARE と TRIANGLE ってゆう図形も用意されている。
名前の通り、それぞれ丸と四角と三角。
ContextFreeはこの三つの基本図形を使っていろんな形を描いていくのです。

以下のコードをレンダリングして三つの図形をだしてみると、
startshape main  
rule main{
CIRCLE{}
SQUARE{x 2 size 2 hue 0 saturation 1 brightness 1}
TRIANGLE{x 4 s 2 h 30 sat 1 b 4}
}









丸と四角と三角が表示される。
一つのルールの中にはいくつ図形が入っていてもよい。

見ればわかると思いますが、四角と三角は色やサイズをかえてあります、
SQAREとTRIANGLEは{}の中にそれぞれ位置やサイズや色を指定するオプションを入れている
図形を使用する場合その{}内に色んな値を指定することで形や色を替える事ができる。
x 2 と入れるとx位置を2移動させるという意味 size 2 だとサイズが2倍になる。
以下よく使うオプション。

x 数字 //x位置を指定した数字だけ移動
y 数字 //y位置を指定した数字だけ移動
size 数字 //図形を指定した数字倍にする、0.5だと半分のサイズになる。
size 数字1 数字2 //x方向に数字1 倍 y方向に数字2 倍
rotation 数字 //回転角度
hue 数字(0~360) //色相
saturation 数字(-1~1) //彩度
brightness 数字(-1~1) //明度
alpha 数字(-1~1) //透明度

ちなみに size 3 は s 3 などのようにアルファベット1文字で省略して書く事ができます、
saturationはs だとsizeと被るので省略すると sat になる。
ちなみに 0.1 などの0以下の少数は 0を省略して .1 のように書く事ができる。
色の指定はHSB方式

これらのオプション値を使って図形を変形させる事ができるのです。
startshape main  

rule main{
SQUARE{s 1 4 h 40 sat 1  b 1 }
SQUARE{s 4 1h 20 sat 1 b 1 a -.4 }
}


















このコードを解説すると

mainってゆう名前のルールを描画します
mainってゆう名前のルールの中身は
 四角をy方向(縦)に4倍して色(色相40彩度1明度1)を変えたのと
四角をx方向(横)に4倍して色(色相20彩度1明度1透明度0.4)を変えたもの
です。

ってゆう感じの意味になります。
今日は疲れたのでここまでです、また次回。

2009年1月16日金曜日

Tilt Shift Maker を試してみた

本城直季のミニチュア風写真が好き、
なんかみてると不思議な違和感を感じるのがいい。

で、Tilt Shift Makerってゆうのは
どんな写真でもそんなミニチュア風に変換してくれるwebサービス。

職場のベランダから試しに一枚とってみた。














おもしろいなぁ。

2009年1月15日木曜日

"Render in image"パッチを使う

たまにはQuartzComposerネタを

"Render in image"パッチの使い方、
このパッチはマクロ内の内容を画像(映像)として出力してくれるパッチ。

注意点としてアルファ情報を出力する場合
"clear"パッチを透明度0でいれておかないといけないみたい
最初これがわからなくて画像が上手く表示できなかった。

で、これを使うとなにが便利かというと、
AfterEffectsみたいな感じで映像にフィルターをかける事ができる!

これを使ってボックスが柔らかく変形しいるようなのを作ってみた、
なんとなくコンニャクっぽくなったので、コンニャク色にしてみた。


qtzファイルのダウンロード

2009年1月6日火曜日

Context Free Art

久々の、そして今年最初の投稿です。

Context Free Artを試してみました。

ランダムなフラクタルっぽい図形を作りたい場合に使えそう。
CFDGってゆうプラグラミング言語(?)を使うそうです。

startshape AA

rule AA{
    A{}
    AA{x 1.5 size 0.9 rotate 10 brightness 0.04}
}

rule AA 0.2{
    AA{}
    AA{flip 0}
}

rule A{
SQUARE{ hue 78 saturation 0.8 brightness 0}
} 

図形のルールを入れ子構造にする事によって幾何学的な模様にするみたい、
同じ名前のルールを2つ以上作ると指定した割合で
ランダムにどちらかを選んでくれます。
レンダリングする度に違う画像ができるのが面白い。
もう少し使い方がわかったら、使い方の解説を書きたいです。