首页 > 解决方案 > 在 OpenGL 中使用几何着色器修剪基元

问题描述

我有一个带有大约 2+ 百万个多边形的大型 2D 三角形(不是三角形条)网格。许多这些多边形是多余的,可以使用顶点着色器中的属性变量之一来确定。但是由于在顶点着色器中丢弃顶点是不可能的。我正在探索在几何着色器中丢弃基元作为优化的想法。保证该图元的所有三个顶点将具有相同的属性值。

我在这里有几个疑问

  1. 这真的会在速度和 GPU 内存方面优化渲染吗?
  2. 这在几何着色器中是否可行,几何着色器是否适合于此?

标签: openglopengl-esglslshadergeometry-shader

解决方案


但是由于在顶点着色器中丢弃顶点是不可能的。

废话。哦,当然,VS 不能“丢弃”三角形,但这并不意味着它没有能力。

完全在屏幕外出现的三角形通常只会对它们进行最少的处理。因此,至少,您可以让 VSgl_Position根据相关属性是否具有您要查找的属性,将最终值调整为不在屏幕上。

如果您可以访问 OpenGL 4.6,则可以通过使用 cull planes来获得更好的体验,这允许 VS 更直接地剔除三角形。

这真的会在速度和 GPU 内存方面优化渲染吗?

从广义上讲,您永远不应该假设几何着色器会提高您应用它的任何算法的性能。在某些情况下,可以使用 GS 来优化算法,但没有实际的性能数据,您应该从假设开始,即使用它只会使性能变得更糟。


推荐阅读