今、ライトプリパスレンダリングを実装しようと検討しています。
しかし、プリパス系のようなジオメトリの描画が2回行われるレンダリング方法だと、
頂点シェーダによるスキニングも2回行われることになると思います。
同じジオメトリに対して同じスキニングは二度手間なので、1回で済ませる方法があれば知りたいです。
DirectX10以降のAPIを使用すれば、ストリーム出力を使えばどうにかできそうな気がするのですが、
DirectX9では何かよい方法が無いのでしょうか?
ここで質問するような内容ではないのかもしれませんが、他に質問できそうな掲示板が見当たらなかったので、ここで質問させていただきました。
ちなみに、実装環境はWindows7のVisualC++2012Expressです。
ライトプリパスレンダリングと頂点シェーダスキニングについて
Re: ライトプリパスレンダリングと頂点シェーダスキニングについて
ライトプリパスは、ジオメトリパスを2回行うことによって、Gバッファの容量を減らすものです。
遅延シェーディング(遅延レンダリング)ではジオメトリパスは1回で済みますが必要なGバッファの容量は増えます。
頂点シェーダが2回動くことを気にする意味がよく分かりません。
そもそもジオメトリパスで重いシェーダを無駄に動かさないで全体の処理を軽くしようという技術ですよね。
マルチプルレンダーターゲット(MRT)で同時出力できる数が違うくらいで基本的には9も10以降もほとんど変わらないと思いますが。
遅延シェーディング(遅延レンダリング)ではジオメトリパスは1回で済みますが必要なGバッファの容量は増えます。
頂点シェーダが2回動くことを気にする意味がよく分かりません。
そもそもジオメトリパスで重いシェーダを無駄に動かさないで全体の処理を軽くしようという技術ですよね。
マルチプルレンダーターゲット(MRT)で同時出力できる数が違うくらいで基本的には9も10以降もほとんど変わらないと思いますが。
-
ろびん
Re: ライトプリパスレンダリングと頂点シェーダスキニングについて
すいません、ちょっと勘違いしていたようです。
スキニング後の頂点座標を取得できれば、2回目の描画時に頂点シェーダでの計算を短くできると思っていたのですが、
行列の積一回分しか変わりませんね。素直に2回頂点シェーダを動かして問題なさそうです。
失礼しました。
スキニング後の頂点座標を取得できれば、2回目の描画時に頂点シェーダでの計算を短くできると思っていたのですが、
行列の積一回分しか変わりませんね。素直に2回頂点シェーダを動かして問題なさそうです。
失礼しました。