モーションブラー雑記

 参考:http://http.developer.nvidia.com/GPUGems3/gpugems3_ch27.html

 GPU Gem3がオンラインで見れるって素晴らしい…ともかく、ここに載っている順番をおさらいするべきかな。この例の中ではDepth Bufferっていうのを使っているんだけど、それのCgでの使い方がよく解らんのですよね…あと、interpolateっていう単語の意味がいつも覚えられない。補完するっていう意味ですね。

 depth bufferに入っているのは、三角形の三点がworld-view-projectionされたあと(つまり、画面の座標に変換されたあと)の、補完されたz座標÷w座標。(ここでw座標が何をさしているのか分からないんだけど…)

 詰まるところ、現在のある頂点の座標をDepth Bufferから求める、World Positionと前フレームのViewProjectionMatrixから前のフレームでのその頂点の座標を求める。差し引きして速さをもとめる、と言ったところかな?ただ、コードを100%理解したわけではないが…求める頂点の座標はいずれもProjectionの方かな?

 ここでまた疑問。各頂点での速度を求めるのは分かった。けど、そのあとに色を2Dのテクスチャからサンプルしてくるところがあるけど、それはどうやってるんだろ。2Dのテクスチャは自分がレンダリングしたものだろうけど、ということは、一つのシーンについて二回レンダリングしなければならないのかな?

 否。ただたんにカラーバッファからサンプリングするだけ。だから、Vertex Shaderから渡されたColor Bufferをサンプリングする、みたいな感じか…?いや、でもほかのピクセルの色を取ってこないといけない…これ、まじでどうやるんだろ。

 うーん、GPU Gem3 ではsceneSamplerっていう二次元のテクスチャ持って来てるけど、それをどうやって持ってくるのかわからない!

 完全につまづいた…ほかのピクセルの色を持ってくる方法がなかったら、モーションブラーも被写界深度も実装できないのに。