着色器细分与算法细分

时间:2012-07-03 13:12:56

标签: opengl

使用OpenGL 4.0,添加了着色器细分支持。 每个原始镶嵌和vao顶点预加载在性能方面有什么区别? 通过vao顶点预加载,我的意思是在vao中加载所有顶点数据并渲染它,同时将细分表面保留在RAM中,而不是通过着色器管道动态创建镶嵌表面。

1 个答案:

答案 0 :(得分:5)

答案肯定是“这取决于。”

好的,你有一堆网格控制点(Bezier,NURB,Catmull-Clark,......)。在经典的OpenGL中,您可以对CPU上的控制点进行细分,并将三角形存储在顶点缓冲区对象的VAO集合中。使用OpenGL 4,您可以在VAO中传递控制点,渲染为GL_PATCHES,并让控件和评估着色器生成三角形。

如果控制点的网格是静态的并且很少更改,则CPU解决方案更好,因为您只进行一次细分并存储结果,而不是每帧重新计算完全相同的细分。

如果网格发生变化,那么GPU解决方案会更好。将新的控制点从CPU复制到GPU更快,因为数据更少,并且GPU可以并行细分,因此速度更快。 GPU侧曲面细分现在可以通过网格中各个四边形的距离(或其他)更改细节级别,因此您可以使用着色器实现ROAM类型算法。

除非您的GPU已经负载很重,比如复杂的光照和阴影算法,并且CPU负载很轻。在这种情况下,即使曲面细分本身需要更长时间,在CPU上进行曲面细分也可以提供更好的系统性能。

你是哪个人?试试看吧!

(并且还要注意它根本不重要。现代3D系统非常快。)