着色器细分与算法细分的区别

3

在OpenGL 4.0中,增加了着色器细分支持。 在性能方面,基于图元的细分和VAO顶点预加载有什么区别? 所谓的VAO顶点预加载是指将所有顶点数据加载到VAO中,并在保留细分表面于RAM中的同时进行渲染,而不是通过着色器管线动态创建细分表面。


1
任何给出的答案都将与平台和实现相关。那么“vao顶点预加载”是什么意思? - Nicol Bolas
1个回答

4
答案是“这取决于情况”。
如果你有一堆网格的控制点(Bezier、NURB、Catmull-Clark等),在经典OpenGL中,你需要在CPU上对这些控制点进行细分,并将三角形存储在VAO集合的顶点缓冲区对象中。但是在OpenGL 4中,您可以将控制点传递给VAO,作为GL_PATCHES渲染,并且控制和评估着色器将生成三角形。
如果控制点网格是静态的且很少更改,则CPU解决方案更好,因为您只需执行一次细分并存储结果,而不是每帧重新计算完全相同的细分。
如果网格发生变化,则GPU解决方案将更好。从CPU复制新的控制点到GPU会更快,因为数据量较小,而且GPU可以并行地进行细分,因此速度更快。GPU端的细分现在可以通过距离(或其他方式)在网格内的单个四边形上更改细节级别,因此您可以使用着色器实现ROAM类型的算法。
除非您的GPU已经被复杂的照明和阴影算法等重载,而CPU轻载。在这种情况下,即使细分本身需要更长时间,CPU上进行细分也会提供更好的系统性能。
哪种方法适合您?试一试!
(还要注意,这可能根本不重要。现代3D系统非常快速。)

2
我倾向于认为,假设细分主要对于变化的几何体有优势的观点是错误的。细分允许在需要详细信息的地方进行细节处理,并防止在远处出现大量微小(大小为1-2个片段或更小)的三角形,这些地方您不需要也不想要详细信息。它还将ALU与带宽交换。 ALU丰富且不断增加,而带宽有限且增长缓慢。因此,在实际上每个方面中,细分都是双赢的。 - Damon

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