モーションブラー

 グラフィックプログラミングでリアルさを出すための手法「モーションブラー」について…。
 モーションブラーを実装するには前回描画した物体と今回描画する物体の間を補間して複数回レンダリングします。離散的に表示される物体をあたかも連続して表示される様にするわけです。ココを読んで頂ければ納得いくと思われますが複数回レンダリングするといってもそれは全て平均したα値でレンダリングする必要がある。前回描画した画像程薄くとかは考えずに全て同じ明度で描画するのである。
始めに思いついた方法としては前もって頂点α値を平均化しておく方法である。描画時にはα合成方法は加算合成を使用すれば実装出来るのではないかと思いました。しかしこの方法だと補間された途中の画像が明度が高くなり最初と最後の部分だけ明度が低いのであまりリアルに見えなかったので他の方法が無いか調べていた所ココでそれに対応した方法が書かれていました。最初から明度を落としたものを加算合成するのではなく描画毎に明度を落とす方法です。これは加算合成ではなく単純に半透明合成するだけです。加算合成の方法からちょっと手を加えるだけで簡単に実装出来ました。
この画像は OpenGL 版です
と言う事で今回実装したモーションブラーのソースです。
モーションブラー(加算合成版) ※コンパイルには .NET 2003 が必要
モーションブラー(半透明合成版) ※コンパイルには .NET 2003 が必要
DirectX を使用したものです。OpenGL 版はいずれ作成する予定です。
一応実行ファイルも中に入っていますので実行だけは直ぐに出来ます。
※追記) OpenGL 版のモーションブラーを実装しました。OpenGL では標準でテクスチャを読み込むモジュールがないので今回はテクスチャ無しですm(_ _)m
モーションブラー (加算合成版 OpenGL)
モーションブラー (半透明合成版 OpenGL)