跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

网格细分Mesh Subdivision算法,你真的懂了吗?

大家好,我是顺亿,今天咱们来聊聊网格细分Mesh Subdivision算法,这可是三维视觉和图形学中非常重要的一个概念。

简单来说,网格细分就是将一个模型的面分成更多的小面,从而提升模型精度,让渲染效果更逼真。常见的网格细分算法有Loop、Butterfly、Modified Butterfly、Catmull-Clark和Doo-Sabin等。

1. 算法介绍

首先,咱们得知道,网格细分算法主要分为三类:只能处理三角形mesh的(Loop、Butterfly、Modified Butterfly),只能处理四边形的(Catmull-Clark),以及能处理任意形状mesh的(Doo-Sabin)。

这些算法都是以Midpoint为基础,主要区别在于对顶点位置的调整算法不同。

1.1 Loop细分(三角形网格)

Loop细分是由Charles Loop在1987年提出的一种对三角网格的细分算法。它将每个三角形一分为四,并对新生成的顶点和旧顶点进行不同的规则更新。

Loop细分有一个问题,就是过度平滑,多次细分后体积会收缩。为了解决这个问题,还可以添加对crease的处理。

1.2 Butterfly

Butterfly算法只对新插入的点进行处理,保持了原始的拓扑结构,因此不会体积收缩。它对新插入的顶点分了两种情况:内部点和边界点。

1.3 Modified butterfly

Modified butterfly算法是改进的蝴蝶算法,可以在任意的三角网格上生成G1连续的细分曲面。它主要修改了处理价不等于6的点,克服了butterfly方案在这些情况下表现出的尖点状伪影。

1.4 Catmull-Clark细分(任意拓扑网格)

Catmull-Clark细分是由Edwin CatMull和Jin Clark在1978年提出的一种可以对任意拓扑的网格进行细分的一种算法。

1.5 Doo-Sabin细分

Doo-Sabin细分是由Dainel Doo和Malcolm Sabin在1978年提出的一种可以对任意拓扑的网格进行细分的一种算法。

2. 对比

Loop只能用于三角形网格,Catmull-Clark可以运用于任意拓扑的网格。Doo-Sabin的计算效率不如Catmull-Clark。

3. 参考资料

好了,今天的内容就到这里,希望对大家有所帮助。我是顺亿,关注趣航编程网(www.vqhf.com),了解更多编程知识。

相关文章