■ [XNA]ピクセルシェーダーを使った似非メタボール
今日も昼間はほとんど寝ていた。寒いので布団から出たくないのが原因かと思い暖房を入れてみたけれど、布団の中も暖かくなってさらに心地よく寝られた。いっそ冬眠したい。今なら何日でも寝ることができそうな気がする。
せっかくの休みを寝てばかりいるのももったいないので、夕方から今年の冬休みの宿題として課題にしてた「似非メタボール処理」を作ってみた。
原理は簡単で、加算ブレンドで作ったモノクロの濃度画像にメタボールっぽく見えるようにするフィルタをかけるだけ。閾値以下のピクセルは黒く、閾値以上のピクセルは隣のピクセルとの差分から法線を作って環境バンプマップぽいテクスチャを張る。実際には球形らしくみえるように適当な補正も加えているけど、これだけの処理でも結構それっぽい絵が出来上がる。比較的軽い負荷でできるので、リアルタイムでぐにぐに動くのが気持ちいい。「ラーメンスープの油を箸でつなげるゲーム」くらいなら簡単に作れそうか。
After Effectsのメタボール描画プラグインで同様の処理を行っているものがあったのだけど、パラメータの微調整が効かなくて微妙に痒いところに手が届かず使いにくかったので、自前で似たようなものを作ってみることにした。パラメータや環境マップのテクスチャをもう少し工夫することで、水っぽいものやねばねばしたものが飛び散るアニメーションテクスチャを作るのに使えそうな気がする。また、この程度の処理ならゲーム中にオフスクリーン描画でも作れるので、簡単に使えるようにしておけばイベントシーンの特殊効果などで面白い応用法もみつかるかもしれない。
今日はとりあえずフィルタ部分だけ。パーティクルの挙動はまた後日追加したい。こういう簡単な実験をするのにはXNAは結構便利かも。