1.几何概论
通过图形学建模表示现实生活中的各种物体,要解决的第一个问题就是如何定义物体形状,而这就涉及到了几何(Geometry)。如下图所示,各种各样的玻璃水杯、车子上的不同部件、水花四溅的模拟、病毒的微观结构等这些几何形状。
那么如何通过几何方法表示物体呢?对此,图形学中定义了两种几何表示方法。即隐式几何表示(Implicit Representations of Geometry)和显式几何表示(Explicit Representations of Geometry)。
1.1隐式几何表示
隐式几何表示是一种使用数学关系式来描述几何形状的方法,而不是直接描述其顶点和边界等元素。如下图所示,定义一个函数f(x,y,z)=0,只要找到任何一个点满足这个条件,就表示这个点是物体表面上定义的一点,然后找到所有的点,就可以把物体表面画出来。
隐式几何表示用来描述表面都有哪些点是相对困难的,也很不容易看出来形状,如下图所示。
但是,隐式几何表示用来判断一个点是否在表面内外是容易的。如下图所示,将一个点带入公式,如果得到结果是0表示在表面,如果是负的表示在物体内,如果是正的表示在物体外。
1.2显式几何表示
显式几何表示是一种直接或间接(通过参数映射的方式)定义点、线、面等元素集合的方法。在显式几何表示中,各元素的位置通常由坐标值直接给出,各元素之间的关系通常由数据结构来表示。比如,下面的关系式通过U、V参数映射的方式间接定义了点的集合。
显式几何表示只要带入每个U、V的值,就能很容易找到物体表面的形状。如下图所示,同样一个圆环,用显式几何表示法表示。
但是,显式几何表示判断一个点是否在表面内外是困难的。如下图所示。除非是已经知道这个式子定义了是某个单位球。
综上,不同的表示法有各自的优势和劣势,要根据需要使用哪种表示法。
2.隐式几何表示分类
隐式几何表示的常用技术有以下这些。
- 代数曲面(Algebraic Surface)
- 构造实体几何(Constructive Solid Geometry)
- 距离函数(Distance Function)
- 水平集(Level Set)
- 分形(Fractals)
2.1代数曲面
代数曲面是通过一组参数方程定义的曲线和表面。这种方法表示非常的不直观,很难看出几何形状。下图所示,这些几何体就比较适合使用代数曲面来表示。
它适用于一些简单的,可以使用数学关系式表示的几何体。一些结构复杂的几何体很难描述,比如要描述一头奶牛。
2.2构造实体几何
构造实体几何(CSG)是通过布尔运算来组合不同的几何体。下图所示。
一些复杂的几何体可以通过简单的几何体来组合构造。如下图所示。这是非常常见的操作,在很多建模软件里都支持这种操作。
2.3距离函数
距离函数描述空间中任何一个点到几何体表面的最小距离。如下图所示,两个球通过距离函数进行融合(Blend)。
一种特殊的距离函数,符号距离函数(Signed Distance Function),其以空间中任意一个点作为输入,根据距离函数的返回值,可以进行判断:
1.当距离函数的值大于 0,表示点在几何体外部。
2.当距离函数的值小于 0,表示点在几何体内部。
3.当距离函数的值等于 0,表示点在几何体表面。
可以混合两个任意距离函数。
距离函数可以应用到几何和几何之间比较圆滑的过渡,如下图所示是一个距离函数的例子。
2.4水平集
对于表面规则的几何体,我们可以使用距离函数来表示。对于表面复杂的几何体,距离函数难以适用,此时,我们可以使用水平集来表示。
水平集的核心思想与距离函数一样,区别在于距离函数使用通过输入空间点来计算该点到几何体表面的距离,水平集则存储了一系列距离值,我们可以通过插值法找到距离为 0 的位置,拟合出一条曲面用于表示几何体的表面。如下图所示。
这种方式类似地理上使用的等高线,描述一个函数在不同位置有相同的值,对于水平集来说关注函数在什么地方等于0。
通过水平集可以把水滴与水滴之间融合之后形状表示出来。
水平集不仅可以定义二维空间的格子,还可以定义三维空间上的格子,可以与三维纹理结合。
2.5分形
对于自然界中难以控制的形状,并且局部部分和整体非常相似,就可以用分形表示。如下图所示是自然界中的分形例子。
分形,类似于递归,即局部和整体的形状相似。如下图所示。分形通过迭代函数系统(IFS)来生成。IFS是一种迭代的过程,该过程将函数反复应用于某个起始点或起始数据。这些函数通常是缩放、旋转、平移等操作,同时保持自相似性。
分形由于变化频率高,对渲染是一个非常大的挑战。
2.6优缺点
隐式几何表示法优缺点如下。
优点:
1.通常表述容易,有利于存储(例如一个函数)。
2.某些查询很容易(点在表面内外,到表面的距离)。
3.适用于光线和表面的相交(后面内容)。
4.对于简单的形状描述精准(无采样误差)。
5.易于处理拓扑变化(例如流体)。
缺点:
1.难以模拟复杂的形状(比如奶牛)。
2.很难知道这个面上有哪些点,很难看出式子表示的是什么形状。
3.显式几何表示分类
显式几何表示的常用技术有以下这些。
- 点云(Point Cloud)
- 网格模型(Polygon Mesh)
3.1点云
点云是显式几何表示中最简单的技术,其核心思想是使用大量的点来表示几何体的表面。
点云优点是可以轻松表示任何形状,适用于大型数据集。由于点云的缺点很明显,内存占用大,因此一般会被再次转换成多边形网格。
点云的密度越高,几何体的精度越高,如下图所示,底部点云较稀疏,上不点云密集。
3.2网格模型
网格模型是图形学中最常用的几何表示方法,它存储顶点和多边形(一般是三角形或四边形)。这种形式非常容易处理、模拟、采样,但是也拥有更复杂的结构。
在 3D 建模中,我们经常会用到 .obj
格式的模型文件,其本质上是一个文本文件,记录了顶点、法线、纹理坐标、连接关系,由此构成几何体的形状。如下图所示,是一个立方体结构的表示。
其中,v表示顶点坐标,vn表示法线(多了两条是因为建模冗余),vt表示纹理,f表示面。比如 f 5/1/1 1/2/1 4/3/1
表示三角形面是由第 5、1、4 个顶点组成,三个点的纹理坐标是第 1、2、3 对应的纹理坐标,面的法线是第 1 条法线。
3.3优缺点
显式几何表示法优缺点如下。
优点:
1.表示形状容易。
缺点:
1.难以判断点是否在表面上(或内、外)。