着色器细分与算法细分

Ste*_*cil 2 opengl

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

小智 5

答案肯定是"这取决于".

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

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

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

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

你是哪个人?试试看吧!

(还要注意它可能根本不重要.现代3D系统非常快.)

  • 我倾向于说,对于几何变化来说,细分主要是一个优势的假设是错误的.Tesselation可以在您需要的地方提供细节,并在您不需要_并且不想要细节的距离内防止大量微小(1-2个大小或更小的碎片)三角形.它还用ALU交换带宽.ALU丰富且不断增加,而带宽有限且增长缓慢.就目前而言,细分在几乎每个方面都是双赢的. (2认同)