2009/01/21

school of Dolphin

あ、気づいたら10日くらい更新してない!

新しい作品です。
その名も「school of Dolphin」
「イルカの学校」ではないですよ。「イルカの群れ」。

音無しバージョン

イルカ単体

これはBlenderのparticleのboids systemで作りました。
boidsっていうのはbirdsの方言だそうです。
要するにに鳥の群れをシミュレーションするためにつくられたようなもんらしいです。
これは他の生物にももちろん使えて、例えば魚とかイルカとか。
3D的な群れを形成するものだけでなく、サーフェイス面を歩く2D的なものの作成にも使えます。だから、蟻とか群衆とかにも使えるのかな。

本当はもっと綺麗な映像なはずなんですよね。
でもiMovieで音付けてから出力するときになぜか全体的に白っぽくなってもうた・・・

2009/01/10

簡易ビジュアライザ


Build with Quartz Composerな作品です。

久しぶりにQuartz Composerを触りました。

簡単なビジュアライザです。
内蔵マイクから音を拾って音の高さごとの大きさをカメラからの映像の大きさに対応させています。

ダウンロードはこの下のオレンジの文字の上で右クリック→[リンク先のファイルを保存]で保存して下さい

ここからもダウンロードできます。

初めてのFluidシミュレーション

物理シミュレーションBlender』を読みながら試してみたFluidシミュレーションです。

Blender触るの久しぶりですが、なんとか初めてFluidシミュレーションを使うことができました。
凄いなBlenderって。
ちゃんと流体に見える。
レンダリングには結構時間がかかりましたけど。

2009/01/06

Glow



今まで、どうやったらProcessingで輝く効果を作ることができるのか悩んでました。
Quartz Composerだったら簡単にBlendingを「Add」にすれば良かったのですが。
(一般的な画像編集ソフトでの「加算レイヤー」みたいな感じの効果)
Processingではできないのかな、とも思っていました。
でもFlight404の動画とかはちゃんと輝いてるし・・・

そういうのが今日解決しました。
Processingのリファレンスをちゃんと読んだら載ってるじゃないですか!
blend()というのがあったんですね!!
これを使うと様々な効果が得られるようです!!!

ソースコードも載せときます。
汚いし綺麗な動きじゃないですが、まあこの効果を確かめるために適当にやったので、もうちょっと綺麗なのを作れるように頑張ります。


PImage img = createImage(66,66,ARGB);
PImage img2 = createImage(66,66,ARGB);

void setup(){
size(400,400);
background(0);
imageMode(CENTER);
colorMode(HSB,100);
smooth();
frameRate(20);

//create CIRCLE

for(int y=0; y< img.height; y++){
for(int x=0; x< img.width; x++){
int pos = (y*img.width) + x;

img.pixels[pos] = color(0,0);
img2.pixels[pos] = color(0,0);
if(CIRCLE(img.width,img.height,x,y)){
float Dist1 = dist(x,y,img.width/2,img.height/2);
float Dist2 = dist(x,y,img2.width/2,img2.height/2);
Dist1 = map(Dist1,0,33,0,99);
Dist2 = map(Dist2,0,33,0,99);
img.pixels[pos] = color(60,99,99,99-Dist1);
img2.pixels[pos] = color(10,99,99,99-Dist2);
}
}
}
}

float r = 100;

void draw(){
fill(0);
rect(0,0,width,height);
for(int i=0; i<100; i++){
blend(img,0,0,img.width,img.height,
int(random(width)),int(random(height)),img.width,img.height,ADD);
blend(img2,0,0,img.width,img.height,
int(random(width)),int(random(height)),img.width,img.height,ADD);
}

}

boolean CIRCLE(float W,float H,float X,float Y){
float a = H/2;
float b = W/2;

float oval = sq(X-a)/sq(a) + sq(Y-b)/sq(b);
if(oval <= 1){
return true;
}else return false;
}