『 Fluid on the Video 』
2009 年 5 月 12 日
前回のエントリに書いたyugop氏の言葉にもろ影響されてますが、美しいものを作りたくなったので、やったった。ActionScript3.0で流体シミュレーション。ついでにサイトトップも更新しました。
実はまともにDisplacementMapFilterを使ったのは初めてでした、うへぁ。流体シミュレーションも初めてだったので色々戸惑ったけど、まあまあおもろいもんが作れた気がするぞ。
どうやってるかというと、基本的なアルゴリズムはblog ViolentCodingさんのを使っていて、それを動画に適用した感じです。で、そのまんまだとマウスを素早く動かすとゼリーみたいにぷるぷるしちゃったので(可愛いけど)、ドロっとするようにアルゴリズムを改造。あとは高速化のためにセルを2次元配列で走査するのではなく、リンクリストを使うように変更しました。他にも色々やった気がするけど、忘れた。
リンクリストってのは、隣のセルを参照として持っておいて、その参照を使って隣へアクセスする方法。配列演算子を使わずに、隣へ隣へとセルの参照をたどることで、まるっとアクセスします。
今回は各セル毎に、forに代わる次セルへの参照と、流体の速度場を更新するための上下左右8方向のセルの参照を持たせました。これがめっぽう速いのなんのなのです。(フレームレートで言うと5フレームくらい違う)
なので、今度から頻繁に配列を回すときはリンクリストを使うようにするとよさげです。ターゲットプレーヤーが10のときにVectorとどっちが速いのか要検証ですが。
あと、この流体表現。
ライブラリは必殺技という精神に基づいて、trick7さんのTeraFireみたいに
alumiFluid(target);
とかで任意のオブジェクトを液状化できると素敵なので現在制作中だったりします。もちろん、汎用流体ライブラリとしても使えるようにするつもりです。需要あるかどうか分からんけど。
wonderflのはソースにコメントを書いてないので、ライブラリ化のときにちゃんとします。少々お待ちを、すみません。
では~。
5月 12th, 2009 at 9:54 PM
おぉーすごいですね。気持ちいい!
5月 12th, 2009 at 10:14 PM
>teraさん
ありがとうございます!
つい触りたくなる気持ちよさや、ずっと見ていたくなる心地よさをもっと追求していきたいと思いました。