图元细分着色器和几何着色器的区别

24

我试图对图形管线有一个高层次的理解。有一件事情让我感到困惑,那就是为什么 Geometry Shader 存在。对我来说,Tessellation 和 Geometry Shader 似乎做的是同样的事情。有人能向我解释一下,Geometry Shader 和 Tessellation Shader 之间有什么不同,以证明它的存在是有意义的吗?

1个回答

34

tessellation着色器用于可变细分。重要的部分是邻接信息,以便您可以正确地进行平滑处理,不会产生间隙。您可以使用几何着色器进行一些有限的细分,但这并不是它的主要用途。

几何着色器按原始图元操作。例如,如果您需要为每个三角形执行某些操作(例如),请在几何着色器中执行。我听说过阴影体积挤出也可以在其中完成。还有“保守光栅化”,在其中您可能会扩展三角形边界,以便每个相交的像素都获得片段。这些示例非常特定于应用程序。

是的,它们也可以生成比输入更多的几何图形,但它们不会很好地扩展。如果要绘制粒子并将点转换为非常简单的几何图形,则它们非常有效。我也使用几何着色器多次实现了 marching cubes。与变换反馈结合使用,可保存生成的网格。

变换反馈还与几何着色器一起用于执行更多计算操作。一个特别有用的机制是它为您执行流压缩(紧密将其各种数量的输出打包,以便结果数组中没有间隙)。

几何着色器提供的另一个非常重要的功能是路由到分层渲染目标(纹理数组,立方体的面,多个视口),这是必须按原始图元进行的。例如,您可以通过将几何形状复制并投影6次到每个立方体面来在单个通道中为点光源渲染立方体阴影图。

虽然不完整,但希望这能够传达出它们之间的差异。

参见:


1
这确实有帮助。而且,随着我对图形的深入了解,这个答案会变得越来越清晰,所以我会再次参考它。谢谢! - Andi Jay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接