いやーなんかびん太が困ってるっていうし、まともに 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 のとこで縦方向に均一にブラーしちゃってるから、どのポイントでもブラー量が一定になっちゃってるのな。これどーすっかなー。
[…] あと、Saqoosha さんも同じ事に挑戦されてました。違うアプローチで面白い。 […]
[…] Saqoosha.net :: Pixel Bender でズームブラー&回転ブラー 上に同じくぼかし(放射線)のデモです […]