通俗讲解曲面参数化(三角网格参数化)是怎么做的

曲面参数化(三角网格参数化)

曲面参数化,平面参数化,表面参数化,三角网格参数化,Surface Parameterization,Planar Parameteriazation,Mesh Parameterization。

上面有这么多的名字,容易看得人糊涂。所以先说一下这篇文章讲的曲面参数化是干嘛的,是找到一个将三维表面或者三维物体压成一张展开的二维平面的方法。如果这是你想了解的内容,那就是找对了方向。


1.曲面参数化的用途

曲面参数化,这个词从字面上看还以为是为曲面找到一个或者一组公式来表达。其实了解完后觉得应该将“参数化”理解为,找到三维面到二维面的映射,作用对象是三角网格曲面,对三角网格曲面进行展开(展开指参数化),得到结果是从拓扑、角度、三角形面积等上逐一对应的二维平面。

将三维面展开到二维面,这就有许多用途了,最最最常见的用途就是做纹理映射(贴图映射)。

一张贴图是二维的,要把它贴到三维网格面上,可不是像现实中在贴图背面沾点胶水然后一手拍在网格表面上就行的了。在计算机上是需要找到贴图上每个颜色点应该贴到网格面上具体的一个空间坐标点的,而作为中间媒介的就是参数化得到的这张展开的二维面。用下图来说明:
在这里插入图片描述

不过能看到本文的应该都知道曲面参数化能干嘛,关心的是曲面参数化怎么做,所以作用就不多说,下面开始说怎么做。


2. 曲面参数化怎么做

先把参数化方法分成两大类,一类是固定边界方法,一类是自由边界方法。用下图理解:

在这里插入图片描述
自由边界和固定边界的区别很明显,就是参数化后模型的边界是否对齐圆形或正方形的边界。是否固定都会有各自的较优用途,例如我要做纹理映射的话,我的纹理贴图就是一张正方形图片,那我选择与正方形同胚的方法展开三维模型成正方形,那将纹理对应起来会更保真,大致就是这样的考虑。

那问题来了,模型的边界哪来?

如果是一张三角网格曲面,那本身曲面就会有边界;如果是一个封闭模型,那就自己去切割网格,切割线就作为展开的边界。切割的案例如下:
在这里插入图片描述


3.固定边界方法——凸组合方法

先说重心坐标这个概念,先看图:
在这里插入图片描述
已知三角形的三个坐标A,B,C。其内部有个点P,P是任意一点,都可以用A,B,C三个点表示,也可以说是能够通过A,B,C三个顶点插值而来。反正就是要找出w1,w2,w3三个权重值就行了。(注意:P点在内部,因此三个权重值相加等于1,而且权重值要求是非负数,这才能让权重w是唯一解。这也叫凸组合。)

反过来就是说如果知道权重值是多少,那么就能求出唯一的P点坐标

这里的权重是计算内部划分的三个三角形的面积比例来确定的,而这三个权重值就是点P的重心坐标。当然这里P点任意指定,坐标是已知的,因此能算出内部小三角形的面积。三个权重值对应w1,w2,w3三个未知数,然后按算面积比例去列方程组,再加上w1 + w2 + w3 = 1 这条去解方程组就行了。

以上是由重心坐标引出的凸组合的概念,P可以被邻接顶点表示。下面我们开始想做的就是用边界的顶点去表示内部的顶点。

把这个概念延申,上面是计算单个三角形内部点的凸组合,那下面开始多边形的,假如你面对的是一个网格的话,看下图
在这里插入图片描述
P的坐标也是任意给定,而且他的邻接顶点的坐标都是已知数,现在就要求P点的ABCDEF的凸组合,即邻接的权重,你觉得能求吗?

当然可以求,本质还是: 
P = w1 * A + w2 * B + w3 * C + w4 * D + w5 * E + w6 * F
而且 w1 + w2 + w3 + w4 + w5 + w6 = 1
只要有合适的权重计算方法,就能算出来

那再延申一下,再复杂点呢:

在这里插入图片描述

这回出现了P和Q两个内部坐标了,能解吗?——能

需要注意的是,要表示P点坐标,只需要它邻接的所有点,也就是上图中的C,D,E点是对P点没有直接贡献的,非要把C,D, E点列入P点的凸组合的话,那么这三个点对应的权重w都是0。

所以要区分清楚:上面这个图分为两个部分,分别是P和Q的两个凸组合。
P点的邻接点是Q, F, G, H, A, B——组成一个求P的凸组合,其中出现一个内部点Q
Q点的邻接点是P, B, C, D, E, F——组成一个求Q的凸组合,其中出现一个内部点P

所以可以用Q的凸组合代入到P的凸组合中求解。

看看再复杂点的下图:
在这里插入图片描述

这回怎么去表示P,Q, R的凸组合,是不是感觉一目了然啦!

根据上面介绍的归纳一下特别,是不是知道了边界点的坐标和内部顶点的坐标,其实可以去求内部顶点是怎么样被外部顶点插值的,也就是权重,重点就是知道权重怎么去算出来就行了,即算权重的方法。算出来权重,所有内部顶点都能被边界顶点通过权重去表示。

所以归纳成公式就是:(这是将方程组中的内部顶点全部挪到了等号左边,边界顶点挪到了等号右边)
内部顶点 = 所有的(边界顶点 * 权重) (若边界点与内部点不相邻,则权重值 = 0)

那公式就是:公式中的符合是指所有的内部顶点,所有的边界顶点和对应的所有权重,该公式展开来看实际是个方程组。并非指单个顶点的计算。
在这里插入图片描述
这条公式,你看网格曲面参数化论文文献的时候,必须会看到的公式,因为这就是参数化的主公式。

(重要)而网格曲面参数化的情况则与上面的求解例子反过来:已知的是权重,未知的是内部顶点坐标,现在要利用边界点坐标去算出内部点坐标,即公式等号右边的内容是已知的。

那把情况放到实际情景中,看下图:也正式开始讲固定边界参数化方法
在这里插入图片描述
左图是一张三维网格曲面,目的是展开成右图的二维平面。是不是感觉有点思路了。

左图的全部坐标信息都已知,意味着你只要有合适的邻接点权重计算方法(例如上面介绍的重心坐标方法),就能把每个内部顶点的邻接权重都计算出来。

先不讨论权重的计算方法。
现在如果要计算得到与圆盘同胚的参数化平面,即右图。首先应该要算出圆盘的边界点(与圆盘同胚的意思就是曲面将展开成圆形),才能通过权重去算出圆盘内部的顶点坐标。

(重要段落)固定边界参数化方法,首先就是要确定圆盘的边界。最常用的方法就是提取出三维网格曲面的边界,计算边界的弧长总值(对应圆盘周长),然后计算每条边的弧长,再计算所占的比例,要的就是这个比例值。然后将曲面的边界顶点根据比例值映射到圆盘的边界上,当然是根据圆盘的周长乘上面的比例值啦。 总结就是利用弧长算比例在圆盘边上放置对应边界顶点。

在这里插入图片描述
再看参数化的主公式,现在等号右边的边界顶点值已知,权重值已提前求出,代入以上方程组,那么所有内部顶点就能求出来。

(意义)对网格参数化的研究,就集中在权重λ的计算方法研究上,由此衍生出许多的曲面参数化方法,基本可以看作是对权重λ的不同计算方法。因为算权重的时候,是在三维网格曲面上算,本身曲面自带曲率等影响因素,当把三维上得到的权重用在二维圆形平面上计算内部顶点时(理解为将三维点映射到平面上的过程),这些影响因素就会影响参数化平面的映射结果。因此研究不同的权重λ计算方法,目标是在映射的时候尽可能降低三角形的形变量,尽可能保持原三角形网格的形状与特征,尽可能减少参数化失真。

通过求解权重的比较经典常用的方法有(摘自CGAL):

  • Tutte Barycentric Mapping: 塔特重心映射定理
  • Floater Shape Preserve: Floater的保形参数化方法
  • Floater Mean Value Coordinates: Floater的中值坐标法
  • Discrete Authalic Parameterization
  • Discrete Conformal Map
  • Iterative Authalic Parameterization

4. 固定边界方法——最小化能量方法

这里介绍最常用的调和映射(其中一种最小化能量方法),或者说Harmonic参数化方法,理解就是找到一个能量方程,求解这个能量方程的极值,即最小化能量方程。

怎么找网格曲面的能量方程呢?

将网格曲面的每条边上加一根弹簧,网格曲面则视为一个弹簧系统。网格的弹性势能就是能量方程。
在这里插入图片描述

首先依然是先确定好边界顶点的位置,例如同样使用圆盘并使用前文说的方法确定边界顶点。

然后通过最小化三角网格的弹性势能来参数化内部空间点(同时计算所有弹簧边)。
在这里插入图片描述
E是指弹性势能(能量方程),而q(i,1)和q(i,2)是指第i条弹簧边的两个顶点在圆盘中的位置(属于未知数)。

k是调和映射的弹性系数。k的计算方式有很多种,例子之一是:
在这里插入图片描述

其中ɑ和β是第i条弹簧边所处的原来两个三角形种相对的两个夹角。

因此上面公式可以理解为:E是网格每条边的能量累加结果

接下来就是计算E最小化,也就是使得能量最小化:
在这里插入图片描述
结果得到网格曲面所有顶点映射到圆盘的坐标点。

这类方法属于最小化能量方法(调和映射只是其中一种),不同于上面的凸组合方法。但都是固定了边界。

5.自由边界方法

  • 11
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值