Opengl es 如何在OpenGL ES着色器中实现Catmull-Clark细分算法

Opengl es 如何在OpenGL ES着色器中实现Catmull-Clark细分算法,opengl-es,shader,Opengl Es,Shader,我已经实现了在网格上运行的简单Catmull-Clark细分算法。但它是在CPU上运行的,只经过几次迭代,它就变得过于计算密集。我想解决这个问题的一个方法是用着色器语言重写它,然后在GPU上运行它 是否有相同的示例?如果要发射/创建新顶点,您需要在GPU上使用几何体着色器(细分)功能 我不知道目前支持OpenGL ES的消费类硬件是否能够做到这一点。Catmull–Clark是在面部被分解为基本体(点、线、三角形)之前完成的。例如,Catmull–Clark wikipedia页面显示一个立方

我已经实现了在网格上运行的简单Catmull-Clark细分算法。但它是在CPU上运行的,只经过几次迭代,它就变得过于计算密集。我想解决这个问题的一个方法是用着色器语言重写它,然后在GPU上运行它


是否有相同的示例?

如果要发射/创建新顶点,您需要在GPU上使用几何体着色器(细分)功能


我不知道目前支持OpenGL ES的消费类硬件是否能够做到这一点。

Catmull–Clark是在面部被分解为基本体(点、线、三角形)之前完成的。例如,Catmull–Clark wikipedia页面显示一个立方体正在变成一个球体,如果使用三角形面而不是方形面,则生成的形状将不是一个球体。这可能在Vulkan中使用补丁,但我不知道如何使用。要执行Catmull–Clark面(与面片不同)需要共享顶点,我不知道如何指定这种关系。而不是搜索相等的顶点,从而抵消任何性能增益

请记住,着色器的能力仍然非常有限,通过神奇地“用着色器语言重写”来解决与性能相关的问题肯定不总是一种方法。对于这个特殊的问题,你不会发现任何简单的着色器能够解决它(至少在ES硬件上不能)。可能有一些奇特的GPGPU着色器来进行catmull-clark细分,但这要么使用一些非常复杂的基于纹理的数据结构(如果我找到它,我会看看,我见过一次),要么使用一个非常特殊的重新划分(如几何体图像)。