大家好,我是顺亿,今天咱们来聊聊网格细分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. 参考资料
- Mesh-Subdivision(Github)
- loop曲面细分算法c++实现
- Doo-sabin曲面
- 细分曲面Catmull-Clark Subdivision算法
- 【图形学实验】Loop Subdivision与Modified Butterfly Subdivision
- 改进的蝴蝶算法详细介绍
- 三维网格细分算法(Catmull-Clark subdivision & Loop subdivision)附源码
好了,今天的内容就到这里,希望对大家有所帮助。我是顺亿,关注趣航编程网(www.vqhf.com),了解更多编程知识。
