同じ描画呼び出しで複数の重なり合う三角形がある場合、ピクセルシェーダーは、それをカバーするプリミティブごとに1回、ピクセルごとに入力されますか?または、深度テストが最初に実行され、プリミティブの数に関係なく、シェーダーはピクセルごとに1回だけ入力されますか?
私はDirectX9で作業しており、シェーダーモデル4.0レベル9_1を使用しています。
ありがとう!
同じ描画呼び出しで複数の重なり合う三角形がある場合、ピクセルシェーダーは、それをカバーするプリミティブごとに1回、ピクセルごとに入力されますか?または、深度テストが最初に実行され、プリミティブの数に関係なく、シェーダーはピクセルごとに1回だけ入力されますか?
私はDirectX9で作業しており、シェーダーモデル4.0レベル9_1を使用しています。
ありがとう!
深度テストは、ピクセルシェーダーの後に行われます。この質問を参照してください。
また、ピクセルシェーダーがピクセルごとに複数回実行されることも明らかです。アルファブレンディングを検討してください。最初に不透明ピクセルをレンダリングしてから、透明ピクセルをすでにレンダリングされている不透明ピクセルとブレンドします。ピクセルシェーダーがピクセルごとに1回だけ入力された場合、これは発生しません。
「プリミティブごとに1回」は正しい用語ではありません。単一のプリミティブは複数のピクセルをカバーする可能性が最も高いため、単一のプリミティブにより、プリミティブがカバーするピクセルごとにピクセルシェーダーが実行されます。
ピクセルシェーダーが他のオブジェクトによって隠されているプリミティブで実行されないようにするには、何らかの形式のオクルージョンカリングを実装する必要があります。あるいは、一部のドライバーはある程度これを行う場合があります。このリンクと以下のコメントを参照してください。