トップページ > 空即是色 > 2006年の記事 > モーションブラー
空即是色 モーションブラー
2006年 08月13日
NeheのRadial Blurを弄って、自前のモーションブラーを実装してみた。
フレームバッファをテクスチャバッファにコピーするには、glReadPixelsとglCopyTexImage2Dがあるのだが、両方試してみた結果、自分の環境ではglCopyTexImage2Dの方が速かったのでこちらを利用した。
glReadPixelsも調整次第でそれなりに高速になるらしいのだけど、チューニングが細かくて面倒だったので( `Д´)彡
アルゴリズム(と言っていいのか?)の流れは
- Blur用のテクスチャバッファを256×256×3Bytes(RGB)で確保
- Viewportを上記のテクスチャバッファのサイズ(0,0,256,256)に設定する
- カメラを平行投影にしてBlur用のテクスチャをViewportの領域全体に描画(これが残像になります)
- カメラを元に戻して、オブジェクトを描画
- glCopyTexImage2Dでフレームバッファをテクスチャバッファにコピー
- Viewportを1024×768にする(ここからが実際の描画)
- 画面の初期化
- カメラを平行投影にしてBlur用のテクスチャをViewportの領域全体に描画
- カメラを元に戻して、オブジェクトを描画
以上。
同じオブジェクトをViewportを変えて2度描画する必要があるのですが、テクスチャバッファのサイズを調整するとそれなりに高速に動作します。
当環境(PowerBookG4)では256×256×3Bytes(RGB)で限界の2歩3歩手前くらいなので、ブラーを奇麗に出したいのであればもっとサイズを大きくしてもいいかも。
あと、これは2次元平面でだましだまし通用するモーションブラーなので3次元空間で正確に再現したい場合はオブジェクトのZ軸座標や移動量によってブラーの掛かり方も違うほうが自然でしょうから、また違った方法が必要になります。
その辺の詳細は『3Dゲームファンのための「ワンダと巨像」グラフィックス講座』を見てね。
トラックバック
この記事のトラックバックURL:http://null-null.net/mt/mt-tb.cgi/457