GAMES301课程笔记13-参数化应用3(曲面对应、高阶多项式映射)
这个系列是GAMES301-曲面参数化(GAMES 301: Surface Parameterization)的同步课程笔记。课程内容涉及曲面参数化的基本理论与问题描述、面向离散网格的参数化、基于基函数表示的连续参数化、共形参数化、曲面参数化的应用等。本节课主要介绍参数化技术的高级应用。
Inter-Surface Mappings
曲面对应(inter-surface mapping)的目标是建立两个曲面之间的一一映射关系。对于三角形网格来说,我们希望这样的映射关系不仅仅只是针对顶点的,还要考虑面到面以及边到边的对应关系。
与曲面对应类似的还有相容性网格(compatible mesh),它是指具有相同连接关系(拓扑)的两个网格。利用曲面对应技术我们可以把一个网格映射到另一个网格上,映射前后的网格构成了一对相容性网格。
曲面对应有很多实际的应用。最常见的是对网格进行变形(morphing),除此之外也可以利用曲面对应将一个网格上的属性传播到另一个网格上。
Algorithms
计算曲面对应时我们需要指定两个网格上一些对应点,称为corresponding landmark。这些对应点可以由用户进行指定,或是利用其它算法来自动匹配。
而我们的目标是计算一个低扭曲的双射。
计算这样的映射有很多不同的思路,在本节课中我们主要介绍基于参数化的计算方法。这类方法大致有三个步骤:
- 设置一个公共的基础域B;
- 通过参数化将两个网格分别映射到B上;
- 利用参数化的逆映射实现网格的对应。
这里需要说明的是公共域B不一定非要是参数平面,只要两个网格在公共域上存在一定的对应关系就行。
在很多情况下直接构造公共域是比较困难的。为了处理这样的问题可以利用一一对应的landmark来进行构造,具体来说首先将landmark连接成线然后利用landmark之间的路径来建立一一映射。在这些对应的连线上计算共同边界的参数化就将两个网格都映射到公共域上。需要额外注意的是共同边界的参数化可能无法保证不出现翻转。
这种算法的一大缺陷在于算法的效果取决于一开始路径的计算,为了处理这样的问题人们也开发了很多其它的算法进行处理。
High-Order Polynomial Mappings
High-Order Mesh
在本课程中我们基本只考虑一阶线性网格,但在很多领域高阶网格(high-order mesh)也有非常多的应用。
高阶网格的优势在于它可以更好地描述曲线边界,同时对于有限元分析等问题高阶网格往往具有更好的数值精度与求解效率。
High-Order Basis
Bézier basis
使用高阶网格时需要使用高阶的基函数来表示几何。对于多项式基函数,最常见的形式是Bézier基(Bézier basis)。实际上Bézier基等价于Bernstein多项式(Bernstein polynomial),在实际应用中一般会通过递归的方式来进行定义。Bézier基有很多优良的数学性质,包括非负性、归一性、凸包性以及端点插值等。利用Bézier基的递归定义可以方便地实现细分求值。
Lagrange Basis
另一种常见的多项式基是Lagrange基(Lagrange basis),它的特点在于基函数仅在指定的节点上为1而在其他位置为0。其他常用的基函数包括幂基(monomial basis)、正交多项式基(orthogonal basis of polynomials)等,当然这些多项式基都张成了多项式函数空间,可以通过线性变换来相互转换。
Elements
有了基函数后可以利用控制点来表示几何单元。类似于重心坐标,单元上\(\xi\)位置的函数值可以使用控制点与基函数的线性组合来计算。
Jacobian
与一阶线性单元不同的是当单元发生变形时单元内\(\xi\)位置的Jacobian矩阵不再是一个常数,而是一个关于\(\xi\)的矩阵,对应的行列式则为关于\(\xi\)的一个多项式。如果我们要求单元内部不发生翻转,则需要保证Jacobian矩阵的行列式在任意位置恒大于0,即多项式的最小值大于0。
High-Order Parameterization
高阶网格参数化的目标是把低阶的线性单元转换为高阶单元,从而得到更加光滑的几何表示。
具体来说我们需要把一个已知的一阶三角形单元\(t\)转换为高阶三角形单元\(T\),此时需要引入额外的控制点。
在很多时候一般还会先对\(t\)进行规范化获得一个标准的三角形,然后再把标准三角形映射到\(T\)上。此时\(t\)到\(T\)的映射可以表示为两个映射的复合。
Validity Condition
要判断整个复合映射的Jacobian矩阵行列式是否恒大于0首先需要把不同的基函数转换为统一的表示形式。
对于Lagrange基,\((\xi, \eta)\)位置上Jacobian矩阵行列式可以按照下面的方法进行展开。展开后要求行列式\(J(\xi, \eta)\)恒为正,此时可以求\(J(\xi, \eta)\)的驻点来进行判断。
Lagrange基的缺陷在于基函数在定义域内可以取负值,这给判断Jacobian矩阵行列式带来了困难。因此我们可以选择其它的基函数来进行处理。
Bézier基在定义域内具有非负性,因此只要保证基函数前面的系数非负即可。此时我们只需要保证控制点上Jacobian矩阵行列式满足相应的要求。
更进一步可以证明整个单元上Jacobian矩阵行列式的下界和上界分别为控制点构成的凸包以及三个角点中的最小值,这样只需要控制上界和下界就可以保证单元上无翻转。除此之外还可以通过对Bézier基进行细分来辅助判断。