细分曲面查看源代码讨论查看历史
细分曲面 |
中文名: 细分曲面 外文名: Subdivision surface 别 名: 子分曲面 学 科: 计算机图形学 |
细分曲面(Subdivision surface),又翻译为子分曲面,在计算机图形学中用于从任意网格创建光滑曲面。
简介
细分曲面定义为一个无穷细化过程的极限。它们由Edwin Catmull和Jim Clark,还有Daniel Doo和Malcom Sabin在1978年同时引入。在1995年之前该方法没有什么进展,直到Ulrich Reif解决了细分曲面在特殊点附近的行为。
最基本的概念是细化。通过反复细化初始的多边形网格,可以产生一系列网格趋向于最终的细分曲面。每个新的子分步骤产生一个新的有更多多边形元素并且更光滑的网格。
细分方法
有几种细化方案:
Catmull-Clark是双三次B-样条的推广
Doo-Sabin是双二次均匀B-样条的推广
Loop 是二次三角形box样条的推广,由Charles Loop发明。(可以用于三角形网格)
蝶型,因为该方案的形状得名
中边(Midedge)
Kobbelt 是变分法子分方法,它试图克服均匀子分的缺点。
优点
在主要的建模软件中,细分曲面建模现在比非均匀有理B样条(NURBS)建模更为流行。因为它们有很多优点:
适用于任意拓扑结构
数值上稳定
实现简易
局部连续性控制
局部细化
关系
B-样条曲线可以细化:他们的控制点串行可以细化而迭代进程收敛于实际曲线。这对于曲线来讲毫无用处,但是它推广到曲面就产生了细分曲面。
细化进程
插值过程在保持原有定点不动的情况下插入新的点。
细化过程在子分的每一步插入新的顶点并移动旧的定点。
特殊点
Catmull-Clark细化方案是双三次均匀B-样条的一个推广。曲面的等价于一个4x4控制点格点的每一部分代表一个双三次均匀B-样条片。曲面细化在控制点价(相邻点个数)等于4的那些区域很容易进行。定义价不是4的定点的细分曲面曾经很困难;这样的点称为特殊点。类似的,在Doo-Sabin方案中的特殊点是价不是3的点。
多数方案在子分过程中不产生新的特殊点。
细分曲面简介
应用细分曲面做三维模型的原型设计非常的方便。通常只需要两个步骤,先创建出模型的大致轮廓,然后设置需要切割的点线面。比如这个桌子模型,先创建出它的轮廓模型,看起来非常简单,然后设置哪些点线面需要切割。感兴趣的朋友可以到三维公园去逛逛,那里有大量的细分曲面,而且还提供了在线细分建模的工具,非常容易上手。
细分曲面的核心就一个点:细分规则。不同的细分规则,生成的细分曲面外形是有区别的。常见的细分规则有Catmull-Clark细分,Doo-Sabin细分,Loop细分等。具体的细分规则可以参考教科书或者相关论文。
上面我们讲了,细分曲面可以应用于原型设计。主要特点是上手简单且表现力也很丰富。另外,一般的工业设计软件常用的曲面表示是样条曲面(分段多项式表示的曲面),这属于一种连续的信息表示,用于生产制造时,需要对曲面进行离散化。比如3D打印制造,它的输入就是一个网格。细分建模,可以直接得到网格,不需要样条曲面这种中间格式的表示。
在显卡上,也有细分曲面的应用。在游戏场景中,由于实时性的要求,网格的面片数量要求要尽量的低,但是,网格少了,模型的细节也少了。为了尽可能的提升网格的数量,显卡渲染流水线中加入Tessellation模块,这个模块直接在硬件上对网格进行了细分。
细分建模产生的网格,其面片分布非常的规则(regular)。规则的网格不管是用于几何处理,还是用于有限元计算,都有非常好的性质,比如计算稳定性。另外,细分网格表示的数据量非常小,很适合于网络传输。[1]
参考来源
- ↑ 细分曲面简介(subdivision surface),csdn博客,