使用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系统非常快.)