■モーションブラーとはモーションブラーの解説はMasaさんのHPに詳しいので、ここではあっさり流します。さん曰く、画像がぶれる効果には2種類のものが在るそうです。:フィルムを写すときのシャッターを開く時間は有限であり、高速に移動するオブジェクトはぶれて感光される。動いた範囲を、一様な半透明のスーパーサンプリング(沢山の回数レンダリング)することにより表現可能。:網膜に記録された画像が一瞬で消えずに時間とともに減衰していく目が自動的に行うはずなのでコンピューターで行う必要はない。今回行う方法は、モデルの一部を引き伸ばして、しかも引き伸ばした先が薄くなるようにレンダリングします。従って上の立場から言うと、残像を擬似的に表現しているといえます。いろんな場所でモーションブラーとして紹介されているので、そのようにしておきます。写実」を求めるという意図で書いてました。残像は逆に重要なファクタだと思っています。今は残像の虜です(謎の、コメントをいただきました。一つとして、残像はこれから非常に有用なものとなりそうです。■方法レンダリングの方法ですが、今回は普通のモデルと引き伸ばされた半透明のモデルの2回を描画しています。引き伸ばしは、頂点シェーダーで実装しています。比較して、その値が負だったら(進行方向の裏を向いていた場合には)移動する前の座標を頂点に採用します。実際のレンダリング順は、Zバッファを上書きしないで半透明な引き伸ばされたモデルを描画した後、普通にモデルを描画します。後で半透明のモデルを描画すると、頂点が重なった場所の近く(表と裏を向く境界付近)で、Zバッファの誤判定が起きたりして、汚くなる場合があります。半透明のモデルを描画するときにZバッファの書き込みを切っておかないと、通常モデルが後で書き込めなくなります。深度チェックはしないと、壁の裏にモデルがいる場合に半透明の部分だけ壁の上に描画される現象が起きます。■シェーダープログラムでは、シェーダープログラムです。今回は引き伸ばしが起きるので、頂点が単純な透視変換ではありません。現在と昔(前回)のビュー行列を使って座標をビュー座標系へ変換してからそれらの差分を取って速度ベクトルを算出します。今回、ワールド座標ではなく、ビュー座標で差分を取ります。この結果、カメラが移動したときにブラーがかかります。カメラが移動したときはブラーがいらなければ、ワールド座標系で速度ベクトルを計算すればよいです。引き伸ばされた座標を計算します。v7頂点色もいじっています。移動速度を求めて、その長さに応じて、色を薄くします。なったら切れる程度の長さにしています。最後に頂点と同じように速度方向を向いているかどうかで普通の色か、ブラーのかかった薄い色を選択します。テクスチャーは普段どおりに張ります。■Cソース最後に描画部分です。いつも通りワールド行列やビュー、射影行列を計算した後、レジスタを設定します。今回は同心円状に移動するワールド行列を作りました。max(sqrt(x^2+y^2+z^2))で導出しています。残像が残るための時間を確保します}2回の描画部分を色分けしています。行列を設定していますが、これは後で。バッファの書き込みを切り替えてから、いつもの様に描画します。今回は色を設定するレジスタが2つあります。ブラーに使う色はα成分を0にしています。頂点シェーダーで減衰しているので、必要なかったりもしますが、色が切れて消えるのがいやだったので、α成分で制御するようにもしました。通常描画部分ですが、同じ頂点シェーダープログラムを使っています。違いは前のフレームの頂点を使うところで、現在の頂点を使うようにします。色も現在の色と前の色も同じにして、普通のレンダリングを実現します。ブラーの描画か通常の描画かを判定しています。今回の行列を保存します。あとは、必要な行列を設定します。■最後に今回は、頂点の引き伸ばしによるモーションブラーの表現をしました。頂点をいじる演出は少ないですね(後は、輪郭抽出しか浮かびません)。してまだ発見されていない面白いエフェクトがあるかも。もどるimagire@gmail.com。