4

ピクセル シェーダーではピクセルを破棄できますが、すべてのピクセルに対して呼び出される高速フェイル シェーダーでさえ、自明ではない時間がかかると思いますか? 頂点シェーダーが三角形全体を破棄できる方法はありますか? VSがプリミティブにアクセスできないと確信していますが、同じ結果を得ることができるトリックはありますか?

ここで SM 3.0 について話します - 完全を期すために、新しいバージョンに関する議論を歓迎します。

4

1 に答える 1

3

おそらくご存じのとおり、ジオメトリ シェーダーはそれを簡単に行うことができますが、SM3 ではそのようなことはありません。

頂点シェーダーが認識するのは個々の頂点だけであるため、頂点シェーダーが三角形をそのように識別するのは困難です。でも・・・原理的には可能です。

w 座標をゼロに設定すると、点は無限遠に投影されます。すべてのポイントの w 座標を 0 に設定すると、三角形全体が無限遠になるため、レンダリングされません。

あるいは、おそらく gl_ClipDistance をゼロまたはゼロ未満の値に設定することもできます (実際に使用したことはありませんが、これでうまくいくはずです)。これにより、頂点がクリッピング プレーンの「背後」としてマークされます。3 つの頂点すべてがクリッピング プレーンの背後にある場合、三角形は表示されません。

ただし、破棄したい三角形に属する頂点を特定する方法が必要になります...非常に特別な状況でない限り、それは簡単ではありません (たとえば、すべての三角形を破棄したいことがわかっている場合など)。特定のバウンディング ボックス、または頂点アトリビュート #5 が 0 のすべての三角形など)。

于 2011-03-03T15:15:27.030 に答える