【Mesh is Art】第一章 常见几何表示方法

第一章 常见几何表示方法

很多三维建模相关专业的学生在学习建模软件时常常会感到困惑,由于不了解三维建模中各种隐含的规定,缺乏三维建模的相关知识,常常误以为是软件的bug,最后往往变成了“国家一流软件安装与卸载师”,三维建模的学习过程也逐渐变成了“从入门到放弃”的过程。那么我们应该如何去学习三维建模呢?我们可以先从计算机中常见的几何表示方法开始,本节将讨论了计算机中不同的三维几何表示方法,了解这些方法可以对当前计算机建模软件的建模方式有一个宏观的认识,这有助于在完成设计或计算任务前选择恰当合适的软件进行使用和学习。当然,对于有些方法可能过于抽象,读者不需要完全理解,有一个大体的认识即可。

参数表达隐式表达


曲面通常有两种表示方法:参数表达 (Parametric representations)隐式表达 (Implicit representations)。根据《Polygon Mesh Processing》中的解释,参数曲面是由向量值的参数化函数来定义的,它将二维参数域映射到了曲面上。而隐式曲面是由一个方程来定义的,方程左侧为表示曲面上点的坐标的三维参数的标量表达式,等式右边为0。为方便理解,我们以一个平面上的单位圆为例, 它的参数表达为

隐式表达为

通俗的理解是,参数表达在曲面上的点都可以找到明确的坐标定义,而隐式表达不会显式地表达明确的点的位置,而是去表达这些点的位置所满足的关系,它是通过点坐标不同分量之间的关系来定义的。例如在单位圆示例中,参数表达直接表示了所有点的坐标,即,而隐式表达只表示出了两个分量所满足的关系,如果我们想要知道每个点的坐标,需要通过给定的关系来计算得到。

由于两种表达方式的定义方法不同,它们也有着不同的特性。由于参数表达直接记录了点的坐标,因此是一种很直观的表示方法,计算机可以直接读取坐标来显示出几何。此外,由于它是通过参数方程来表示曲面的,所以很多在曲面上的三维问题可以被转化成二维参数域上的问题。但是判断位置关系等问题对它来说十分棘手,需要通过一些算法来解决,计算成本较高。例如要想判断一个点是否在物体内部,对于参数表达的曲面来说是一件成本较高的事。然而这对于隐式表达就会十分容易,因为它可以直接将点的坐标代入到方程中,通过计算即可知道该点与物体之间的位置关系,当然,隐式表达的缺点就是表达不直观,仅根据表达式我们很难知道它所表示的物体,尤其是对于复杂几何,其显式地表现出几何的成本过高。因此两种表示方法各有优劣,我们需要根据实际需求和两种表示方法的特点来选取成本较低的表示方法。下面我们来逐一介绍常用的几何表示方法。

参数表达 隐式表达
定义 由参数方程定义,明确地表达了点的位置 由隐式方程定义,定义了点坐标中不同的分量所满足的关系
优点
1. 表示直观;2. 方便将三维问题转化为二维参数域上的问题
求交等问题成本更低
缺点 在求交等问题上成本过高 表达不直观

参数表达方法


点云

让我们从相对容易理解的参数表达开始入手,通常在描述一个三维模型时,最基本的描述方式是使用点去描述,但是要想表达出一个三维模型,需要大量且密集的点,这些点称之为点云 (Point Cloud) 。三维空间中一个点由三个方向的坐标构成,通常记作 (x,y,z),因此,点云可以被视作是一堆点的集合,存储时即可用一系列 (x,y,z) 坐标来表示。
注意

  • 描述三维模型的点云数据是无序排布的,这意味着点云在三维空间中,仅表示一系列点,点与点之间没有任何联系。
  • 点云是表示三维几何模型中最简单的方法,它可以表示任意类型的几何物体,代价是必须拥有足够密集的点云信息才能避免物体失真。
  • 点云通常是由三维扫描得到的,三维扫描仪通过记录空间中被扫描物体的点云信息,再使用表面重建算法来得到一个完整的三维扫描模型的。因此,点云通常会被转化成网格来做后续处理


样条曲面

在当今的CAD软件中,**样条曲面 (Spline Surfaces) 是最常用的表示方法之一,尤其是在机械、工业设计等领域,对曲面质量要求较高的行业中应用广泛。样条曲面表达一般指非均匀有理B样条 (NURBS),**它是由分段多项式或有理B样条基函数来描述的。
NURBS建模可以使用户设计出质量极高的曲面,但是对于一些较复杂的几何形体,它需要通过多张曲面拼接来实现,为了保证曲面质量,用户需要处理大量由拼接引起的曲面连续性问题,这带来了高昂的建模成本。另一个缺点是,添加更多顶点操作需要通过分割参数域来实现,这使得曲面的局部修改与设计变得相对困难。对于NURBS建模的更多细节,可以参阅[Farin 97,Piegl and Tiller 97,Prautzsch et al. 02]。

多边形网格

在CAD软件中,除样条曲面表达外,另一种被广泛应用的三维模型表示方法就是多边形网格 (Polygon Mesh)。它通常是指由三角形或四边形拼接而成的几何模型,几乎任何几何形状都可以通过拆分成无数三角形或四边形面片来表达。由于网格在图形学领域被广泛研究,各种处理算法层出不穷,因此它已经变成了当前图形学最普遍的图形表示方法。无论是游戏场景建模、概念设计建模还是分析与模拟,都是通过编辑和处理网格单元来实现的。

最基础的网格数据结构将网格所描述的信息分成了两个部分:几何信息 (Geometry Information)拓扑信息 (Topology Information) 。几何信息描述了网格上的顶点的坐标,拓扑信息描述了网格上的顶点的连接关系
图2展示了一个网格模型的实例,左侧网格模型上的顶点按照顺序标记了它们的索引 (Index) 。右侧几何信息中,按顺序描述了每一个顶点的三维坐标,例如0号顶点的坐标为{-10.834683, 19.656748, 0},由于这是一个平面网格模型,因此Z坐标均为0。拓扑信息描述了每一张网格面由哪些顶点构成,其中T表示三角形 (Triangles),Q表示四边形 (Quadrangle),例如T{0; 2; 1} 描述了第0张网格面片为三角形,它是由第0、2、1号点按顺序构成的三角形。

细分曲面

细分曲面是一种通过粗糙网格来控制的

References

[1] Botsch, M., Kobbelt, L., Pauly, M., Alliez, P. and Lévy, B., 2010. Polygon mesh processing. CRC press.
[2] Piegl, L. and Tiller, W., 2012. The NURBS book. Springer Science & Business Media.
[3] Farin, G., 2014. Curves and surfaces for computer-aided geometric design: a practical guide. Elsevier.