Pixel Bender でズームブラー&回転ブラー


20081008-Radialblur

いやーなんかびん太が困ってるっていうし、まともに Pixel Bender で書いたこともなかったのでやってみたわけですよ。回転ブラーみたいなのを。やり方としては、

1. 直交座標系を極座標系に変換。(Photoshop の極座標フィルタとおんなじ)
2. ブラー。(縦方向にブラーするとズームブラー、横方向だと回転ブラーになる)
3. 直交座標系にもどす。(1 の逆変換)

てな感じ。1 度に全部はできなくってそれぞれのステップが 1 つのフィルタ。2 は BlurFilter なので 1 と 3 を Pixel Bender で書いたわけね。つっても座標系の変換なんてたいしたことやらないのですけど。

んで、できたのがコレ。(ソースコードはこっち

フレームレートも 30 fps ぐらいは出るから結構実用できる範囲かも。(sampleLinear にしてるから sampleNearest にすればもっと速くなるはず。画質はわかんないけど。)

でもー、どうしてもとれないバグがあって。Pixel Bender Toolkit では正しく動くのに Flash で ShaderFilter として使うとなんかおかしい。↑のデモさわるとすぐわかるんだけど入力パラメータがどうも正しく伝わってない?のか、右下 4 分の 1 しか正常に動かない。。もしかしたら Kernel で計算ミスってるかもなんだけどちょっともう疲れたので誰か。。。

あー、そうだ。回転ブラーはいいんだけどズームブラーはちょっと間違ってる。ブラー量が中心から外にいくにつれて大きくならないとだめなんだけど 2 のとこで縦方向に均一にブラーしちゃってるから、どのポイントでもブラー量が一定になっちゃってるのな。これどーすっかなー。