Motion Blur

canvasに対応していません。

■モーションブラー有効化

説明

チェックボックスをON/OFFすると違いが分かるかと思いますが、モーションブラーをかけると球の動きが滑らかになります。
簡単に言えば、時間軸(フレーム間)に対して画像の補間をかけてやることで、本来あるべき「カメラの動きによるブレ」や「被写体の動きによるブレ」をシミュレートしているわけです。

静止画にするとこんな感じ。


モーションブラーを真面目にシミュレートしようとすると非常に高負荷になるので、あの手この手で近似させるのですが、
今回は、もう10年くらい前のネタになりますが、初代ロストプラネットで使用されていた2.5Dモーションブラーというのを試してみました。

実装について

1.
シーンをフレームバッファAに描画
この時、αに線形な深度情報を格納しておく

2.
前フレームからの移動量(速度情報)をフレームバッファBに描画
前フレームの変換行列を保持しておくことで、現在と前フレームの差分移動量を計算できる
頂点シェーダーで、ワールドビュー空間での移動ベクトルと法線ベクトルの内積をとり、逆向きであれば前フレームの座標を使用することにより、引き伸びたオブジェクトを作成する
各ピクセルに、射影空間での移動量と、線形な深度情報を格納しておく

3.
最終描画
フレームバッファBの速度情報から、フレームバッファAの画像を移動方向に複数回サンプリングして合成する
このとき、手前のオブジェクトをサンプリングしてしまうと前後関係がおかしくなってしまうので、格納しておいた線形な深度情報を用いて比較判定する
ポイントは、「線形な」というところで、これであれば8bit(256段階)でもそれなりな精度で保存できるし、深度比較のバイアス値もかけやすい


何かのお役に立てれば幸いです。

トップページへ戻る


Tweet Follow @yunta_robo