GAMES 图形学系列笔记(四十五)

GAMES301-曲面参数化 - P3:Lecture 03 无翻转参数化方法-初始存在翻转 - GAMES-Webinar - BV18T411P7hT

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

啊那个欢迎大家来到那个呃盖茨301那个第三讲啊,就是前面我们已经呃完成了两讲,今天我们进入第三讲,那么今天第三讲的题目是无翻转参数化方法,然后针对的初始是存在翻转的这样的一个初始啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么首先我们来看一下我们这个问题的定义啊,就是前面我们之前介绍了四个方法,一个是这个to this bed,它其实是通过一个凸组合的方式把这个曲面映射到2d上,那么它是可以有理论保证的。

其实是最后能够保证最后的解一定是没有翻转,并且是那个扭曲比较呃,这你明显是global injective,但是呢它的扭曲会比较高,所以我们后面又介绍了三类方法。

这类三类方法都是在通过一定的优化算法去减小扭曲,比如说这个a b f就是要让这个呃参数化得到的那个三角形的角,和这个输入库的网格上的角是尽量的接近,那么这样的话它就体现出来了是一个相似变换。

那么呃这个lsm它是从这个相似矩阵的这个角度出发对吧,可以从可以从这个相似角度,相似矩阵这个角度去理解这个lsm,它其实描述的是这样的一个矩阵,离这个相似矩阵远近的这样的一个程度啊。

接下来最后介绍的是这个a p对吧,l a p描述的其实是这个映射的,假货币矩阵与这个旋转矩阵的之间的距离,优化的是这样的一个呃目标函数,但是呢呃优化这样的目标函数呢。

呃这个a b f l c m a r a p这三类方法虽然通过一定的优化,它可以去降低的扭曲,但是呢针对一些比较极端的case,它其实会产生一些翻转的三角形,那么我们来看一下这个左边这个例子。

左边这个例子呢它其实是一个它的原始的这个三维的模型,其实是一个8年的那个头部,那么巴里的头部呢,它的两个耳朵是这样伸出来的,如果你强行用这样的a r a p去做这样的参数化的话,你可以发。

你可以看到这个地方它其实是产生了比较严重的这样的一个两个,耳朵的部分,其实是产生了一个比较严重的这样的一个翻转,就是你就会最后发现这个黄色的三角形,其实代表的就是这个翻转翻转意识。

也就是说它这个地方的三角形的朝向,跟其他大部分地方的三角形的朝向是相反的,那比如说像现在这些这些其他的这些地方,那些白色和红色的这个三角形,它的朝向可能朝正z方向的,那这个黄色的三角形就是朝负z方向的。

那么在这样的一个情况下,如果你再去做一个纹理的贴图的话,你就会发现这里面的纹理贴图他其实已经没有了,这样的棋盘格的这种现状的结构,它已经完全乱掉了啊,它它这个现状的结构都没有了。

这里面已经完全是混混乱掉了,那么这个是一个翻转的这样的一个一个翻转的这样一个映射,那么我们希望呢去得到的是这个右边这样的一个呃,右边这样的一个参数化,那么它虽然这里面的这个棋盘格其扭曲还是比较大的。

但是大家可以看到这里面的棋盘格的这个线,还维持着这个棋盘格的这个结构,对吧,那么这样的三角这样的参数化呢,其实就是一个没有翻转的,右边的来看,就是一个没有翻转的这样一个三角形啊。

那么现在我们的目的呢就是要去呃从这个呃,使得我最后的参数化是没有翻转的,那么我们今天介绍的这个介绍的这个方法呢,就是从这个怎么从这个左边这样的一个case去恢复出来,右边这样的一个case呃。

这个什么意思呢,就是说我们现在的初始化其实可以来自于这个a b f l s,c m l a p这样的一些方法,一些传统的方法,但是这些方法呢可能会产生诸如这个左边这个图所示的,这样的一些翻转的三角形。

那么我们就要去设计一些设计算法,使得这些反转的三角形去除掉,变成右边这样的一个结果,使得它所有的三角形的朝向都是一样的,所有三角形的朝向都是朝这个正z方向或者负z方向啊。

就是所有的三角形朝向都是要一样的,那么现在的核心问题就是说我们怎么去设计呃这样的一个算法啊,使得它的左边可以变成右边啊,这是我们现在这个这一讲内容要呃去介绍的介绍的方法。

那么那我们上节课还讲到那个to this ebedding对吧,就是也是给故事给大家的作业,它其实是可以从理论上保证初始是没有翻转的,或者说初始是没有啊,true是没有翻转的。

并且是globally jective的,那么呃但是它的扭曲会比较高,那么其实我们也会呃最近这几年的这个学术研究,也是在重点研究怎么去减少这样的一个扭曲,那么减少这样一个扭曲的话。

这个方法我们是明天讲的,那么我们今天继续啊,就是说现在我们的问题啊,大家再回顾一下,我们的问题是输入是有翻转,然后现在我们希望设计方法把这些翻转的三角形给去除掉,得到右边这样的一个没有翻转的三角形好。

那么我们今天介绍的第一类方法是基于这样的一个投影的方法呃,这类方法的核心思想其实很很简单,因为你既然左边这个三角形,它其实不是你那个你是那个初始的三角形,存在一些翻转的三角形。

那么也就是说这类方法的核心思想是我能不能把这些呃翻转的三角形,把这些翻转的三角形投影到这样的一个没有翻转的,这样的一个映射空间里面去,就是说我能不能通过这样的一个投影的方式去把它给嗯。

你去把它给那个完成这样的没有翻转的这样映射的这个计算对吧,那么这个地方如果大家可以想一下,如果我把这个整体这个三角形网格,比如说我把整体这个参数化网格都当做这个投影的对象。

那可能这个投影起来会就所有的三角形,比如你考虑1000个三角形,你都要同时投影到这个flip free mapping space,其实是很困难的事情,对不对。

那么也就是说其实这个地方的这个真正在去做这个投影的时候,它其实是投影的是这个每个元素,就我们其实知道,比如说每一个三角形,比如当前一个三角形,我要把它投影到这个没有翻转的case,其实是相对容易的。

对不对,但是你投影一个三角形的话,其实你的这个呃,你把比如说你把一个三角形呃投影到这样的一个没有翻转的情况,其实是很容易的,对不对,你你比如说现在有一个三角形翻转,它的朝向是朝父类方向的。

你要把它呃弄成正z方向,但其实很容易,比如说你现在这个三角形就是一二,那么这样的话它的朝向是朝负z方向的,你要把它改成正对方向,你只要把这个点移到这边来,能变成123,就变成正对方向了。

所以说你要把一个三角形重复从一个呃改变它的朝向,其实通过这样的投影其实是改变他的头像的朝向,其实是很容易的,其实三角形与三角形之间可能就是没有连在一起了,就是说三角形和三角形之间,那么做完以后。

三角形和三角形之间其实没有一些呃,就相邻三角形之间的那个连接性被你破坏掉了,那么所以说呢我们就需要有一部叫做全局部。

就global step去minimize这个使得它那个优化出来的这个distance啊,是其实是优化的,是什么,优化的是你这个呃优化一个三角形,使得这个三角形尽量的去接近你这个投影的三角形对吧。

那这个思想其实是跟这个呃a r a p的思想其实是一样的,a r a p的话,其实只不过是把每个三角形都投影到它的那个最优的那个,旋转矩阵上啊,是最优的旋转的那个三角形上呃。

呃然后呢再去minimize这个三角形,使得它离这个旋转最近的这个三角形对吧,那么所以说这个这个基于这个投影的这一类方法,其实跟a r a p的这个思想其实是一致的。

就是我把每一个三角形我可以投影到一个没有发展空间,然后呢是再去优化这个三角形到这个投影空间的这个最近距离,比如说这个画面下面画的这个灰色的区域,就是这样的一个呃。

flip free这样的mapping space,然后呢这个蓝色的点就是这个翻转的三角形,那你其实每次可以给他找一个比如投影,投影到这个地方,指引到这个空间的边界上,就是一个没有翻转的三角形。

然后呢你去minimize,接下来你这个global这一步,你其实是minimize这个点到呃这个新的点到这个点的最近点距离对吧,那么这样的话你可以产生一个新的点,那这个点有可能还在外面。

然后你接下来还要继续迭代,那么对于这样的一个全局部的话,它有两种方式,一种方式呢我就直接非常了,当我就直接minimize这个绿色的点,就是这个新产生的这个三角形与这个我最近点的这个投影。

他们之间的这样的一个欧式距离,作为我的这样的,或者说他们的一个某种范畴下的距离,作为我的这样的一个优化的目标,那么还有一种比较常见的呢,呃投影方在全局这一步的投影方式呢是这样的,就我优化出来这个点。

我把它限制在这样的限制在这个最近点投影的这样的一个切空间里面,就我可以把这个点看成是一个高,比如说我把三角形上的假货币矩阵可以看成是一个高维的空间中的点,那么我新产生的这个点。

我可以把它约束在这个这个点的这样的一个切空间里面啊,这是另外一种比较在global这一步比较常见的另外一种投影方式啊,这两种方式都是在学术圈都是有有相应的工作好,那么反正anyway。

这个投影的思想其实就是跟这个你可以认为就是跟这个local和global,就是之前之前讲的那个a r a p是差不多的啊,那么首先我们简单的来回顾一下这个事情,具体把这个东西变成一些公式化的事情啊。

首先是我们可以做一个s s d d对吧,就是上节课上节课我们就讲过了,那么就把这个讲话比矩阵放啊,把它分解成呃旋转正乘上旋转正,而旋转正乘上一个对角阵,乘上一个呃旋转证呃转制,那么中间这个矩阵s的话。

它其实是一个对角阵,这个对角阵呢它的最后这个元素可能是负的,那么如果它的这个甲壳币矩阵的行列式是小于零的情况下,那么这个其一值是负的,那么并且满足这样一个不等式,那么也就是说这个这个最小的这个特征。

最小的这个奇异值,它的正负号其实就代表了这个三角形有没有翻转,那么也就是说如果没有,如果是一个没有翻转的条件,那么其实应该是他的假货币矩阵是大于零的,那么甲亢b矩阵大于零的话。

其实等价于就是这个最后的这个奇异值要大于零,就相当于我们是s s b b分界里面的定义,那么我们同理,我们可以去定义这个conformal distortion,convey stortion。

其实是用的是这个最大的这个奇异值和最小的奇异值之比,对吧啊,这个地方为什么是三维哦,对不好意思,其实我们用的是这个3x3的3x3的这个呃假号比矩阵做例子啊,不是我们平时参数化。

如果参数化的这个地方应该是这个三,应该是二啊,不好意思,这个地方可能对,那么如果我们要去这个bd这个distortion,就是如果我们希望这个confirm distortion是有界的。

那么我们其实可以把它放在这个一和这个k之间,那么什么意思呢,首先我们来看一下这个西格玛i是西格玛i,一是会比这个西格玛i3 大的,对不对,那么也就是说如果西格玛i3 是大于零的情况下。

那么也就是说这两个比值一除应该是显然是大于一的,对不对,那么我们同理不希望这个conformal distortion太大,所以我们要给它加一个上键,那么所以说这个情况下,所以我们简单来看一下啊。

就如果现在我要让它没有翻转,那么其实也就是代表的是我要让他的假货币就sigmi 3是大于零的,那么sigma 3大于零,那么如果在这个sigma 3大于零的情况下,我我根据这样的一个扭曲的定义。

我总能找到它的最大值对吧,因为现在如果sigma 3大于零,那么也就是说它所有的confirmation stortion都是大于零的,那么大于零的情况下,我总能找到它一个最大值。

比如这个k这个k就是他所有的cfm的收益最大值,那么也是也就是说我只要是我一个没有翻转的一个映射,它其实就是一个bd的distortion的这样的一个呃confirm distortion对吧。

就肯定他的confirm disco肯定是有界的,我总能找到一个上界k啊,那么同理,如果是现在这个confirmation stortion邮件,那么也就是说他的所有的行列式。

把所有的那个可能性都是大于等于一,那么就是它是一个没有翻转的啊,所以说这个问这两个约束呢就其实就可以是一个等价的约束,于是呢我们就可以把原来的我们的优化问题就去计算没有翻转。

利用投影的方法去计算那个问题,我们就可以把它变成这样一个优化问题啊,这是那个假货币矩阵,就是一个呃2x2的,比如说这是一个参数化问题的话,那么或者说这是一个三维映射的问题的话。

那么这个地方是一个2x2矩阵或者是一个3x3的矩阵啊,那么这是一个假货币矩阵,那么这是一个它的,比如说我们在a r a p里面,这个地方其实就是一个旋转矩阵对吧,那么在我们这个地方的问题里面。

这个h i呢它是一个是属于这样的一个空间的,那么这个空间是什么呢,这个空间是一个有界conformal,就是一个保行保保角映射的倒角扭曲的这样一个空间。

那么也就是说它的confirm distortion,是在这样的一个满足这样的一个条件的啊,那么这是一个空间,那么我只要让我们的hr是属于这个空间内部的,那么这样的话我就能做到。

我其实就是要让这个兼爱通过投影慢慢的趋向于这个空间啊,那么当然最后这个条件是一些先行约束,比如说我要让某一些点啊,移动到一些指定位置啊等等这些额外的一些线性约束啊。

所以我们整个的优化问题就变成了这样的一个呃优化问题,那目标函数是要让这个假货币矩阵跟这个i尽量的接近,h i呢是属于这样一个bounded confirmation sociate space。

因为刚才已经讲过了,如果你的诶你的假货币矩阵都能趋向于这样的一个bounding the social space的话,那么他的所有的也就上小学之后,就算出来的这个映射也是一个无翻转的映射对吧。

那么当然注意啊,这个地方的变量有两部分,一部分是这个顶点的位置,还有一部分是这个hr大h2 ,这个大h2 其实是未知的啊,就跟我们这个a a p里面的那个旋转矩阵未知的是一样的啊,一部分是这个顶点位置。

一部分是这个hr这个矩阵啊,那么为了去求解这个问题的话,那么最常见的还是用这样的一个local global的一个思想,那么local一步就是说我固定这个顶点的位置和这个甲固定顶点的位置。

其实也就是说固定了这个假货币矩阵,然后呢再去求解这样的hr啊,就是求解这样的一个问题啊,这个问题是有解析解的,就这个问题去这个问题求解的时候,因为这个hi作为变量的情况下。

那么也就是说它跟其他的变量是没有关系的,那么这个时候你其实只要去不用把这个累加号就不用去考虑了,你只要考虑这个甲扣b i跟这个h2 之间的关系,那这个九点是有一个解析解的啊。

大家可以看一下之前的paper啊,嗯然后呢解固定这个h2 的时候呢,我接下来要去求解这个顶点位置,那么也就是说这个hr是固定的,那么我这个假货币矩阵的话,之前也讲过是关于这个u是一个线性的。

那么也就是说整体这是一个二次的能量,再加上一个线性约束,那么这个时候可以用拉格朗日乘子法,就直接把这个u给直接解出来了,对吧,呃但是呢这种local global的迭代。

在这个整个的这个整个的这个优化的过程中啊,它是一个一阶的方法,它的收敛其实是非常的缓慢的,就是very low的一个convince的一个有一个表现啊,所以说呢我们在这个具体的这个过程中。

那么从这个这个local global的方法来看呢,它其实可以描述成一个固定点迭代的固定点迭代的一个问题,固定迭代是什么意思呢,就是哎就是下面这个形式啊。

就是xk加一等于g乘上x k那么这个这个固定点迭代对吧,就是你把这个xk然后映射到了这样的一个x k加一,然后呢x k加一再带进去会映射到一个x k加二这样一个固定的迭代,那么收敛的情况下呢。

就是x星迭代成g x星,这是一个固定迭代的这个定义对吧,如果你最后收敛了,那么最后这个x型呢就是达到了最优值,或者说达到了这个呃是非线性方程的这个根对吧,因为固定迭代一般呃比较用的比较粗。

多的是那个非线性方程的求根啊,那么其实也可以用来这样解优化问题,那么可以现在的优化问题呢,就是也也是可以来描述这样的优化问题啊,那么对于这样的优化问题啊,对于我们上面这个问题而言。

这个地方的g呢其实就是一个投影,再加上一个求解线性方程组的过程,那么这两个都是有解析解的,所以说这个g呢也是一个显示的表达式啊,所以g乘上x k。

那么所以说我可以把这个原来的这个一步的local global这样迭代,描述成一个固定点迭代的一个过程啊,那么固定迭代的话,在这个以往的这个早年的这个研究中,它其实就是说你每次这个迭代的时候。

如果logo logo,那我就是用这样的一个算子对吧,用一个投影嗯,就是这个local部的投影,再加上globe的解方程去得到这个,去得到这样的一个新的这个呃顶点呃,新的这个变量对吧。

他这个dk加一部的这个变量不是直接由这个迭代数据产生的,它还是有这一步,这一步就是这个xk加一,有这个不跟前面的这个这个其实你可以认为是前面的这些变量,xk减一啊,这个地方xk减二啊,xk啊等等。

有前面这些变量的一个线性组合去产生一个新的这样的xk,其实它的这个目的,这个线性线性组合的目的,其实就是要让这个迭代的这两个之间的这个长差变小啊,那么所以说他需要去找一个这样的一个参数。

那么这个参数是由下面这个优化问题去得到的啊,那整个这一套呢就是由这个很早的这个呃,大概很早之前就有,已经是一个很成熟的一个理论啊,它的这个曲线是呃,这个蓝色的曲线大概是长这样的,它的这个能量。

这个能量就是指这个这个能量啊,就整个目标函数,它的目标函数你可以看到它的这个下降基本上是非常非常缓慢的,你会发现这个条曲线在这个地方就陡然下降了,就是从这个十的负,这个是取log就是十的负几次方了。

下调是非常非常明显的,其实给整个算法的收敛性带来了很大的这样的一个帮助啊,那么但是呢这个地方我们还在这个整个的应用,整个的这个优化问题里面,我们其实是有了一个再回到前面来啊,我们这个地方的这个hi呃。

这个地方的这个hr嗯,这个地方的这个h r它其实是一个bd confirm distortion space对吧,其实这个地方的k呢其实也是一个变量,这个k其实也是一个变量。

但是这个k呢其实我在这个优化过程中,没法去把它串到这个logo logo里面去,所以这个k本身也是一个变量,这个k如果设置的不好,其实我整个的这个space比如说大家可以想象,如果这个k是一个比较小的。

只能美,就说这个space会比较小,如果这个k比较大的话,那这个space会比较大,那么也就是说其实你不是这个space越大越好的投影的时候,那么所以说呢我们在整个优化过程中的是。

其实是如果你固定一个k的时候,其实你的整个的这个优化,你看它这个地方最后这个黄色的有一个这样的一个映射,它的这个四面体其实没有被优化掉,所以最后它还会有一些呃,有七个翻转对吧。

也就是说你固定一个k它其实这个整个投影过程,它其实没法保证去完全达到那个space呃,confirsting space,因为你的能量没有完全道理,对不对,没有完全到零的话。

你其实这个地方其实是没法优化到呃,没法优化到所有的把三角形都给去掉,所以说呢我们这个地方就是要去去做一个distortion的这个更新,那么这个地方我们采取的策略是这个distortion从小到大。

那么就是一开始的distortion的那个这个space一开始是四,然后呢我们会把它变成八,那么pro再变成16,再变成32,这个的到底是什么呢,就是说我一开始给它收缩到一个比较紧的space里面。

就我尽量往那些好的space里去投影,然后呢你这样的话就会导致你后面的这个解的话,进就是一开始的解大部分都是往好的地方去投影,然后你再再往后,如果你当前不行的时候,我再放松这个space。

然后再往他的大的地方让他投一投,而不是说一开始我就给它很松,给它很松的话,你一开始可能所有的所有的这些投影都不是一些比较好的位置,那么这样的话,你就导致你这个整体最后就没法收敛到一个比较好的截去。

所以我们后来发现呢,我们是需要去西安,一开始给他一些比较强的惩罚,就让它投影到一些比较那个好的地方去,然后呢把这个k再慢慢的变大,大概是这样一个策略,最后这样的话我们就可以比较顺利的把反转去掉啊。

当然了,如果从这个算法设计的角度来讲,我们还是希望就这个k也能成为这个迭代的过程中的一部分对吧,我们能选择一个最优的这样的一个k那么对于这样的一个global,这一步的话。

刚才讲过它其实是一个固定这个h然后去求解这个u的过程对吧,那么我们之前是求解的,就是这样的一个呃优化问题对吧,给定这个hi,然后去求这个,那么这是一个整个就是一个呃二次优化问题,然后再加上一个线性约束。

那么直接用拉格朗日乘子法就直接可以把它求求解出来,我求把它重点求出来,那么对于这样的这样的00515年这样一篇paper,他就当时说我觉得他说觉得这样的投影其实收敛会很慢,其实也是收敛确实很慢。

就是这个这条蓝色的剑气可以看出来这个收敛确实很慢,这个收益确实很慢,所以说呢他们说我不要让我除了这个最近点投影以外,我还希望再加上一个约束,这个约束是什么意思呢,这个蓝色的点你可以是。

那么这个这个蓝色的点就是违反这个违反这个space space,外面的这样的一个点,那么你每次在去做最近的投影的时候,得到了这个h h i呢,其实就是这个地方的h i,那么这是它的最近点投影。

就是它的那个外面的这个当前的这个u,然后你这个绿色的点呢,就是你下算出来的这个dk加一部的,这个dk加一部的这个甲毫米矩阵,这个绿色的点,然后呢他这个叫做切上的投影的话,什么意思呢。

他就是让这个新生出来的新生村,新生成出来的这个绿色的点,它要跟这个原来它是在这个点的这个切空间上的,就是要吊在这个点的切空间上,那切空间上的意思是什么呢,那么原来这个点是它的最近点头点。

那么最近点投影的话,一般都是一个正交投影,那么正交投影的话也就是说这个点他的那个切平面,它其实它的那个切平面其实是就是跟这条线是垂直的,那就是跟它的垂直的线,所以说呢我希望这个这是一个向量。

这个向量你可以认为是这样一个向量对吧,那么我希望这个优化出来,这个像这个点跟这个这个向量呢跟这个向量是垂直的,那么也就是说什么意思呢,也就是说我新生生出来的点是落在了这个h i k的。

这个当前这个地方的这个超切平面中,那么也就是说让他们两个之间是垂直,那么垂直的话,其实也就是说是这个矩阵跟这个就是也就是说这两个矩阵之间,它的那个内积要等于零啊,当然你是要把它写成一个向量的形式。

那么这样的话当年那个方法就证明了说我通过这样的一个天宫的投影,那么最后它的收敛性就会变得比较好啊,这是他当年的这个结果啊,那么但是呢我们呃后面我们其实这个啊,那么确实他这个投影,但是呢它这个能量啊。

它这个能量其实因为加上了这样一项切切像的这个投影以后,他其实没法保证这个能量是一个单调下降的,你会发现它其实会出现这样的很明显的震荡,那么很明显的震荡的话,就会影响他最后整个的这个这个能量的这个收敛啊。

就他其实最后可能不一定呃,就是或者说这个三角形它这个一会儿有翻转,一会儿没翻转,它这个翻转它其实也是发生在也是有这样的一个跳变的啊,所以说这个也不是一个比较好的事情啊。

所以说他最后呢这个方法呢有时候就是他也是会去不掉这样的翻转,它会在某些地方还是会存在那么几个翻转啊,因为他这一部的能量他加上了这样的,他多加了这样的一个线性约束以后,这个线性约束是多加出来的。

那么这个线性约束多加出来以后呢,导致他整个的这个能量是没法单调下降的啊,能量为什么单调下降,这个事情大家可以去看一下这个l a p的这个整个的迭代的过程啊,因为每一步都保证下降。

所以能量应该是单调下降的,他其实没法保证这个目标函数是一个单调下这样的啊,好这是第一类方法,就是基于这样的一个投影,然后通过这样一个交替优化的方式去完成了这样的一个呃,把这个翻转的三角形。

尽量的往这个就是没有翻转的那个空间里去投影啊,然后这个地方的采用了这样的一个扭曲有界的这样一个空间啊,这个事情也是比较也是一个比较简单的事情,就是一个logo格洛宝吧。

那么接下来我们要介绍的是另外一类方法,是这样的啊,founded distortion space的方法,这类方法的核心思想是什么呢,就是说我我原来之前我们之前讲过。

就是说这个distortion space,或者说这个没,有翻转的这个space,它其实是一个非线性的space,对不对,因为它比如说我们来看这个假科普矩阵小笔记,我我可以写成这样啊。

啊为什么可以写成这样呢,因为这个甲和比矩阵的写法,跟前面的这个几甲合比指针的写法是有一点区别的啊,给大家简单的借解释一下啊,本来的假货币矩阵应该是写成呃,比如说就这样对吧。

这个地方比如说借一一借12j21 j啊,啊对吧,本来应该是写成这样一个形式,那为什么可以写成这样的形式呢,其实也比较的简单,我就是把这个地方的,比如说我们,以这个为例啊,其实你可以看成是什么呢。

看成这个地方的a t呢,其实就等于你把两个加一下,两个加一下a t就等于什么呢,就等于1/2的g1 j11 加上j22 ,然后呢c t呢就是1/2的g11 减去g22 ,那么什么意思呢。

那么也就是说你原来如果是长这个样子的话,我其实可以把它写成1/2的g11 加上j22 ,加上1/2减一一减去g22 对吧,同理那么这一部分我把它另一把它设成a t,把这部分设成c t。

那么这样的话同理我就可以把这个a t c,t d t b a t同样的写出来,那么所以说呢如果我一开始写成是这样的一个假货币矩阵的形式,我可以通过简单的一个变量替换。

我把1/2的g11 加上gr 2设成at,把1/2的g11 减去j2 ,设成c t,那这样的话我就可以把这个角号比矩阵写成这样的一个形式啊,那么如果从这个假货币矩阵的形式来看,我们要让它的行列式大于零。

那么行列式大于零的话,行列式是等于这个呃,ab就这个减这个呃,两个对角线相乘减去这边对吧,那么就是这个乘这个,那么也就是说是,a的平方减c的平方,这一项减去括号是d的平方,减b的平方。

b的平方减b的平方,那么所以说最后就等于a方加b方减去c方减去d方,你要让这个约束是大于零的,那么也就是说你要让这个a方加b方大于西方加上b方对吧,那这个这个约束其实是一个非凸的非线性的约束对吧。

那么所以说呢其实你没法直接去套一些to优化的算法,那么所以说呢接下来这个方法的思想就是说呃,我能不能去把这样的一个约束直接把它转成一个呃,比如把它把它直接转成一个就是to空,间,那么如果我能去找他。

因为这个这个空间本身是一个非凸的空间,那我能不能在这个飞to的空间里面去找到一个最大的最大的子空间,这个子空间是一个凸的,然后呢我在这个子空间里面去做一个凸优化对吧,那这样的话其实也是一个比较好的事情。

所以这一类的核心的思想就是说我在一个大的空间里面,一个非凸的空间里面,我去给他找一个局部的这样的一个呃,或者我去给他找一个子空间,这个子空间是凸的,然后呢我是我在这个空间里面去做这样的一个优化啊啊这是。

一个这类方法的这个核心思想,那么这一类方法它首先啊首先啊还是按照这个式子,就甲壳币矩阵把它写成了这个啊,现在甲后面女生就写成了这样的一个形式,那么其实我可以直接把他的两个奇异值给写出来啊。

一个是就是这个a这个怎么写的,你们就直接推一下,因为这2x2的矩阵这玩意都直接是现成的公式啊,a方加b方加c方加上地方啊,很很好看啊,a方加b方减去c方加b方,如果你用ssd分解的话。

这个绝对值是没有的,那么通过这样的假货币矩阵,这样的那个s b d分解啊,这样的那个两个奇异值,那么现在我要让他的这个confirm diotion,confirm distortion。

就是定义成这个西格玛max比上西格玛mean啊,我现在要让这个ctrl搜索小于k,那么也就是说是sigma max小于k乘上西格玛命啊,要让它的行列式大于零,行列式大于零,其实就是要让这个我们刚才讲过。

其实就是要让最小的其值大于零对吧,这个绝对值没有,那么其实也就是要让这一项减去这一项大于零,就是a方加b方减啊,刚才已经讲过了,a方加b方大于c方加b方所,以说行列式大于零。

其实就是要让这个绝这个a f c方加b方小于a方加b方,那么要让这个convert disession小于k,veral dise小于k呢,是这个上面这个除上。

下面这个要小于这个k那么也就是说要让a方加b方开根号,加上西方加b方除以a方加,哎呀妈呀,写不下了啊,a方加b方减去根根号下x方加地方小于k然后你把它整理一下。

你就会得到这个c方加b方要小于等于k减一呃,除以k加一乘上a c方加a方加b方,然后我们来看一下这两个式子啊,我们首先来看一下这个数,因为这个,这边这两个和这两个是一样的,这两个是一样的对吧。

我们来看一下这个数,那么对于这个confirm destroy distortion而言,它是由这个最大的奇异值比上这个最小的奇异值,那么也就是说这个k这个k应该是大于等于一的。

那么要大于等于一的情况下,那么也就这个式子k减一肯定是要小于k加一,并且这个地方大于零,大于等于零,那么所以说k减一除上k加一的话,显然是要小于一的,小小于一的情况下呢,那也就是说这个数要小于一。

那么也就是说如果下面这个约束满足了,那么上面这个约束是,显然是满足了对吧,因为这个数是小于一的,那么你现在是小于一乘上这个后面这个就你就说底下这个约束满足了,上面这个约束以后,自然也就满足了。

所以说呢我们现在只需要只需要考虑这个约束,上面这个约束我们就不用考虑了,因为下面这个约束满足上面这些约束也就满足了,那么现在我来考虑一下下面这个约束,那么这个约束显然是一个非突非线性的对吧。

我们那么所以说呢现在我把它引入一个辅助变量,辅助变量是什么呢,辅助变量是这个地方的rt rt就代表了这一,项rt就代表这一项啊,那么就是我把它改成了c方加b方,小于这个k减一乘k加一乘上rt。

然后rt呢并且要小于这个a方加b方,那么如果你把这两个不等式连接起来,那其实你还可以得到小于等于你把这一项带进来对吧,那么小于等于k减1k加一乘上根号下a方加b方。

那么也就是说你这两个式子如果放在一起看,它其实最后跟这一项式子是等价的啊,就是还是c方加b方,小于小于等于k到1k加1a方加b方,那么只不过我现在引入了一个这样的一个变量,当然这个。

变量还应该是大于零的啊,那么这个约束大于零,这个约束是凸的,那么这个约束是一个二次追的约束对吧,a方加b方小于等于一个,这是一个线性项线性函数,这是一个平方,那么其实就等于什么呢,等于就是一个。

所以这是一个to的约束啊,这是一个追的约束,我就不解解释了,这个约束是一个非凸的约束,因为它是一个a方加b方,它是一个要在一个外面的约束,这个约束是一个to的约束,非to的约束。

那我们来看一下下面这个图啊,呃这个地方的c我把它改成k啊,那么也就是说我,现在的要让这个约束对吧,这个约束现在是一个非凸的约束,就是a方加b方要大于等于一个rt,那么其实可以从这个从这个图来看。

其实是什么呢,rt你可以看成是这样的一个轴的一个半径,那么你其实你要让这个a方加b方大于这个a方加b方,要这个这个是呃黄色的圈是它的这个rt,那么他要rt再乘上这个k减一,这个的话其实就是前面的那个啊。

那么你现在你的目的是要让这个a方加b方是大于这个呃,大于这个rt的,那么也就是说其实是这个圆的外部,那么如果从这个,从耳机就是这个锥的外部,那么如果从这个锥的外部来看的话。

它其啊它其实是一个非to的对吧,因为你你你只有他们追的内部是凸的,它的外部是非凸的,那么这个时候呢其实你整个外面的飞to的这个空间,那么你要让这个空间里面,你要去找一个最大的突凸空间。

那么其实最大的突破空间也很简单,我要让这个式子大于零,那么其实我只要取它的这个a大于rt就行了,或者b大于rt或者什么,只要只要给他去做一个切平面,只要沿着这个锥,你去这个追的这个边界,你给他去找做。

一个切平面,然后这个外面这个切平面,整个就是它的整个锥的这个最整个这个最外面的这个最大的,这个图空间啊,那么这个地方它直接取的是a t,当然这个a t你可以变,你不一定是a t,你也可以bt。

你也可以可以是其他的一些组合,你只要是这个曲,只要是这个切平面外面的,那么从道理上来讲其实也很简单,我不我不我不不画这个锥啊,我直接画一个平面的示意图,比如说我现在这是一个圆,这个圆呢就是a方加b方。

这个坐标是a,这个坐标是b,那这个rt呢,假如说我是一个,固定的数,比如我这个数就是一个一对吧,那么a方加b方的话,它其实就是一个外面的这个空间,对不对,那这个空间是一个非to的空间。

那么这个时候你要取他的最大的一个突空间,其实就是在这个地方给他去拿一刀,给他竖一刀下来,那么整个这个外面这个空间就是它一个最大的飞出空间对吧,那么你这外面的空间其实就代表了。

就是这个这个地方的这个a要大于rt啊,所以说最后就变成了这样一个形式,那么你凭什么就是这个地方就直接选a呢,所以这个地方你就需要引入,一个叫做局部坐标系,那么就在这个局部坐标下。

你是这个a是你是你要选的,其实你也可以选对吧,比如这个例子,其实你也可以选选这个对吧,你也可以选这边这个局啊,你当然也可以选这个下面这个局,那也就是说其实会跟你这个你选这个区域的方向。

其实你可以用一个局部坐标系来描述对吧,就是你可以最后你都可以取这个一取这个样子,你都可以取它的,取它的这个a t大于rt,但是a t本身的值是跟这个一个局部坐标系有关的,那么其实这两个问题就是等价的。

就是什么,意思就是你你选的这个平面其实是跟你的这个,你这个当前这个地方的这个你这如果这个你如果这个坐标系的朝向,现在是现在是这样一个横屏的,竖直的对吧,你的坐标带你的坐标系也可以是长这样的。

然后你再去选这个点对吧,那也就是说你最后选出来的区域就是这边这一块区域了,好,那么现在这样这样的问题就得到了,就是anyway,就是说我现在这样的话就可以得到一个凸空间,那么有了这个图空间以后呢。

我就可以将来去求解了,现在就是我把上面这个约束转成了一个凸空间,那么凸空间以后,那么接下来整个约束可以求解了,那么接下来我们要调一下目标函数,那么要去设一下目标函数,那么目标函数的话。

我现在是一个这样的一个角货币矩阵对吧,那么如果是一个l o s t m的话,它应该是一个相似变换,那么相似变换的话应该是这个这两个要相等,这两个加起来要等于零对吧,那么相等的话,这两个数要相等的话。

其实就等于这个c t要趋向于零,那么这两个数要加起来等于零,那么也就是说我这个d要等于零,所以说lsc m优化的目标函数你就可以直接写成这样一个形式啊,因为你要让它把它变成相似变换。

那么如果你是一个a r a p的形式的话,你其实你要让这个整个三角形变成一个整个对,整个变成一个呃,整个变成一个local local global,整个变成一个旋转矩阵。

那么如果在你前面的那个你前面的这个local frame里面,你这个local frame里面,如果这个local frame就是选择你这个里面那个旋转旋转的那个矩阵的话。

那么你最后的能量其实就是要让这个东西等于一个单位证啊,当然你要选那个旋转矩阵,就是那个local frame啊,好那么也就是说你最后会变成这一项,要这和这一项减去一要等于零之后会得到这样一个目标函数啊。

那么这个地方的呃目标好像就整个的优化过程就变成什么了,你要给一个local frame,其实就是那个a r a p里面那个旋转的旋,类似于这个旋转三角形啊,旋转旋转矩阵。

所以你要给一个local frame,然后呢用一个二次追的优化去二次追的programming去优化,然后呢接下来你要去local fram,使得这个bt等于零啊,就是去更新那个举旋转矩阵交替迭代啊。

那最后呢这样的交集点是比较费事的,费时间的啊,当然这里面还有一个核心的问题是这个k怎么取啊,这个k就像我们之前讲的这个k其实影响的是你的这个space的大小啊,这个k取得不好的话。

最后的约束其实是要么就是会没有减,要么就是呃就是得到的减很差啊,就是k的选择,现在没有一个很核心的想法,那么我们再来简单的回顾一下整个的刚才的那个过程啊,就是说假如说我这是一个s b d分解。

那么这两个是一个旋转矩阵,s是一个对角阵啊,那么他们并且满足这样一个条件,那么当然这个第三个元素可能是负的,假如说嗯但是我可以把这个矩阵把它简单的写一下,把这个ut因为它是一个旋转矩阵。

所以我可以在这个地方写一个,就把这个地方乘乘一个ut的转制,那么再乘一个ut,那么然后在这个地方乘一个v,那最后其实这个si就可以写成这样一个形式对吧,假如说这个ui和这个vi是已知的情况下呃。

这个地方是已知的,那么其实这个si假如说这个假如说啊这个地方是假设啊,if if ui和vi是已知的情况下,那么本身这个甲和b i它是关于这个顶点位置是一个线性的函数对吧。

那么如果v ui和vi是已知的,那么si也是一个关于顶点位置的一个线性函数,对不对,那么于是你这个bd的distortion的,就是你本来的bd distortion应该是西格玛i一比上i3 啊。

这个地方也有呃,如果是二的话,就是也可以是二啊,就是如果是单数化,应该是二,就这个地方这个是没有的啊,如果是参数化的话,那么也就是说西格玛i一比上西格玛i si小于k,那么因为这个东西。

它的对角线现在都是关于顶点位置的一个线性函数了,那么所以这个约束就变成了sigma i一小于k乘上西格玛a i s,这是线性函数,就是线性函数,那么也就是说这是一个线性不等式约束。

线性不等式约束显然是一个to的,那么如果是变成这样一个to的,就说整个整个帮这个distortion的这个约束就变成一个to的,对不对,而变成一个凸的,那整个问题就可以求解了,是不是啊。

那么现在的核心问题是,我现在假设了if ui和vi是已知,那么随着问题是你怎么让它变成已知对吧,你怎么让它是已知,那么如果你要让它变成已知,最最最简单的做法就是我在dk加一次迭代的时候。

我取dk次的ui和vi,那这样的话我不就相当于是它是已知的吗,那么所以说接下来就是有人就在13年的时候,就这下面这篇文章啊,13年的时候有人就做了这样的一个pipeline啊。

那么这个tp line呢就是首先这个地方它做了一个s b d分解,这个是你可以认为是第n步的,就是这个地方有个n啊,第n步的第n次迭代,这写的不大好啊,第n次迭代。

然后呢你把它会得到这个地方的一个u和这个地方的v,然后呢你把这个u和v呢存在这个当前的,这是第n加一次优化里面,你可以得到这样的一个线性约束,就这个对角矩阵就关于。

就你可以认为是就是上面这个地方ppt里面的这个对吧,si所以你最后就会得到它的一个线性约束,然后你这些约束的话就全部变成了一个线性约束,那么也就是说你整个的问题就变成了一个凸优化的问题。

就相当于你这个地方的ui和vi,用的是上一次迭代里面的那个假货币矩阵,分解出来的这个ui和ui和右键和v键啊,对方那么这样的话,你整个的这个迭代就变成了一系列的这个to u2 的这样的一个迭代啊。

那么这样的迭代它其实是一般情况下是收敛是比较快的,一般只要小于十次,有时候就只有五六次迭代就可以收敛了,但是它的每一次迭代都是一个二次二次优化,二次二次的那个凸优化,二次的凸优化。

它一般的国家这个q p的优化的话还是有点慢的啊,那当然这个核心问题还是没有解决,这个k的选取问题,它其实没有解决啊。

那么这一类的这个space这一类的这个bounding distortion space,这类方法呢就是通过一些技巧啊,迭代算法其实很好理解啊,就是假设这个ui和v v界,然后已知的情况下。

他可以把这个原来的这个foundation这个space转成一个to的线性不等式约束,然后这样的话他也可以通过一系列的优化去求解啊,那么所以说呢这一类的boring space的方法简单的回顾一下。

它其实就是说我原来的space是非凸的对吧,我就我就想一些方法使得这个space变成一个to的space,变成一个to space以后呢,接下来我的所有的传统的这些凸优化的方法,s q s c p啊。

q p啊等等这样的呃,传统的这些已经已经设计好的一些很成熟的算优化算法,我都可以直接拿过来用了,而我不需要去自己去设计一些算法对吧,就转成一些成熟的稳定的一些优化算法。

那么anyway就是说这是这个bondiot这个space,那他这个4g思想还是跟这个之前的这个呃投影的那个算法,还是会有一些呃difference好,这,是呃两类介绍的两类方法。

那么接下来我们进入第三类方法,第三类方法是基于叫惩罚的方法,那这个想法就非常非常简单了,我既然现在有一堆翻转的三角形对吧,那很简单啊,我直接就给他加一个惩罚,惩罚能量啊,就是在这些翻转的三角形上。

我给他设计个能量,这个能量函数值是非常大的,对不对,那么然后呢没有翻转三角形,我给我不给他惩罚,那这样的话我再去优化的时候,我就把这些翻转的三角形,因为它上面的目标函数很大嘛,我说如果能去下降的话。

那么我最后的这个能,量不也就是下降啊,那那个翻转不也就去掉了吗,所以这一类方法是这个呃,比较就是非常的这个直截了当的,就是我直接去惩罚那些坏的东西,对不对,那我这样的话,我这个整个能量就可以去下降。

或者说整个能量下降的情况下,我就能够把那些翻转给去掉对吧,那就这个思路是非常非常非常非常简单,所以说是px的flip elements by planet function。

就是说通过一些惩罚函数去把那些翻转的三角形给惩罚掉,那么它的主要的特点就是说他会去这个能量函数是非常大的,用来去惩罚这些翻转的是假币,矩阵如果这个呃如果这个到后面矩阵它是一个没有翻转的。

那么我就是通过一些它的能量目标函数值就非常小,我就接受它对吧,那么接下来这个问题,你很显然如果你需要设置这样的一个惩罚函数的话,这个惩罚函数很可能是或者说基本上是一个非图非线性对吧。

那你求那么这时候你的求解器就变得比较关键了啊,那么这是两个比较常见的两个比较常见的这个惩罚函数啊,说实话这个东西在这个很多很多领域里面都被用到了啊,就是说呃当然在这个参数化领域,或者说在。

这个映射计计算领域其实也是个很常见的事情啊,这一类这个惩罚函数的方法,其实在这个网格生成,或者说在有一些领域里面,比如六媒体网格生成啊,高阶网格生成里面也是一个被用的烂大街的一个方法。

就是说他其实会通过这样一个惩罚函数的方式,去对这个翻转的三角形去,或者说对翻转的四面体或者对翻转的六面体,或者对翻转的高阶网格,都是去可以给它加一个惩罚站,然后将它的能量函数去下降。

这个是一个很常见很常见的算法,这是一个非常非常通用的一个算法,啊那么首先我们来看一下左边这个能量函数,左边这个的话好说呢,大家可以看一下这一项呃,这一项如果是如果是小于零的情况下。

那么也就是如果这个行列式是小于零的情况,那么也就是说这一项它的平方加上这一项,那么然后这个是小于零的,那么也就是说这项开完根号,它其实是比是呃,比什么呢,比它的这个行列式大那么一丢丢对吧。

就这个开根号其实是比这个行列式,比这个行列式的绝对值大那么一丢丢,那么这个行列式你再去加上它的绝对值,那么原来就是一个负的,你加上它的绝对值应该等于零,那么本身它加了一个e技能。

就e p系统是一个很小的数,所以说呢他最后是应该是绝对值加上一个很小的数,那么所以说你把本身你这个行列式加上它的绝对值应该等于零,那么你再加一个很小的数,那么就是这个分母上就是一个很小的数。

那么分母上是一个很小的数,那么你现在也就是说这个行列式行列,式如果想如果它的角和比矩阵的好,但是如果是小于零的,那么就是分母上会出现一个很小的数,分母上出现一个很小的数。

那么接下来那你整个目标函数就会变得很大对吧,那我们给函数变得很大很大的情况下,那你这样你就会对这个翻转的三角形就去给他一个惩罚啊,就是这个函数,那么这个函数呢这个地方有一个eino啊,注意啊。

这个地方的这个bino呢取成是这个最小的,这个可以取消,比如说比这个最小的行列式,minimal的行列式还要再小一点点呃,minimal的行列式再小那么一丢丢就一,丢丢几张阿尔法吧,这是最小的行列。

是最小行列式可能是负的对吧,比如-1,然后你再减去一个正数,比如减去0。11-1减一点,比如1。1,那么这个就是你的ef系统,那么这样的话你可以看一下这个目标函数啊,这个这个第一项我们先不看。

我们来看一下这第二项,第二项是这个行列式减去这个bino map系统是1。1,cp系统现在是负的1。1啊,负的1。1,那么减去负的1。1的话,那么也就是说整个这个目标函数解出来就是加上1。1。

那么如果你原来这个最小值是-1,的话你带进去,那上面也就是说变成了正的0。1,然后这个一减去这个的话就是2。1对吧,就是1÷2。1,那么给他取一个log,那么因为这个数是小于一的。

那所以说呃log大家知道其实在这个一的地方是等于零的,那么也就是说这个是一个小于一的数,那么也就是说这个log其实应该是一个在这个地方,在这个0~1这个地方是一个很大的数,那么很大的数的话。

你再给它取平方,那么这个数会更大,那么特别是当你这个行列式趋向于这个ab系统的时候,它的这个值越大,其实,在这个ab性能的地方,它会有一个最大值取到一个无穷大的值,那么这个时候呢。

所以说你相当可以去给他去给一个月,越靠近一步系统的地方越去惩罚他啊,相当于给他这样一个惩罚函数,那么这个第一项的话,它其实是让这个行列式尽量的趋向于一啊,趋向于一的话就是保面积嘛。

就两个前后两个三角形的,或者前后两个呃,四面体之间的面积要等于相同啊,然后这个地方如果你的这个行列式等于一的情况下,那么这个上下两个分母分子分母就是一,那么所以这个能量就等于零。

啊所以说呢最后它是在这个行列式等于一的情况下,整个这个目标函数就起到最大,然后呢越靠近你的ebsl,bsl刚才说了,取它的最小的这个行列式,比如是负的,那么它的目标函数值就会越大,起到一个惩罚的作用啊。

所以这是两个最比较常非常常见的这样的一个呃惩罚函数啊,那么什么函数里面有几个关键的参数啊,比如说这两个ab系统,它其实会比较的复杂,取起来,那么这个文章这个这个文章是一个去年前年去年的一篇新冠幅文章。

他就是在这里面去探讨了这个左边这个啊左,边这个目标函数的这个app型号的取法,他给了一个非常非常复杂的式子,然后面又挣了一堆的定理啊,说一下这个ip的取法是比较好的啊,啊我这地方我就不细讲了。

这地方太复杂了,我今天就过去了,大家有兴趣的可以去看一下这个文章啊,那么接下来就是说你有了这样一个惩罚函数,你怎么去求解对吧,那么这是我见过的四类五类成,这是我见过的五类方法啊,每周方法大概介绍一下啊。

呃具体细节我就不讲了,大概我就给大家讲一下思想啊,第一类方法,第一类方法叫做坐标轮换,法,或者你也可以把它叫做非线性高斯特点迭代啊,坐标轮换下降法,这是中文的名字啊,或者叫做非线性高斯赛德尔迭代啊。

这两种叫法都是可以的,其实无就是说每次更新一个,每次更新变量的时候,我每次都是更新几个或者更新一批啊,那么这样的就是我相信每次只优化一个顶点,或者每次只优化两个顶点,或者每次只优化一个领域等等。

就是一个block的一个思想,然后呢你去优化这样的一个blog cn design,一个方法的话,这个在早年的那个第一个左边那个目标函数的能量比较早,是用的,这个方法而且效果非常好。

呃大概是03年的一篇c m e这边啊,呃03年一篇cm e对那篇文章就是他就是用了一个叫做block,考虑这些方法,他每次只更新了一个顶点,或者每次只更新了一个呃,对每次只更新一个顶点。

然后但是这一类方法它有一个缺点,如果你的翻转数目非常非常夸张的情况下,比如说你有几万个,几千个,几万个,几10万个的那个翻转的话,这类方法可能是比较稍微差一点,但是你最后的翻转比如说只有几个。

比如说比如说只有十个,20个或者最后一五十个,但他,这个方法其实是很强大的啊,但是它里面的核心也是怎么去调整那个app,如果那a b c统调整的好,他的那个收敛会更快或者更加的那个就是会去掉很快啊。

第二个方法是这个共轭梯度法,那么通过记录法他就加了个预条件啊,那最常见的预条件就是这个我们上节课啊,什么还没讲,下节课要讲,最常见的这一条件其实就是这个网格的这个拉普拉斯矩阵啊。

那么当然它也可以做一个单调的这个下降给简单处理一下啊,啊这就是这就是普通的这个公共梯图法,那当然公共梯图法里,面的那个共轭的那个因子,其实呃共有的那个参数贝塔其实也有很多的算法。

其实有一些你需要去做一些简单的尝试,看哪个算法的哪一个参数会比较好啊,那么第二第三类方法就是最常见的这个拟牛顿法对吧,a m b f g s,因为你现在反正就是一个非线性优化了嘛。

反正反正就是一个无约束优化了嘛对吧,整个你就是个无约束优化,因为你把它给用一个目标函数去惩罚这些翻转的三角形,所以你整体上就是一个无约束优化,那么无约束优化的话,你就可以用这些牛顿呃,就是。

一些呃比如最常见的话,因为你本身是一个非度非线性的,那你就当然可以用这些一阶方法,或者说这个线超线性方法啊,就是西西或者说这个他们就说lbj这种也是比较常见的方法。

那么还我还在另外一篇文章里见过用这个随机梯度法啊,或者说用这个啊不一定是随机进入法,比如说那些加那些动量的算法啊,什么item max item什么的那些东西啊,我我在有一篇文章。

有一篇做这个也是在这个优化这个左边第一个能量的,时候我见过这个啊,就他直接带带了,直接掉了,直接调用了这个pytorch里面的这些呃,神经网络,这些优化3s要与神经网络这个优化算法去优化这个左边这个呃。

优化这个左边这优化左边这个能量啊,但这里面的核心还是个p呢,就因为其实这个整个这个优化算法其实在这里面其实问题都没有,那么其实这里面的核心还是这个a b c口的调节,这b c口其实有时候很关键啊。

abc就是最关键的,那么最后一类方法当然是这个二阶方法,二阶方法的话,比如说呃我们下节课会具体讲一下,二阶方法啊,所以就明天我们可能会介绍更多的二阶方法,二级方法的这个最大的问题就是这个行列式。

因为这个行列式本身它是一个,你可以在某种程度上就是认为认为它是一个面积,那么这个面积的话,它其实是一个非凸的,或者说是一个非线性很强的一个东西,如果你直接去给他去做二阶的呃,筛选矩阵的话。

它其实一般情况下都是非真正非正定的啊,所以你需要去给他去做镇定化,但是做正定话的时候,其实你会呃会引入一些额外的,就你那个镇定出来那个方向可能不是一,个很好的方向,所以最后得到那个下降下降的东西。

可能下降的那个目标函数可能不是那么好啊,你下载的性能可能不是那么好好,那我们接下来进入这个,所以这个整个的这个基于惩罚的方法呢,这个其实很多东西还是比较工整的。

或者说你需要去做一些更多的这样的参数的调节或者设计,或者说一些理论上的一些分析啊,但是他的思想其实非常简单,我就是把那个呃大的就是翻转的,我给他加一个大一点的惩罚啊,就是这个思想是非常非常简单的。

而且说实话也挺实用的啊,比,如我们讲过的这个三类方法,比如说第一类这个logo global这类方法,这类方法其实有一个很大的优点,就是说他在这个初期,如果你有几万个几10万个翻转。

他的那个logo logo的前期下降会非常快,它可以一下子就把你的很多翻转干掉,但是他他在最后比如说只剩下十个20个翻转的时候,他有时候会显得这样的一个很无能为力的这种感觉吧。

那么但是呢比如说像这种惩罚的方法,你如果一开始他直接就是上几10万个几万个翻转的时候,他其实也有点干不动,那么这个时候呢你也就是说,这个呃所以从另外一个角度来讲。

其实你可以把这些方法去那个做一个组合对吧,你比如说前期你可以用这个logo和logo的方法,或者投影的方法去把大部分发展去掉,只剩下一二十个翻转,因为他那个翻转去的很快。

因为他所有的计算都是呃整个那个优化算法都很快,因为他是那个调解方程的时候,那个矩阵是可以预分解的,预分解的话,你每次只要去做一个呃by就是一个回答就行了。

你不需要去做前面的这些在矩阵分解啊等等这些地方东西,那么所以说呢你可以先用这样的logo lo,方法去把大部分的都去掉,那最后呢你其实可以用这样的一个继续惩罚的方法,因为你现在只剩下十个了吗。

你把他惩罚一下,可能就把这个这个问题就做完了啊,其实我我我的观点一直是说这些方法其实大家都是可以互补的,就是有一些它有一些优势,它有一些那个他有一些好处,这个方法有一些因为求优优点,那个方法有一些优点。

其实你真正在实际问题中,特别是在实际问题中,其实我觉得不应该是一个方法就能把所有的问题解决掉,而是很多的问题方法的这样的一个组合,但是如果你从这个写篇文角度来讲,可能这个不是很合适啊,这样的形式呃。

所以说这个呃好,接下来我们进入下一个方法啊,下一个方法是这个基于面积的这个方法啊,那么首先我们有一个引入这样的一个概念啊,就是说这个是一个无符号的概念和一个无符号的面积,和一个有符号的这样面积的概念啊。

那么呃有无符号的有符号的面积的话,就是说这些我需要去考虑它的这个朝向啊,比如说一个三角形,一个平面上的三角形,它的有符号的面积,你可以让它的这个呃在那个插层里,面去定义啊。

就是跟它的z轴的这个z轴的那个正方向,你要去做一个点击啊,最后那么如果是一个呃无符号的面积,你就要去给它取取一个绝对值,或者你要去给它取一个平方,然后再开根号这样一个形式啊。

那么对于一个有符号的面积而言,你把比如说很简单,如果你把平面区域上的一个,你把一个平面的区域,如果你把这个平面区域的平面区域,然后呢每个平面区域已经三讲话了啊,平面区域假设已经三讲话了。

那么那么你给这个平面区域,你把他的所有的三角形给面有符号的,面积加起来,最后应该会得到的是这个平面这个区域,或者平面这个呃多边形的这个面积啊,就是你把你不管你的这个三角画里面存不存在翻转,存不存在负的。

全部存在正的,你只要是一个平面的一个区域多边形,然后里面已经三角化好了,然后你不管这个三角画的有多烂,你把每一个三角形的有符号面积算出来,你把它加起来就是等于这个多边形的面积啊,这个是啊。

这是一个一个很简单的结论啊,那么呃但是呢有符号的面积来讲的话,因为无符号的面积的话,有些负,有些正,那么,如果都是一些无符号的面积,比如这个地方的无符号是totally total。

total and send a啊,就是这个t u a啊,totally ascend就是totally,就是total,就是整个的没有翻转的面积的话,它应该是大于等于这个ut的,把它加起来。

因为这个很显然这个东西是大于等于这个所有的s t的对吧,因为这地方都是正的,这个地方是有正有负的,所以说这个应该是sigma的,ut是大于等于sigma s t的,那么大于等于整个这个多边形的面积。

那么如果一个三角化它要没有翻转,当且仅当当且仅当这个无符号的面积t u a等于这个面积等于,整个三角,整个整个多边形的面积,那这个东西从另外一个层面上来讲是什么意思呢,就是说如果你这个多边形的面积。

这个东西其实是一个固定的值,对不对,其实它是相对固定的值,那么也就是说你当你的这个t u a t u a达到最小值的时候,达到最小值的时候,那这个三角化就是一个没有翻转的三角化啊。

那么所以说所以说这样的话,基于这样的一个观察,或者说基于这样的一个事实的话,那么也就是说我其实可以去优化这个t ua对吧,totally and send air,我直接可以优化这个c啊,然后。

还获得一个没有翻转的映射对吧,那这个时候只需要什么呢,只需要你这个最优值达到这个达到这个所有的都大家可以想一下嘛,如果这个西格玛a u t等于这个西格玛a s t。

那么也就是说我的这个s t和这个ut相等的情况下,那么这不就没有翻转了嘛对吧,但是呢这个t u a在这个文章里,在这个文章里,这个作者说这个t u v其实不是很好。

第一个是这个t u v它是不是很光滑啊,那么第二呢是这个带大家来看一下,刚才这个结论是这个t u a等于这个面积的时候,任何,一个没有翻转的映射,他如果获得这个全局最小的这个ta。

如果这个t u a已经优化到全局最小了,但是这句话不一定是对的,不是他的他的他的这上面这句话的结论的逆逆结论不一定是对的,什么意思,if这个映射是一个没有翻转的映射,那么它的t u v就是全局最小的。

但是反过来,如果他的t u v达到全局最小,这个映射不一定是一个没有翻转的映射,为什么呢,大家可以看一下,比如说这个三角形在这个空间中是长这样的,那么这个三角形比如说对于这个呃这个画的不好啊。

那比如说这样,这是三角形一二,四,那么我现在还有一个三角形是234,这个三角形呢我把它搞成一条线上去了,那么搞到一条线上去的话,他们t u a它的那个ua他们那个没有符号的面积其实是等于零,对不对。

那么最后加起来这个东西还是等于全局最小的,那么也就是说如果他的这个无符号的面积t u a达到全局最小,就如果无符号的面积达到全局最小的时候,其实这个三角画里面可能会存在这个退化的三角形。

就这个退化的三角形是什么意思呢,就是它的面积等于零啊,那么这样的话其实它也不是一个没有翻转的,或者说它也不是一个合理的这样的一个映射啊,那么并且第二个问题是,这是第一条啊,就是这一条是比较比较关键的。

还有第二条这个无符号的面积,它其实是在比如说我现在是这样的一个三角化啊,这样的一个one ring的三角化这个点啊,我们要考虑这个点啊,现在这是一个全部都是没有翻转的啊,全部都是ok的啊。

全部都是打勾的,没有翻转三角形,那这个点它移动到这里,比如说它这个点移动到这里,它整个这这一个领域里面加起来的面积,加起加起来的无符号的面积,是不是没有变对吧,这个点只要在这个领域内怎么转。

他的这个东西都是不变的,对不对,是不是,那么也就是说它的这个地方会存在一个,他的那个梯度是等于零的情况下,就是它的面积是不变的,它的目标函数都不变的,那它的梯度就等于零对吧,那么梯度等于零的话。

其实在优化里面,就像这个大,那可能这个就会遇到这个梯度消失的问题,那梯度消失问题就意味着你最后的这个下降,但对方的优化可能会出问题对吧。

那么所以说呢这个地方这个文章就是当时这个文章这个叫做lifting,这个simplest,这个地方他这个文章做了一个什么事呢,他就是把这个地方做了一个推广这个东西呢,你可以认为是这个原始的三角形的面积。

就是原始三角形的无符号面积啊,ua的话其实可以写成根号下行列式x t乘上x啊,x是什么呢,就是这个它是由一个它的这个每一条边的这个列向量构成的啊,是什么意思呢,就是我们之前写的那个假货币矩阵的。

假货币矩阵的那个不是有两个向量,两个矩阵乘上一个矩阵的逆码,那这个东西你看之前的甲亢比值是不是写成这样的,那么这个东西的就是你可以认为就是这个地方的x啊,那么x的转置乘上x的话。

其实就是这个无符号面积的平方啊,所以说这个无符号的面积就可以写成这个样子,那么他在这个文章,在这个文章里优化了这个目标函数呢,它把这个地方又给他做了一个辅助变量,就相当于把它又提升了一位,就是提升了。

以为什么意思,就是他不是说原来的这个直接就是在直接去构造一个无符号的面积,它给相当于给加了一个东西,那么这样的话它整个的这个目标函数就是说这个这个lift呢,它会变成t u v当阿尔法等于零的情况对吧。

阿尔法等于零,显然就是这个这个就等于他自己嘛,那么所以说呢这个地方它相当于在原来的这个t u a的这个情况下,他上面给它做了一个这样的lift,就是给他做了一个这样的提升,这个提升的话。

你可以认为它其实是在这个,其实是你把这个向量可以看成是x根号阿尔法x的1y,那么也就是说原来你是一个x,那么x的话原来他是一个呃,比如就是一个三维的吧,那么你现在你就给它加了一维。

那其实你就相当于是把这个三角形,这个三角形的面积,然后他们就发现这样的一个三角形,它会有下面两个性质啊,第一是这个这个三角形,首先这个三角形它是整个这个lift起来的这个能量函数,它是一个光滑的。

第二是这个三角形它其实会有一个局部全局最优值啊,他在如果他获得一个全局最优的话,他他的那个就是一个没有翻转的一个结果啊,这都是理论上的证明啊,啊这是他的一些结果啊,这个是这个是初始值。

就是他可能我比如说这个最后一个,他把所有的内部点都放到了一个点上啊,然后去优化,然后最后他可以把这个优化出来,就是一个没有翻转的一个结果啊,好这个方法是前2年做出来的。

但这个方法呃说实话当然他的文章里写的比较的好啊,但是这个说实话实际上刨出来的效果呃,呃一般啊,就是一般好,我们过去了啊,这地方我们就不多细讲了啊,好接下来我们引入最后一类方法。

最后一类方法呢是基于这个不同的表达的啊,这首先我们来看一下这个什么意思啊,我们来回顾点击呢,我们来回顾一下这个就是在a b f里面,其实我们当时用的是这样的一个角度来作为我们的变量对吧。

然后我们通过这个优化这个角度,然后得到一个角度以后,我们再去恢复出这个顶点位置,所以说你可以看到它其实没有直接去把顶点位置作为变量,而是把这个角度作为一个中间量去过渡一下。

也就是说他把这个算法分成了先去求角角度,再去求这个零点位置,那么所以说从这个道理,所以说从这个这个算法的角度给我们的启示来讲,就是说我们在真正去做这个无翻转映射的时候,或者说这个参数化的时候。

其实我们不一定要去直接把顶点作为变量,对不对,比如说我们在这个angle beats这个flooting里面,其实如果我们的角所有的角度都是大于零的情况下。

那么其实也就是我最后的这个三角形也是没有翻转的,那么也就是说这个如果我的有一些表达,比如说这个角度啊,长度啊,曲率啊什么一些其他的一些额外的这样的一个几何表达,如果他的它来描述。

用它来描述单转会比较的简单的情况,那么其实它可以用来呃,就是可以用来作为我们的这样的一个就是辅助变量,你可以认为比如说我不是直接把顶点位置作为我们的变量,而是把我们这个另外一种表达作为我们这个变量。

那我们只要在这个表达上去求出来一个没有翻转的结果,那最后其实我们再去恢复出顶点位置的话,那顶点位置其实也是没有这个翻转的啊,来了,所以说在这个地方我们要介绍的这个一类方法。

是这个之前角度那个angle beats那个已经讲完了对吧,但是它它里面那个重建那个约束实在是太复杂了,其实是不好处理的,那么另外一个另外一个想想,大家可以想一下,我们的目的本本身是什么。

我们的目的本身是要让这个三角形是没有翻转,那么我一直是在用这个假货币矩阵来去度量对吧,我们其实我们的目的就是要让这个假货币矩阵在整个的优化过程中,它的行列式都是大于零的,对不对。

那么也就是说我这个地方我要让他的这个行列式大于零,那我比如说我在做这个flip free的这个翻转的时候,我一开始是有翻转的,然后我通过一些方法,刚才讲的这个迭代也好,或者说这个构造图优化也好。

构造这个惩罚函数也好,其实都是把这个有的有翻转的情况下变成没有翻转的情况了吧,那么这个大家可以想一下,我们的目的,既然是要让所有的小号比矩阵的行列式大于零。

那其实我为什么不直接把这个角会被矩阵作为我的变量,那么我们假货币矩阵作为变量的话,我在做初始化的时候,其实我就可以让它的这个假货币矩阵的行列式就是大于零的。

是不是就是我我现在比如假设我就把这个假货币矩阵,就这边我写的这个发transformation,就是我的假货比主线,那么其实我就把这个角号b曲线当做我的变量,对不对,那么假号比矩阵当做我的变量。

那么我我我我我给他初始化的时候,我其实我不一定受那个原来的那个初始化,就是那个翻转的初始化,作为我的这个这个初始化了对吧,我完全可以重新给它去定义一个这个甲亢肥矩阵的这个初始化。

那么我完全可以让这个甲亢肥矩阵的初始化是行列式是大于零的,对不对,那么假货币矩阵,的行列式是大于零的,那么我接下来在优化的过程中,我其实可以让这个假货币行列式一直不小于零,那么这样的话。

我最终的结果其实也就能保证它最后的三角形是没有翻转了,对不对,那么所以说呢这个地方给出来的这样的一个方向,key的想法就是说如果我把所有的三角形上的这个假货被举证,如果把它给恢复出来了。

那其实最后我的这个三角形其实也是可以去恢复出来的,那么这个地方我为了额外的需要加一个约束是什么呢,就是这个角号被举证,比如说对于这个上面这,个三角形这个ti。

那你会把这这这这两个三角形是原来的这个输入网格上的三角形啊,是输入网格上,那么你现在是把这个假货币矩阵,你去把这个做完映射以后,那么这个其实代表的是这条边印在上面这个三角形映射后。

产生的这个新的新的位置对吧,那么下面这个三角形其实你是通过这个把这个下面这条边,把上面这条边通过下面这个三角形映射后产生新的向量对吧,那这两个向量其实本质上这两个向量应该最后是呃相等的。

这样的话你才能够保证最后的这个最后的三角形,是能够去合起来的对吧,否则你比如大家可以想想吧,景一致,那也就意味着每个三角形上的这个啊,这是不是每个三角形上的这个映射。

那么这样的话你其实所有的三角形最后都是一个散开的状态,那么你只有满足了这样的一个约束以后,其实你最后才会使得这两个三角形能够被合起来啊,大家注意啊,这个地方其实一个只有一个平行相等的约束。

但最后其实可以通过一些平移就可以让整个三角形都合起来啊,那么所以说你真正如果你去把这个每个三角形上的这个,甲亢币矩阵作为变量,这是我们的新的变量,啊作为这个变量的话。

那么也就是说你其实还需要额外加一个这样的约束,那么你这样的话,你最后只要优化出来的这个假货币矩阵的行列式是大于零的,并且满足这个约束,那最后这个三角最后这个参数化就是一个没有翻转的。

并且是一个好的好的映射啊,那么所以说我们可以看一下这个地方给大家播一个视频啊,这个播的这个视频就是这个整个的这个,哎我也不知道为什么播不了啊,就是在这样一个过程啊,这个过程大家可以看一下啊。

就是说这个过程一开始的话,你看每个三角形一开始其实都是好的,然后呢在优化过程中,其实我是慢慢慢慢的把它给合起来啊,那么所以说呢整个的这个既然有了这个把每个三角形上的这个,仿射变换。

或者每个三角形的角和币矩阵作为变量的话,那么我就其实就可以把它变成什么呢,我可以初始化,大家可以看这个图片,我可以给每个三角形初始化成一个,每个三角形都是一个都是一个没有翻转的。

或者扭曲都比较低的一个情况,每个三角形上的那个假货币矩阵作为一个变量以后呢,你可以看到所有的三角形就分散开了啊,就跟那个之前讲那个logo logo一样对吧,你上网logo进一步以后。

所有的三角形都其实都是打散的,那么你就需要一个优化去把这些三角形给合并起来,那其实就是刚才这个视频里播的这个过程啊对吧,一开始是分散的,但是慢慢慢慢的把它合起来,那这个和的过程呢。

合的这个过程其实就是在不停的加强这个约束,就相当于你一开始你一开始的这个初始化的这个行列式,其实是都是扭曲比较低,扭曲比较低,没有翻转,但是呢它会让这个三角形分散,也就是你会让上面这个约束给不满足。

那么上面这个约束不满足的条件下,你在整个优化过程中,你就需要让这个约束慢慢的满满足,那么所以说你就会引入这样的一个优化过程,那么这个优化过程呢,我就可以把它写成一个这样的一个无约束的优化过程啊。

那么无约束的优化过程呢,这一项能量呢,这项能量其实就是去把刚才的那个就是刚才的夹扣b i乘上v a,减vb等于其实就是减去甲亢并进乘上va减vb的二分数,然后再把所有的边给西格玛a起来啊。

其实这一项能量就是这个能量真的什么意思呢,就是你要把慢慢慢慢的把所有的这样的边这样的慢慢的给合起来,那么合起来的话,前面给他加一个这个全这个全待会儿会讲它会有一个更新的公式,这个ec是什么呢。

这个nec就是一个bufunction on disting,什么意思,就是说我原来的这个假货币矩阵,我的第一步初始化就让这个甲壳币矩阵是行列式是大于零的对吧。

那么同时呢我也不希望这个假货币矩阵的扭曲太大,我所以我希望这个扭曲是小的,我希望控制这个扭曲是不大的,那么也就是说这一项,这一项能量其实是相当于是我们之前讲过的那些distortion。

比如说a mips,啊这你可能是这样的一个能量,那么使得上这个能量呢就是它不要太大啊,那么这个第三项你可能是一些用户想加了,他自己想想用户想加的能量,这就是我们可以可以有可以没有啊。

所以最后的整合能量呢就是这个e能达i乘上e sample,加上这个ec,那么你在整个的更新过程中呢,它会你这个那么大对吧,我们的目的其实是在这个优化过程中。

首先是首先啊甲壳比这个条件行列式大于零的这个条件一直是满足的,那么所以说我们一个是要让这个条件一直满足,第二个条件是我们要让这个最后要让所有的三角形都合起来,那么也就是要让这个能量这个能量是趋向于零的。

对不对,你只有当这个e simple这个这个上面这个能量趋向于零的时候,你所有的三角形才能够组装在一起嘛,所以你要让这个能量等于零,那么等于零的话,所以我们现在有两个两个目的,一个是要让这个能量等于零。

第二个目的是要让这个行业是不大,一直是大于零的,那么所以说我们这个地方调整这个那么大的时候呢,我们就会让它占整个能量的主导,那这个地方的能量就把它写成了这样的能量。

大家可以看这个括号里面其实是这个e assemble呃,就是除了这个e sample能量,就上一步迭代里面上一步dk不迭代里面dk不叠段里面的这个能。

后面这两项能量除上这个前面这项能量一三mple的能量,再乘上一个e拿命,这个命一般是取30的三次方,就相当于是什么呢,相当于是前面这项能量大概是后面这项能量的100倍1000倍。

那么这样的话你在这个优化过程中,你就能让前面这项能量慢慢慢慢的趋向于零啊,那么这样的话就是相当于这个e apple是占了整个能量的主导,然后它可以慢慢趋向于零。

然后但是呢这个为了让这个数值上有一些比较好,这个地方我还有一个有一个一呃南达max啊,那咱们max一般取10 16 16次方啊,那么下的话我就可以通过这样的一个优化的方式。

不同的不停的这个调整这个兰姆达,使得这个这个e assample慢慢慢慢的趋向于零,然后呢并且这个e diot呢为了让这个行列式值大于零呢,我们需要去做一个线搜索,先搜索。

的先搜索的这个保证就是这个整个先搜索过程中,我不产生这个翻转啊,如果产生翻转了,我就把这个部长给缩小,就翻转是肯定不能产生的啊,那么这样的话如果最后这个能量收敛了啊,如果这个收敛了。

那么也就是说这个e assemble就等于零了,这个呢同时也没有发生翻转,那么也就是说我最后所有的三角形全部拼拼在一起了,并且每个三角形上的行列式都是,每个三角形上假货币矩阵的行列式都是大于零的。

那么这样的话我就产生了一个无翻转的参数化结果对吧,那么整个的优化,的过程,你就可以用这个啊这方法去优化,因为这个一sample呢e s f这项能量它其实是一个二次能量。

这一项是一个传统的distortion能量,那么传统distortion能量我们在下节课讲的时候呃,会讲到它其实会有很多的这样的二阶方法去优化啊,那么所以说这个地方呢你就可以通过一个二阶方法去优化啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么再给大家看一个视频啊,等一下的时候,首先把它全部打散,全部打散了,然后通过这样一个优化过程,你会慢慢的把所有的东西,所有的三角形全部拼在一起啊,拼在一起拼完最后得到的这个结。

果就是一个无翻转的这样的一个参数化结果啊,那么接下来之前我们讲过这个在2d上有一个这个angle beats的,这样的一个flain对吧,就是把每个三角形的内角看成是一个变量,然后通过这个变量的优化。

然后去最后达到我们想要的这个结果,那么在真正在这个呃这个方法呢,后来被有人这个被友人推广到了这个3d里面啊,3d里面就是说我把每个四面体,每个四面体的这个每个条边上的这个二面角。

作为我们的这个优化的变量啊,就是相当于四面体的话,你可以看到就是有一条边,两条边,三条边,四条边,有五条边,六条边对吧,六条边对应的都是有一个二面角,每个这个里面的这个四面体里面的二面角。

最后呢也可以跟这个2d的里面有一个三角形里面的三个角一样,我也可以把它变成一个优化的变量啊,这个是15年的,有一篇西瓜文章啊,是二面基于二面角的这个四面体网格的映射啊。

然后最后呢他也可以去做这个角度的优化,大家可以看一下,大家可以让这个角度还是会有一些这样的提升啊,呃这个具体的算法我就不讲了,因为它的本质本质上其实跟a b f是类似的,但是里面加的约束会更加的复杂。

因为它相当于每个四面体,它需要通过这些二面角去给它会定义出来,这个算这个过程其实是计算是非常非常复杂的啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

今天我们的内容就到这里就结束了啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

简单的回顾一下啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们首先解我们讲的问题是这个输入上会存在一些翻转,我们希望通过一些方法去把这个翻转去掉,我们介绍了这个基于投影的方法,介绍了基于这个构造图空间的方法,介绍了这个惩罚的方法,介绍了基于这个面积的方法。

最后介绍了这样的一个通过改变这样的不同的这样的呃,表达的这样一个方法啊,呃从我这个长期做这个问题的这个感受来讲,里面最靠谱的就是我刚才提到的两个方法,一个是这个。

基于local glogo迭代的这种交替迭代法,然后他能够把大部分翻转去掉,但是会留下来那么几个翻转,那么这个时候你再用那个惩罚的方法再去做,基本上成功率会非常非常高。

如果一开始就直接用惩罚的方法做的话,就怕这个初始非常非常糟糕,那么你的惩罚可能会下不去啊,就大概是这样的一个整个的这个行情就大概是这样啊,呃我看一下助教好像没有给我反馈问题。

那我们今天的课就到此结束下课。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GAMES301-曲面参数化 - P4:Lecture 04 无翻转参数化方法-初始无翻转 - GAMES-Webinar - BV18T411P7hT

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们今天的内容是这个还是跟昨天一样,是这个计算一个无翻转的参数化或者一个无反转的映射啊,但是我们今天的这个初始是没有翻转的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么所以说呢问题大概是这样,就说左边是我们现在这个今天要讲的这个内容的输入啊,就是说这个这个初始化一般情况下,比如针对这个参数化的话,就是看他的第一次作业啊,就是用这个two diebing可以来生成。

所以我比如说我可以把这个边界放在一个圆上啊,就图图边界,然后内部的点是周边的点的那个线性组合,一个凸组合啊,那这样的话我可以求解一个线性方程组得到第一个减呃,但这个方案但是这样得到的这个解的话呃。

很显然他他的这个distortion,它的这个形变,或者说它的这个扭曲是比较大的,所以大家可以看到这个棋盘格的纹理贴上去以后,它的棋盘格已经没有了这样的一个呃图案啊,那么所以说呢。

接下来就是我们希望去对这个high distortion的这样的一个呃初始化,去进行这样的optimization啊,使得他最后的这个展现出来是一个low distortion的啊。

比如说大家可以看一下,并且并且是low distortion的时候,并且是一个嗯还是一个flip free啊,就现在这个初始的话,大家可以看一下它是没有翻转的,因为我们之前说的是那个totti。

其实有个理论的保证对吧,它可以保证他这个结果是一个双手,并且是一个没有翻转,那么最后的话我们希望去优化出来一个同样是一个flip free,并且是一个low distortion。

大家可以看到这边的棋盘格纹理就比较正了啊,所以这是我们今天要讲的这个问题,这个算法怎么去设计啊,啊这个问题应该讲的比较简单,那么这样就为了去解决这样一个问题的话。

其实会有一个通用的这样的一个framework啊,通用的一个solution,那么这个solution的kd呢,就是说它是从一个呃没有翻转的初始开始呢。

比如说刚才我们看到的那个tt in bedding对吧,从这个twitter in bedding开始,然后呢我在这个优化的过程中,它的但是它的扭曲会比较高,所以说我在这个优化的过程中呢。

我其实是优化的是optimized的,是它的the distortion,但是呢我其实还要满足一个约束,是always stay in the fleeper,flee space。

就是说我要让这个映射,或者说我要让这个参数化,它一直是在这个space里面的,而不是一直出去那么大,因为因为他是从头到尾都一直在这个space里面,所以说呢它最终的结果也就在这个space里面。

那么这样的话它就是还是一个无翻转的这样的一个映射啊,那么整个pipeline呢就大概是这样,啊首先是有一个初始化的,没有翻转的一个参数化,x0 是代表一个参数化,然后在这个x0 的基础上。

我去计算一个下降方向,就是去去去这个下降方向,是通过这个optimize,这个distortion这样的一个目标去生成了一个下降方向,他这个就是优化里面的给一个目标函数啊,一个无约束优化问题。

或者是一个呃就是一个优化问题,然后我去生成它的这样的是优化问题里面,去生成这样的一个生成这样的一个direction,就一个下降方向,然后呢沿着这个向量方向呢,我去做这个线搜索啊,这就是标准的这个。

优化里面的流程,大家呃如果学过优化的话,应该知道这个过程,然后呢接下来再往前去迭代对吧,然后去重新去生成计算方向,重新去做线搜索,那么呃最后呢直接到满足了这个收敛条件以后,接下来去输出。

那么稍微注意一下,再注意一下两点啊,第一点是这个在计算这个线搜索的时候,其实我们是要去计算一个步长,那么这个部长就是我们要让它这个always stay in the flip free这个space呃。

这个这个这个约束呢是一直是满足了,所以说我们这个阿尔法的选择是要满足两个事情,一个事情是要让,这个翻转的这个无翻转的这个约束是一直是满足的,第二个呢我们还是希望他的这个满足这个传统的,比如说沃尔夫条件。

或者说一些这种就是优化里面的一些这个线索索的一些条件啊,所以一般情况下是要保证两点一点是这个没有翻转,而翻转不会出现,第二是还是要满足这个优化传统的优化里面的一些呃,线搜索的一些条件。

比如说刚才讲的这个wolf条件等等啊,当然其他的一些稍微弱一点条件也是可以接受的,那么第二个是这个地方的这个下降方向,这个地方的下降方向,呢其实是接下来要介绍的这些所有的这些方法里面的最大的不同。

就是在这个下载方式的计算里面啊,就是说这个接下来看后面这个整个学术圈在这个发展过程中,或者说整个在这个计算这个d的这个方面是会有一些不一样的。

主要是make difference between the method,就是这个d啊,那么我们为了让它这个线搜索的时候具有,我们为了让他这个先搜索的时候。

能够保证这个flap free的这个约束一直是满足呢,其实我们会呃,其实会要求是最后的这个目标函数里面,其实会有一个barrier,的function的这样的一个特性啊。

这barry function是什么意思呢,就是他会在当一个里面的一个三角形或者一个四面体,它趋向于这个退化,或者说呃出现呃翻转的时候呢,这个能量函数是会趋向于无穷的啊。

那么也就是说嗯就是这个buy function,就是说它相当于就是说你在,如果你在这个你的目标函数里面会存在这样一个bufunction,就是说他在这个如果存在一个三角形或者一个数学体系。

趋向于退化或者是翻转的时候,它会趋向于无穷,这样的话它就会避免你可以去翻转,或者你可以去退化对吧,那么为了去,设置这样的bufunction的话,一般有两种。

第一种是直接就是加一个辅助的bufunction,比如说最常见的就是这个嗯行列式的负log对吧,就是他的那个就for log这样的一个最常见的bufunction。

那么对还可以用直接用这个distortion metric,比如说我们来看一下这个max能量,这个mix能量大家可以看一下,它是西格玛二分之西格玛一,加上西格玛a一分之西格玛。

那最后把它转成应该是西格玛一的,乘上西格玛二,西格玛一平方加西格玛二对吧,加起来,那么这个地方会有一个行列式,那么这个地方如果如果它是一个退化的三角,形或者说它是一个翻转的c它是一个退化的三角形的话。

那么也就是说它这个地方的行列式等于零的,对不对,因为但这个假发比矩阵的行列,是描述的是这个映射后的这个三角形的面积,除上这个映射前的这个三角形的面积,那么如果映射或者三角形的面积趋向于零了。

那么也就是说这个它的行列式就趋向于零了,那么行列式就趋向于零的话,那么也就是说这个分母就趋向于零了,分母趋向于零,那么整个式子就趋向于正无穷了啊,这是趋向于无穷了啊,那么所以说呢这个本身。

这种类似于这种mix能量,它其实本身也是具有这样的一个bl function的这样的一个特写啊,所以他最后比如说比如说这个横轴是这个行列式的话,那么这个目标函数你它会在这个趋向于零的这个地方。

它是一个爆炸式的一个bug,发一个爆炸式的一个长这个样子啊,那么这样的话他其实可以去在某种程度上去呃,它其实就是具有这样一个barrier的这样一个性质,那么也就是说你在做这个呃,现在搜索的时候。

你不要去超过他,就这个bl他可以障碍一下,就是把它给往后挪一挪啊,所以说这是需,要所以我们在这个设计或者说在优化的过程中,我们需要这个目标函数具有这样的一个barrier的这样的一个性质啊。

那么接下来我们为了去算这个赛道方它的这个总体的思路啊,因为我们刚才讲了,他这个目标函数设计的时候要有这个burier的这个特性,那么接下来去计算这个向量方向的时候呢。

而大部分的方法其实都是用一个局部的二次逼近,去对这个目标函数去做一个啊局部的二次to的,二次的二次的proclamation啊,所以对这个目标函数在这个局部去建立一个二次的这个to的二次的逼。

近二次的逼近而不是凸的,然后你这个地方你其实可以认为是类似于是一个泰勒展开啊,乘上它的这个向量,然后再乘上这个地方的二次项,乘上它的这个两个向量的平方,那这个地方你可以认为是他的那个黑森矩阵。

那这个是他的那个梯度,那么这个是那个它的那个你可以认为这是一个局部的一个泰勒展开,那么我为了我们,去让最后的这个方向是具有下降的形式的,我们其实希望这个能量一般情况下是一个二次的to 2。

突然二次的近似啊,那么这样的话我其实可以去保证最后的能量是一个下降的,那么呃去做这个泰勒展开以后呢,其实我们会让我们其实其实去只要去minimize这个minimus,这个优化这个目标函数。

我们就能去决定这个下降方向啊,大家注意啊,这个地方的这个你可以可以看一下,这个地方我写的是这个e的这样的一个它的梯度,但是这个地方的hr其实我没有写成,没有写成直接写成e的这样,的一个海森矩阵的形式啊。

其实我写了这样的一个h那说明什么呢,说明这两个东西可能是不相等的啊,可能可能是不相等的,那么反正就是这个地方是一个,所以说这个地方的呃,所以说这个大部分的方法就是说不同的方法的区别。

不同方法的区别主要就是在这个h i的这个构造上面,这个hr如果不一样,那么整个这样的一个能量函数也就不一样,这个局部的这样的一个近似也就不一样,那么局部局部近似这个能量函数不一样。

那么也就是导致了最后的这个下降方向不一样,所,以说呢所有的方大部分的方法的区别就是在这个h i的构造上面,那么比如说我们最常见的这个有三大类方法啊,第一类方法是这个一阶方法,第二类是你游的方法。

第三类是这个二阶方法,那你牛顿方法的话,就意味着这个地方的h i就直接没有了啊,就是h i就是不考虑了,那么所以说他只用了这样的一阶方法,他就不考虑了这个hr,所以他只用了一阶的导数信息。

直接没有使用这个二阶的导数,所以h2 就不考虑了,那么这个h2 就等于零啊,是,那么对象的一个拟牛顿方法的话,它是erotive actih r two。

approximate to the second,嗯对就是c2 阶的信息啊,所以说相当于在对于这样的理由的方法,就比如说最常见的呃b f g s的话,b f g s的话。

它其实会有自己的一套这个算法的算法去估计这样的hi啊,所以说hi就是这样的,比如他是他是用这个梯度和这个变量之间的这个difference,就是他们之间的差距,估计这样的一个梯度啊。

估计这样的h a h i啊,那么对于这样的一个牛顿法的话,他就会直接使用这样的啊,二阶的这样的黑森矩阵的信息去构造这个hi啊,那么也就是说这样的三类方法呃,它会呃他会用不同的方式去对这个hr去建模啊。

那比如说这个第一类就直接不用了,那第二类相当于他会用这个梯度之间的这个difference,和这个变量之间的difference,然后去构造这个h i,那么这个等会我们可以具体讲一些细节。

那么接下来这个牛顿方法的话,他会直接使用这个啊,原来这个能量的,就是原来这个e的这个能量的这个黑森矩阵去构造这个hr啊,那么所以说呢最后对于这样的一个下调方向的技巧,大家一定要注意,首先我们是呃的。

我去给它构造一个to的二次的逼近啊,注意啊是to的二次的逼近,然后呢,然后呢我们去这个地方的呃,就是相当于是构造一个这样的一个二次函数,那么这里面不一样的就是这个h r的构造。

然后呢去有了这样的一个二次的to的逼近以后,我再去计算它的这样的一个向量方向,计算完向量方向以后呢,我就可以去做先搜索了啊,那么这样所有的方法都不同,都是在这个hr的构造上面啊。

好那么接下来是这是一个hr的三类的方法,那么待会我们再继续讲一些细节啊,我们大概笼统的介绍一下,那么接下来是信搜索,那么先搜索的话,我们还是希望这个信搜索过程中保证两点。

第一点是呃刚才讲了这个还是flip free啊,就是两点,第一点是还是flip free,那么第二点我们是希望比如说wolf wolf的condition是满足的,condition。

coo n d i t are in condition,就是wolf condition和这个flip free啊,就是呃蓝色一般要满足这两个条件啊,那么为了这个满足这个第一个条件。

我们主要来讲一下第一个条件啊,要让他保证还是free free的,那么也就是说我们希望最后的是这个线索索过程中,能够保证它这个没有产生翻转,那么这个时候呢我需要就每个三角形它的面积都是正的啊。

就是它的那个有符号的面积是正的,那么我们可以来看一下,如果一个三角形就是u1 u2 u3 ,他经过这个是它的v1 v2 v3 ,是它的那个下降方向,就向量,方向阿尔法是他的那个步长。

那么这样的话它的这个新的三角形就是这个u2 ,u2 加u2 加上v2 阿尔法,那么u3 加上v3 阿尔法是这个点,v u一加上v一阿尔法就是这个点,那么我们可以去在这个线搜索的线索的过程中。

我们其实可以确定一个步长,使得它这个面积等于零对吧,那么只要我不超过这个步长,那么是要来所有的三角形都是正的,那么所以说呢我们可以考虑这个三角形的面积退化的情况下是对的,阿尔法是多少。

那么也就是说我只需要它的这个行列式,新的,这个三角形构成的这个面积等于零,你们就它的行列式等于零对吧,那么好的是等于零,那么大家可以看一下,这个是一个2x2的矩阵,2x2的矩阵。

那么求他的这个行列式的话,最后其实是关于这个阿尔法,是一个一元二次,一元二次的方程对吧,你把它交叉乘一下平方,所以你最后得到一元二次的方程,所以说它是关于阿尔法是一个二次函数啊,二次的多项式。

那么你接下来你要去解这个二次的多项式的话,其实你它一般情况下22你可以求根公式,直接把两个根给求到对吧,那么所以说呢这个最大的牧场其实对应的是那个最小的正根对吧。

那最小的正根的话相当于你这个地方你只能移动的,是,因为你一开始的这个二次函数一开始是正的,就阿尔法等于零的时候是真的,然后往前走,走到一个点是变成等于零了,那么也就是说是零优化参数。

比如说你这个地方是正的,这个地方是等于零,那么这一段就是你就是都能够保证面积是正的对吧,那所以说它是一个对应的是一个最小的正根的情况等等,所以说你对这个三角形而言。

它的最大的步长就是对应是这个一元二次方程的这个最小的正根,那么对于这样的一个最最小的正根的话,呃你只要去解这个一元二次方程,你只要用那个求根公式带进去求证就行了啊。

那么这样的话你对于每个三角形你都可以求得一个最大的步长啊,你你你只要不超过这个步骤,我的面积一定是正的,那么所以说对于整个的对于所有的三角形而言,你就是对这个所有的这个最大的部分再取一个最小值对吧。

你只要这样的话,你就能保证所有的三角形都做在这个这个牧场里面,都是能够去呃没有翻转的啊,那么这是一个线索的过程中,要去算一个最大步长这样一个想法。

就是这样的话它就能保证啊所有的三角形呃都是能够没有翻转的,然后在这个最大步长的这个对在这个最大步长的基础上,我们再去呃,让他再去做线搜索,就往后退,就再去缩小这个最大步长,使得满足这个wave肯定行啊。

第一部分是去计算一个这样的一个最大的补偿,使得它满足第一条这个没有翻转的约束,然后第二条在这个最大步长的基础上,然后再去做进一步的线搜索啊,保证这个步长是在缩小的。

然后呢它是满足这个waf肯定就是个能量能够充分的下降啊,所以他这个这个限速的过程你可以认为是有两部啊,那么最后的话这个常用的这个收敛条件的话,这个地方也会有三种,第一类是这个梯度小于一个给定的阈值。

或者说这个能量的相对变换给小于一的阈值,或者说是最后呃达到了这样一个固定的迭代数目啊,这个是跟这个传统的这种优化里面其实是差不多的啊,这个就不累赘了,不不不讲了啊。

那么所以说呢我们在在讲这个具体方法之前,我们再简单的回顾一下这个papi啊,首先是我们要生成这样的一个初始化,这个初始化比如说这个是这个two days in bin就可以生成。

然后呢接下来我们要在这个初始化的基础上去算一个计算方式,算一个向量方向,那算了下算上方下算下降方向的时候,我们主要是对这个函数在x处的,这样去给他去找一个啊to的这样的一个进啊。

就给他去找一个这样的进四啊,比如一阶方法,二阶方法,或者说这个拟牛顿法,那么主要都是在算这个进进四,刷完这个近视以后,你会得到一个向量方向,所以向下降方向以后,你也要去做先搜索,接收所知的时候呢。

你要保证两点一点是这个它是没有翻转的,那就需要又要去算,就要去算一个最大步长,然后在这个最大步长的基础上,你要去做这个进一步的线搜索,比如说你要让他最后的解释满足这个waf dition。

那么wolf condition的话呃,就是能够保证这个能量是充分下降的啊,然后你接下来再回过头来再去做这个计算一个向量方向,再去做一个线搜索,下降方向计算,所然后直到最后满足这样的一个终止条件。

然后最后就输出啊,那么所以说接下来所有的内容都是在这个地方啊,就下载方向的计算里面啊,那我们开始讲具体的方法,首先我们要讲的这个第一类方法是这样的,叫做一阶的方法,那么一阶的方法的话。

我们要介绍的第一个一阶方法是叫做呃block cootic descent,叫做坐标轮换下降法,或者呢它还有个名字叫做非线性高斯赛道迭代,nina高斯赛德ation啊。

就是说或者说两种方法都是代表着同样一个意思,什么意思呢,就是我们现在有一个这样的目标函数啊,这个目标函数呢它的变量是x一到x n。

那么我可以把这个变量呢分成这个omega 1 omega omega m m个block啊,传下去,我可以把这个变量我可以把这个我的这个变量变成一个m和block,知道吗。

就是说他每次呢每次呢就是它相当于这个m个block,然后你每次只更新一个block里面的变量啊,那么相当于就是我们之前讲,我们之前比如说大家应该学过这个高斯的迭代对吧。

然后高斯的迭代就是说每次我只更新一个一个变量去解方程的时候,然后呢接下来更新完一个,然后把这个最新的用进去,然后再去更新第二个对吧,这样一个思路,就是说我每次我把这个变量分成m个block。

然后每次只更新一个block,所以说呢整个的pipeline就是这样的,首先我有一个初始,有个初始呢,然后呢我接下来去解这样的这个地方不一定是凸的啊,然后我去解一个子问题,territory。

这个子问题是什么呢,就是这个这个是我的这个当前的这个变量,bl是当前的变量,然后呢这个是这个相当于是从b一到bl减一的,是已经是已经是update过的,就是跟我们高三的迭代一样。

你从这个x x一到x n,你这样一个迭代过程,其实你是先会更新x1 ,再q更新x2 ,再会更新x3 对吧,那其实你这个地方其实会也会像前面就说你在更新这个xl的时候。

其实你的前面的x一到xl减一其实已经更新过了,所以这个商标是dk次的,但是后面这些呢其实你还没有更新,所以说是上一部的k减一部的,那么所以说在每一步的话,它对于只更新这样的一个block啊。

所以说这个为什么叫做block called descent,所以你他在每一次都是去解一个子问题,这个子问题就是只有bl是一个变量,然后呢他把这个l从一到m全部的遍历一遍啊,相当于先解。

把先把b一当做变量去求解一下,再把这个b2 当做一个变量求解一下,然后最后把bm去当做一个变量求解一下,那么比如说对于这个我们的这个参数化问题而言,比如说我们现在有一个呃参数化这样一个一堆的三角形对吧。

2d上会有一堆的三角形,其实我这个天然的这个blog其实就可以把一个顶点的两个位置,一个顶点的,比如说这个点他的那个变量其实应该是ui a v i对吧。

我们可以把它的这两个两个位置的变量作为一个block,就是b是吧,那么也就是说我每次呢相对于我们这个问题的话,他每次去比如说更新这个b一的话,你可以认为是更新这个u1 u u1 v1 。

就是比如说这个第一个顶点的这个两个位置,然后去更新这个b2 的时候,其实是更新是第二个顶点的位置,然后b3 是更新第三个顶点的位置,更新这个bl的话。

其实相当于是那个ul v l就是dl的那个顶点的位置对吧,所以对于这样的我们的这个参数化问题而言,你可以相当于是一开始有了一个to listing bing。

然后呢你其实是主点的去更新我们的这样的一个目标函数对吧,所以说大概对于我们这样的一个参数化问题而言,就是我刚才已经掌握了,最简单就是把这个block变成这个u1 v一啊。

就是每个顶点的位置当做一个block,当然如果你你的这个呃,你也可以去把它更多的变量当成当成你想要去做的,比如说你这个地呃更多的啊这个地方这个地方另外再说啊。

啊这个地方就不是我们我们主要讲的就是一个顶点当做一个blog啊,那么所以说呢这个呃就可以利用这种思想啊,就刚才刚才介绍的思想,把所有的三角形呢的每一个顶点当做一个block,然后每次只更新一个顶点。

那么这个地方有两个不同的方法,这个是不精确的b c d,一个是精确的b c d是什么意思呢,就是你每次去求解这样的一个子问题的时候,每次你去求解这样的一个子问题的时候,你会把它求解到直到收敛。

其实你只会去做一个简单的,比如说梯度下降就在这个地方,你是不收敛的,就你相当于是直接去给他做一个呃,你可以认为就是相当于就是只在这个地方稍微显示稍微走一步,就是你只要保证它不翻转就行了。

或者说保证它能量稍微下降一点,但是他你不会去保证这个地方一定是啊,这个局局部的这个子问题是收敛的啊,那么最后呢我们在这个参数化的问题上,其实会展现出来更好的一个收敛性,或者说最后的能量会更低啊。

而这个能量不好,相当于是什么呢,你在整个的局部虽然是很贪婪的,找到了最优,但是你导致整个因为你太贪婪了,然后导致你最终的这个收敛性会变差一点,就是你相信哪一步,你虽然走的不是最优的。

但是你都在往那个好的方向去走,然后呢给大家留的空间都比彼此都比较大,这个b c d最后的效果会比这个呃每一步都求到他收敛了,那么所以说呢最后这个我们会发现这个in excb cd呢。

它的这个速度会更加的快一点,然后它的这个目标函数会更加的小一点啊,那么所以说呢这个对于这个问题的话,就是初始化还是与来自于这个呃to this invading啊,那么然后block的时候呢。

就是我们其实每次都是呃,当然这个地方如果你用引入了这样的一个graph color以后,其实你的刚才我们介绍了这个block,其实不一定是每个顶点的位置是一个block。

其实你可以对这个你可以把这个网格顶点当做一个图,然后你给他去上色,然后相邻的两个顶点之间,它不要是呃相邻的啊,相邻的魈相邻的两个顶点之间它的颜色是不一样的,那么这样的话你最后用在这个图上。

你可以去给它做一个色,然后呢然后就是说所有的这样同一种颜色的点呢,其实我可以是当做一个block,然后去同时去做这个呃下架啊,这个是呃这个是就是另外一种另外一种block的这个方式啊,就是。

可以作为并行的方式,然后对于每一次在求解的时候呢,每个顶点它只是只做了一部的梯度下降,他没有去做这个还有收敛,没有去迭代,当他收敛啊啊那这个是这个第一个一阶方法啊。

那么接下来我们要讲这个第二个第二个一阶方法,那么对于我们的现在这个目标函数而言,这个fx等于h x等于gx,就相当于说我可以把我们的目标函数拆成这样的一个啊,h x加上gx的这样的一个形式啊。

那么比如说我们来举个简单的举个例子啊,比如说它的这个对于一个三角形而言,它的对称,狄利克雷能量啊,对称狄里克雷能量是应该是西格玛a一的平方,西格玛一的平方加上西格玛一平方分之一,加上西格玛二平方。

加上西格玛二平方分之一,那么其实你这个h x呢就可以变成西格玛一的平方,加上西格玛二的平方,加上呃西格玛a一平方,西格玛a2 平方,西格玛a一平方加上西格玛a2 平方。

那么你的这个tx呢是这个你的h x呢其实是这个,那么所以说呢你的h x其实是可以是一个简单的形式,因为西格玛一加西格玛一加这个西格玛的平方,就是这个甲亢b矩阵的这个f算数的平方对吧。

那你这个f数的平方的话,其实就是一个二次项能量,所以说呢你就可以把这个hx呢,把这个你的目标函数fx等于h x加gx,你就可以把它转成一个二次项能量,再加上一个gx gx是一个比较复杂的。

然后呢接下来你在这个y这个点,就y n这个点你要去做这样的一个,它应该等于这个hyn加p,然后等于g y n加p对吧,就是你这个式子带下来,然后p呢你可以试它的,这是一个计算的向量方向。

然后呢你在这你在yn加p这个地方,你去给他去后面这一项啊,就前面这一项你就这个二次函数你就直接写下来,但是呢你在这个后面这一项的时候,你去做给他去哇,你对y你对g这个函数去做一次泰勒展开啊。

是在这个yn这个地方去做一次它的展开,那么所以说他只取了它的这个一次项,这是它的这个目标函数,就是它的这个梯度,然后存到一个三角方向p对吧,所以说相当于这个是它的一个taylor,啊泰勒展开。

taylor expanding就是一个泰勒的一个展开,那么相当于为什么是可以这样呢,相当于就是说因为这个后面这个目标函数比较简单,也就是说后面这个目标函数它其实只用了一个一阶方法,就是梯度下降吧。

一阶方法,啊一见方法就是一个泰勒下降啊,就是一个梯度下降啊,就给他做这样一个泰勒展开,如果你只做这个不把二次项要加进来,那这个地方其实就是一个开发者,就是一个梯度下降啊,但是呢因为前面这一项呢。

我们在做这个分解的时候,我们已经假设它是一个二次函数了,所以我这个二次函数就直接写下来了啊,所以这个因为你不存在任何的近似,所以这是一个二次函数,这是一个对这个上面的一个一阶的近似。

所以你最后就会得到这个fy加y n加p,就是你可以认为就是这个整个就是这样的一个近似方式啊,啊为什么要取成这样一个定制方式呢,就是因为这个文章里面这样,因为这一项的话,它其实就是二次就取下来了。

这一项他就比较呃觉得不太好,然后呢接下来你就去给他去做这个向量方向的计算,那其实就是给他去求一个梯度,让它记录等于零对吧,那你求这个梯度的话,这个地方因为前面这个第一项是二次的。

所以你求完梯度就是h5 n加p,然后接下来后面这一项,那么这一项这个是目标函数值是在y n处的,那么它其实不是个变量呃,关于p不是个变量,因为p是一个呃向量方向p现在现在的变量是p。

那么你对后面这个求导呢,其实就是它本身,那么这样其实就是它这个这就是它的梯度,那么所以说你最后你会就会得到这个y n加p,就等于h的转置乘上这个,所以这个会得到的是hp等于负的h乘上y n减去。

这个等于就是负的在yn出的这个梯度啊,就这样的话你的下降方向p的话,其实就是h的逆乘上负的这样的一个梯度啊,从这个式子我们可以看出什么呢,就是我如果这个目。

标函数可以把它分解成这样的h加上g的这样的一个形式,那我只取这个g前面这一部分的这个二次项的这个梯度,作为我这个地方的这个目标函数这个东西啊,那么其实这个地方最常用的这个h是什么呢。

就是一个网格的拉普拉斯矩阵啊,就是说如果你的函数是可以分解成这样的一个to一个二次的形式,再加上一个这样的形式,它就可以用这样的一个啊cross的一个简单的。

你可以认为这个是一个简单的一个二次的一个呃一个process啊,就是它的一个二字在这个局部的一个近似,它只是只不过这个地方的近似呢,把这个后面这一项就用的是一个一阶的近似,前面这一项因为他是这样的。

可以做二次展开,所以他就直接用了2g的近似,那这个地方它这个最常就是最常见的这个h呢,是那个网格的拉普拉斯矩阵啊,那么有了这样的方法以后呢,他这个还是不够的啊。

就如果直接去用这样的一个拉拉斯矩阵去做的话,还是不够的,其实是有一些呃相似的地方啊,当然这个地方不是完全一样啊,大家可以看一下这一步,这一步其实就是我们上面讲的这个计算这个向量方向的过程啊。

这个前面这个h它是一个二次函数对吧,后面这是一个呃g这个函数的这个一阶的一阶近似,那么然后通过求解这个东西呢,我就可以去求解一个向量方向,在这个地方有向量方向以后呢,我就可以去做一个线索索,大家注意啊。

这个地方有一个yn和这样对x n这两个东西是有点不一样的啊,它是通过这样的一个线索索,然后线索所得到的这个变量呢就是y n加上tp呢,就付给这个x z n啊,这是他的这个线搜索的这个得到的x n呃。

大家可以我可以换一下啊,这个地方是比如说这个地方是y n,然后呢它沿着这个方向p n,然后呢得到了这个点,这个点是x n对吧,那么正常情况下应该是我直接把这个x n放到这个目标函数里面,然后去求解对吧。

就是去求解得到下一个赛道方向了对吧,我应该是把这个x n n付给y n加一,然后放到这个目标函数里面,再去求解它的向量方向对吧,但是呢他其,实没有,他其实不是直接把x n负给。

这个是没有直接去付给这个yn加一,它这个yn加一是等于什么呢,y n加一是等于一减西塔乘上,然后y n加一,那么这个地方应该是这个x n对吧,x n加上啊,减去减去西塔乘上x n减一,那么什么意思呢。

就是它它是在这个的点和前面,比如说前面我这个地方还有一个点是x n减一,它是由这两个点的一个线性组合,会得到一个yn加一,这个应该是一个y差的一个形式啊,这个c它比如说大于零的情况下。

其实就是沿着这个方向,沿着这两个点,连起来的这个方向去做一个外差,那么得到这样的一个y n加一,然后在这个问n2 n加一的前提下,我再去做这个下一步的这个信息搜索啊,再去去去求解相关方向。

然后再去做现搜索,其实大家可以看成是什么呢,它这个y n加一其实是由这个xn和xn减一去做一个线索,是做一个y差,y差去得到这样的一个yn加一,然后在y n一加一的基础上再去计算一个向量方向。

再去呃计算向量方向以后再去做线差啊,再去做这个线搜索,那么这样的话这样的一个这样的一个外插的形式呢,它其实会带对这个优化问题,相当于是可以往前进的更多一点啊。

那么这个地方其实大家可以看一下这个地方其实用的是什么呢,用的是x n减一和x x n,或者说用的是xn和xn减一去,这个计算的这个y n加一啊,其实也是比如说你当前算出来一个x以后。

其实这个地方的x不是我现在的这个呃,这个这个这个这个这个最终的这个目标函数的这个点,其实我们还是会去把它的前面几次的目标,好像前面几次的这个点的位置,跟这个当前这个点的位置去做一个线搜索对吧。

这个地方其实用的是一个普通的这样一个外插的形式,那么其实还有上节课讲的类似这种类似这种思想还有很多啊,还有这个之前这个同学学里面也有人用的这个切皮肤,切比雪夫的这个差值啊等等,呃。

所以说这个地方会有一些不同的策略,那么最后的话这个地方最后他的这个方法a q p的话,会比这种lb f g是收敛的会更加的快一点啊,但是说实话这个a q币还是很慢,还是不能还是不怎么行啊。

就是他虽然在这个地方,他只是写篇文的时候展示了几个例子,好像很好,但真正如果去跑他的程序的话,最后这个结果其实收敛的还是不是不够快的啊,那么接下来我们要讲的这个呃。

第三个一阶方法的话是这个l呃s s l i m啊,这个方法最近好像呃这个方法比较的啊好啊,比较的就是受嗯,可能大家知道的人比较多吧,我也不知道为什么啊。

啊这个方法的这个目标函数就是要优化这样的一个能量对吧,就是我们之前的定义的这个能量,那么这是一个distortion项,这里比如说最常见的就是一个对称迪利克雷的能量啊。

就是我们现在要优化的是这样一个能量,这个能量来说,这个d呢你可以去提现不同的形式,那么只不过在这个地方呢,我们用这个对阵迪利克雷能量作为这样的一个呃例子啊。

所以说最后的整个目标函数是要优化一个面积乘上一个呃diortion,然后呢我们之前不是讲了吗,其实最重要的一点是,我要在这个目标函数的目标函数的这个局部去构造一个近似对吧。

我去构造一个approximation,就是我要在这个当前的这个迭代,比如dk次迭代,比如说在这个dk次迭代的时候,我其实要我要去对对他去做一个process,就是要去做一个to的近似,就是一。

个to的二to的近似对吧,那么所以说核心的问题是怎么去构造,对于这样的一个目标函数,它的一个突破近似,他从另外一个角度,他没有从这个之前那些我们讲的那些什么泰勒展开啊,等等那些地方去呃,做这个事情。

他好像是从另外一个角度来去思考这个事情,那么我们这个地方的这个目标函数的目的是什么呢,这个地方这两个这两个函数的目的是什么,其实我们的目的是要让最后是一个iso magic mac对吧。

就是我们其实要让他的优化,比如优化这个对阵delegant,能量其实我们最后其实希望他最后的能量表现出来是一个等距的变化,咱们对于这样等距变换的话。

我其实可以用这个我们之前讲过的这样的一个a r a p这样的形式,对不对,就是前后b矩阵减去这个它的旋转矩阵,那这个当时的目的也是要让它是满足,是变成一个等距变换,对不对。

那么但是如果你直接用这个的去做这个process function的话,其实是会不会太简单了对吧,其实也没有什么自由度,所以说他在这个地方给他加了一个全啊,加了一个权,那么对于这样的一个加了权以后呢。

它,的整个的呃这个plus function就可以写成什么呢,就是一个全乘上一个呃甲合并矩阵减去一个旋转矩阵,就是一个这一个这样的一个形式,然后再去打f数,那么我要让这两个韩剧。

我要让这个process function去近似这个原来的这个process function,那就这次去近似原来的这样的一个目标函数,那么我们来看再回到前面来看一下啊。

我们来看一下前面这个地方的approximation,大家可以看一下,我们其实也是用一个我们的目的,是要用一个局部的二次凸的这样的一个近似,去对原原来的目标函数去做一个近似,那么对吧,那。

么最起码最最起码你这个构造出来的这个近似,也就是说这个,对吧你要最起码要保证这一点吧,否则的话你没法保证,你看你对这个目标函数去做,你对这个你对这个目标函数去做优,对这个左边这个目标函数去做优化的时候。

那你其实最后取得这个下降方向也是要跟这个下降方向,这个p其实也要点乘上它的这个梯度,点乘上这个梯度,他也是要小于零的,那这样的情况下才能够保证它是一个向量方向对吧,那否则的话你不能保证向量方向。

那么你既然去优化它的时候,你要保证它这个是一个向量方向,那么你其实你要跟他,你要你要如果这两个相等的话,也就能保证这个p它其实也是一个向量方向。

那么所以说呢我们希望这个构造出来这个process function,它的梯度是跟这个后面这个梯度是一样的,就跟原函数的梯度是一样的,所以说呢对于这样的一个呃这个地方呢。

用ai p的这样的形式去构造对原函数的一个process方形,或者它是一个近似的一个局部的to的近似的话,其实我也要让下面这个函数的这个梯度跟上面这个函数的梯度,而跟原函原来的目标函数的梯度要要要一样。

所以呢我希望这个这个新的这个目标函数的梯度跟,就是这个process function的这个梯度,跟原来这个目标函数的这个梯梯度是一样一样的,那么这样的话我可以推导出来我们的w取什么什么式子啊。

啊这个距离推导这个下面这个推导我就不讲了,所以说这个地方的核心的思想就变成了什么呢,我需要去构造一个process function,rest function的梯度跟原来的目标函数的梯度要是一样的。

但是大家注意,因为这两个目标函数它其实都有一个趋向于各项,就是要让它变成一个等距变换的这样的一个趋势,那么,所以说呢这两个取这样一个profunction也是比较合理的啊。

那么所以说整个的papon就变成了什么,首先我要因为我要用a r a p对吧,那我就要用上一步的这个就load hop,相当于我要用这个甲壳币矩阵来算这个旋转矩阵,说完举权证举证以后。

我要去计算这个全对吧,我要去根据这个形式去计算它的这个全函数,就根据这两个梯度一样,根据梯度一样,我要去算这个全函数呃,全算这个全函数,算上调函数以后呢,我就可以去解这个方程,这是一个二次的目标函数。

那我其实可以去解析,我可以去得,到它的最优的一个顶点,那么我最后的下降方向,就是用这个pk去跟上一步的这个位置去做一个差,那么这样的话我会得到一个向量方向,那现在方向以后呢,我在这个下方向再去做。

先搜索,先搜索完以后呢,我就会得到一个新的顶点位置,那么我有一些新的甲和假货币矩阵,其中甲壳币就是以后呢再去算这个新的r,算完r以后呢,根据这个梯度相同啊。

根据这个process function的梯度跟这个原函数的梯度要一样,我现在去算这个w,然后再去解这个线性方程组,然后得到一个p啊,这样这样一,个迭代的过程啊,这个迭代呢通过这样的迭代机可以看一下。

对于这样的一个很复杂的一个目标,还有一个例子呢还一开始是一个这样的一个扭曲比较高的形式,它通过一个大概20次的迭代,整个整个最后的这个目标函数就变得比较小了。

好那么这个地方是我们介绍了这样的一个一阶方法,主要是有这个block colonent design对吧,就是这个坐标轮换下降法,或者说我们叫做非线性高速赛道迭代,然后接下来又讲了这个a q p。

然后接下来是这个介绍了这个呃l s l a s s l i m这样一个方法,它是用一个a r a p形式的这样一个plus function,是对原来的目标函数去做一个近似啊。

那么接下来我们要介绍的是这个牛顿法,那么你牛顿法的话,首先是这个最常见的这个b f j s的方法啊,b f g s的话,首先为它会引入一个割线方程啊。

这个这一页ppt就是传统的这个l b f g s的这个优化的这个呃,整个的这个流程啊,那么它其实是首先是对这个fx在这个x n处去做一个它的展开,它的展开的话,它这个地方就会有这个x f x n。

加上它的梯度乘上x减去这个呃位置的这个difference,再加上这个位置difference乘上一个ha矩阵的difference,那么我对这个这个f x求完这个开了展开以后,我对他去求一个一阶导数。

让一阶导数等于零啊,那么随之后就会得到这样一个式子,这个然后呃不是让他的一阶导数等于零啊,是求f x的一阶导数,然后呢l x等于x n啊,那么所以说我对它求完一阶导,求完一阶导以后。

令x等于x n那么这样的话左边就等右边就等于,而一阶梯度成梯度在x n的地方的取值,那么右边求导求导的话,第一项这个地方就没有了,那这个时候后面这一项只有这个二次项乘上这个x减去x n加一。

那么并且这个地方x取x n的时候和这个地方是x n减去xn加一啊,所以说第一个是球这个梯度,然后令这个x等于x,那么这样的话我会得到这样一个方程啊,这个方程就叫做或者这个方程。

或者下面这个方程叫做这个呃割线方程啊,那么这里大家可以看一下,相当于是把这个梯度这一项,把梯度这一项移到一边,把这个呃这个位置这一项移到另外一边。

所以我们就会发现是h n加一乘上x n加一减x n等于呃,在xn处的梯度减去在x在x n加一处的梯度,减去在x n处的梯度啊,所以后面这个地方呢其实就是这个地方的呃梯度的这个difference啊。

这个前面这个地方呢其实就是这个position的difference,所以说最,后呢这个sn那我们就继承这个position的difference,y n呢只有继承这个梯度的gifts啊。

所以我们就会有这样的一个方程,这sn是position的difference,yn是这个梯度的difference,然后最后呢我引入一个辅一个变量叫d n加一,d n加一。

你可以认为是这个h这个hen直接能逆啊,那么这个在呃bf js里面,最常见的是这样的一个叫做rank to的一个modification啊,就是我在这个过程中呢,我其实是根据这样的一个割线方程。

就我根据这样的一个割线方程,我去求解这个dn加一啊,然后我引入了一个是只要用有上一步的dn加一,我只要去,然后最后呢我就可以得到最后的d n加一了,他们是什么意思呢,也就是说我给你一个d0 。

那么我就可以通过这样的一个形式,我可以去构造第一,构造第一以后呢,我这些都有了,我就可以去构造第二,然后等等等等等等,这样的下次,那么你有了这个dn以后呢,其实就意味着你把这个dn其实是你看啊dn的。

你看在这里面代表的意思是什么,代表的其实是这个黑森矩阵的逆对吧,那么也就是说你有了这个黑森矩阵能力,那么黑森矩阵力乘上这个,不提土方向,其实这个地方就可以作为我们的向量方向了对吧。

那么所以说呢整个的这个b f g s方法呢,主要就是在这个地方去构造这样的一系列的黑森主角能力,但这个力呢它整个构造过程它是一个递归的构造过程啊,或者说是一个递进的构造过程,它其实用的是上一步的。

然后带进去算出来下一步的,然后并且他在计算的过程中只用到了这个呃,只用到这个position的difference和这个梯度的difference,那么整个构造是比较简单的啊。

这个就是课本上的标准的b f g的方法,注意啊,他这个地方,用的是一个梯度的difference和这个position的difference,那么在后面有一篇文章,18年有一篇文章里面。

就是他对这个b f l b f g s做了一个简单的改进呃,是什么意思呢,我们来看一下啊,就是如果如果在一些三扭矩比较大的三角形的地方,你去考虑这个梯度的difference,大家可以看想一下。

如果有一些三角形或者有一些四面体,它这个局部它这个地方的变形比较大,那么也就是说这个地方的这个目标函数值其实是比较大的,这个目标函数值是比较大,然后呢如果你在这个地方给他去求一个梯度,那这。

个梯度其实是会非常非常大的,那么这样比较大的梯度,然后你构造出来的这个y n呢就会表现出来一个非常复杂,或者说他这个值会非常的变,非常的不好,所以你可以认为它相当于这个值很大。

因为它这个地方的这个扭曲比较大嘛,然后你给他求完梯度以后,这个地方的梯度也会变得非常的夸张,然后你再给他去求一个difference,求一个difference。

就是前后两个点一段时间的这个difference的话,这个梯度的difference的话,那其实它整个这个表现出来这个数呢就会比较奇怪,或者说它这个树的形态会比较的,差。

那么所以说呢你最后得到了这个yn的,其实是在整个的优化过程中会变得不是很可靠,那么也就是说你在这个地方你得到了这个yn就是这个y n,你去再去用这个y n s n再去构造这个dn的时候。

你整个这个值这个构造出来的这个黑色矩阵的逼近就不是很好啊,那么所以说呢他在这个后面这个地方他就用了一个什么呢,用了一个这样的一个形式去代替这个y n对吧,那么我们看一下上一步。

这地方的y n应该等于h乘上sn等于y n对吧,那么应该是h n加一乘上sn等于,y n对吧,应该是长这个样子的,所以说y n呢应该是等于这个黑森矩阵乘上这个sn,对不对。

但是呢你因为你的这个地方的这个心态不好,所以我希望这个我不用这样的形式去构造这个呃,呃我不用这个形式去构造这个hn乘上sn,那么大家回想一下,我们之前在讲这个a q p的时候,其实我们也讲到了。

他会用一个二次process放在那里,那二次process其实用的就是一个拉胯矩阵,那么也就是说它的这个海森矩阵我其实可以取成一个固定的,那么比如说这个地方我就取它的这个拉普拉斯矩。

阵就是网格的这个拉普拉斯矩阵l作为这个地方的hn加一,然后我就很简单的直接让这个我的y n呢就等于l乘上sn加sn,什么意思,就是说我原来这个地方要用一个很复杂的h n加一,去计算这个yn对吧。

但是我现在用了一个很简单的l n直接去上y y n,那么这样的话我相当于就有了就是relic y n with这个lsn,那么也就是说我在这个前面这个呃l b f g s里面,本身应该是这样去迭代的。

对不对,就是y n乘上s n,s n乘上y n啊,这个地方还有转置,那我把这个地方的外轮呢,全部转成l乘上sn,然后我把这个这个地方带到这个式子里面,再去计算我这样的一个呃dn。

dn就是这个海森矩阵的逆啊,我就计算这个黑森矩阵力,所以这个这个paper他当时的想法也很简单,就是我直接把这个地方的y n用这个这个向量去代替,重新再去计算啊。

那么这样的话他最后能够表现表现出来的这个能量,表现出来这个形式会呃修理性会更加的好一点啊,就是在这样的问题里,主要他的发现还是说这个yn在这样的构造形式下,它其实它的形态比较差啊,那么最后但是呢他。

的最终的目的还是希望能够拥有这个l b f g s的这个收敛性,那么也就是说这个地方我们刚才讲了,就是说这个y n呢只是在这个开始的时候扭矩比较大的时候,他的心态比较差。

但是呢如果我最后的三角形的质量比较好,就是我的这个扭曲下去以后,就这个discortion已经下去以后,它其实这个外轮就可以恢复成正常了啊,那就是说他最后用的是这样的一个线线性加权的形式。

那么这个地方的这个贝塔呢,一开始的时候就贝塔在开始的时候呢是比较的呃,在开始的时候贝塔应该是,一个e的形式,然后呢它最后慢慢慢慢下降到零啊,就是你如果一开始的贝一贝塔,一开始贝塔一开始是等于一的。

那么也就是说前面这一项是等于零对吧,那他也就是说主要用的是这个l s n去代表这个y n对吧,所以一开始因为一开始的时候心态比较差嘛,一开始的时候有很多很多这个扭矩比较大的三角形。

或者扭矩比较大的那个四面体嘛,所以说他一开始就取了一个一,那么这样的话我主要用的是l s g,l s n去作为我的这个去估计这个bf js里面的这个呃黑森矩阵的,逆对吧。

然后呢接下来慢慢慢慢到最后就变成零,那么什么意思呢,最后就是说我不用了,这个后面这一项我只用这个y n了,那么就是说我最后的能量已经下降到一定程度了,那么就这个时候我在用这个yn去做的话。

我最后的这个形式也会就是相当于我会回回归到最终的这个lb回,最终会回归到这个bf js里面,那么这样的话我最后的bf js里面,因为它还会有这个超线性的收敛,那这样的话我最后整个最最后的收敛阶段。

我还会有这样一个超线性的收敛啊,大概是这样的一个形式,贝塔是从这个一慢一慢慢变到零啊,那么最后大家可以看一下,这个是这个是他们自己的这个方法啊,就这个绿色的线是他们自己的方法,他就会呃会比他们。

比如说会比这个传统的这个l b f g s是这个呃这个线,这个线不会比他会好很多啊,啊接下来这个前面讲完了一阶方法和这个这个说明,这个叫做你牛顿方法,你游的方法以后,我们接下来进入这个二阶方法啊。

那么二级方法的话,首先我们来简单的把这个二阶方法从头到尾给建大,家自己按照这个我们先给大家介绍一下整体的这个情况啊,首先是这个二阶方法的话,他最后的这个收敛速度一般是比较快的啊。

但是呢这个二阶方法他需要去非常就是花费非常花费很多的时间啊,花费在哪里呢,第一次去组装这个python矩阵啊,就是你要去计算这个python矩阵,计算黑森矩阵的过程本身是比较费劲的。

第二是你要去求解线性方程组,因为你有了黑森矩阵以后,你就要去求解线性方程组,那么接下来你还要去呃,最后还要去这个,有分封这个比如说你用这个直接法去求解线性方程组的话。

你要对这个举措进行啊分解分解完以后你要去这个回带啊,所以你还要去回答这个新的线性方程组,但这个回答这一步的话啊,如果你说啊,当然你这个所以你每次都要去对这个三的过程重复去做啊。

啊唯一的好处是它可能如果你的这个矩阵的这个pattern,如果它的矩阵的非零元素,吸收矩阵的非零元素,如果是固定的情况下,那它的其实它的这个呃他的这个分解的那个符号分解,就是它的内存分解啊什么的。

其实可以复用,啊这样的话反而也也还可以接受吧,那么二阶方法的话,它其实是用直接用的是这个能量的这个黑森矩阵啊,这个python矩阵就长这样子,然后来近似得到一个proceed matrix h。

所以我们之前讲了他所有的这些方法的不同,都是在这个计算h的时候不一样啊,那这个地方它就是用了一个直接用了黑森矩阵,那么这个呃当然是啊,如果是个凸能量的话,这个直接可以直接拿过来用。

但是如果是一个非凸的能量的话,你构造得到了这个黑森矩阵,它其实是一个不是对称,正不是正定的呃,不是正定的情,况下那他其实最后得到了这个下降方向,那其实不一定他得到了那个下降方向,不一定是真正的下降方向。

能量可能不一定下降,得到这个h a啊,使得它最后的h是一个呃半正定的病,然后这样的话才能够最后得到的这个方向是一个向量方向啊,这是在这个呃也是优化里面一个最基础的基础的一个结论啊。

那么接下来所以说我们的目的是,要去,所以整个的这个二阶方法的目的都是在去用这个黑森矩阵去构造,这个呃,去去用黑森矩阵去构造,最简单的方法就是说我既然这个矩阵不是正定的对吧。

那我其实只要在这个对角线上去给他加一个number i,这个拿不到是一个正数,这个i是一个单位正,那么这个我把这个负给这个h对吧,那我这样的这样的一个构造方法,我这个兰姆达足够大的时候,这个h总是。

一个半正定的,对不对,因为我只要这个拿不到比这个前面这个黑森矩阵的最小的那个特征值,比如最富的那个特征值,我只要让他这个拿不到的,绝对拿不到的,绝对值比那个那么大的。

比这个前面那个最小的特征值的绝对值大对吧,我总能够保证它这个黑色矩阵是一个镇定的,他一般情况下会收敛的很慢,因为什么呢,因为你其实是对原来这个矩阵修改的这个量非常大。

如果这个拿姆达趋向于非常非常大的情况下,那其实这个矩阵就是占占主导了,那这个这,只是占主导的情况下,那最后这个优化方法就退化成了梯度下降啊,所以说这个呃直接在这个原来这个黑色矩阵上。

整体上加一个对角阵的话,使得会最后会使得这个呃优化的这个效率会变低,收敛性会变差啊,那么所以说呢我们一般情况下,我们我们来考虑一下我们的这个问题啊,我们现在的问题一般情况下是一个呃这样的一个目标函数。

是一个西格玛t的一个目标函数形式,那么其实它是在大家可以看到它是一个sigma t的形式,也就是说它在每一个三角形式上,或者每一个四。

那么其实如果我对每一个所以说呢他这个整体的这个global的黑森矩阵,就整个这个西格玛求和的这个海森矩阵的,它其实是可以来自于这个每一个黑色矩阵的家啊。

就是说我现在其实可以比如说我原来目标函数的这个黑森矩阵,其实是还是可以写成这样的一个形式对吧,那么现在我们其实我的还是整个整体的海森矩阵,其实还是可以写成这样的一个局部的一些黑森矩阵的这样的一个局部。

还算矩阵的这样的一个和,那么写就是我只要让这个里面,的这个每一项,我只要让这个的每一拆分矩阵,它是一个ht的一个证,它是一个镇定的,那么我再把这个镇定的再加起来,西格玛t正加起来。

这个以后得到这个最终的这个h的话,那其实这个这个矩阵也是一个半正定的,对不对,那很简单的验证起来也很简单,那么这样的话,所以说也就是说我所有的这个大部分的这个二阶方法。

现对于我们这样的一个很特殊的这种局部加的形式的目标函数的话,它其实只要去局部的去修改这个目标函数dt,然后使得它每一个局部的海森矩阵都是,镇定的,那么最后整体的海森矩阵。

我就实际上这些局部的海森矩阵加起来就是我想要的整体的海森矩阵,那么这样的话整个正拍成矩阵,只要是这个ht正,它是一个半正定的,那么加起来以后它还是一个半正定的,那么吃药的话。

这个呃这样的话我的问题就会变得比较简单,为什么呢,因为这个ht正他其实只考虑了这个h d t对吧,那么dt的话,比如说对于一个三角形而言,他这个dt其实是关于这个三个顶点的这个位置的这个函数对吧。

那么dt其实是关于就是这个三个顶点对吧,三,个顶点,三个顶点的话应该是六个变量对吧,一个变量如果参数化的时候,六个变量,一个顶点的话有两个位置,所以它是一个六个变量。

那么所以说一个dt它实际上是六个变量,那么也就是说它的黑森矩阵其实是一个6x6的一个矩阵,如果我要去对这个整体这个矩阵,他的目标它的顶点位置应该是两倍的nv乘上两倍的nv的顶点位置,对。

吧那这个矩阵它nv是那个顶点为顶点的数量,那么这个矩阵会远远大于这个6x6的矩阵,那么这样的话,我只要去修补一个,并且这个所有的矩阵都是呃都是并行的,所以我其实可以做一个并行的算法对吧。

我以还是以这个3x3的矩阵为例啊,现在不是以2x3的矩阵为例啊,就是一个3d的一个映射,比如这个四面体上的映射为例,那么其实我可以对他这个黑色矩阵,首先他是一个对称矩阵,对称。

矩阵的话他其实可以做一个特征值分,可以对称矩阵,那我直接给他去做一个特征值分解,那么特征值分解的话,左边会有两个特征,这是正交正,正交正其实对应的就是它的特征向量和特征向量对这个那么大,一那么大啊。

这地方应该是拿不到,那不等于拿不到,二三的话就是这个这个矩阵的这个黑森矩阵啊,不是他的那个特征特征值,那么特征值的话,我只要把所有的最小的特征值,把最小的把所有的负的特征值把它搞到零去。

那么最后这个矩阵就是一个半正定的矩阵对吧,那么所,以说呢我只要把所有的负的特征值搞到零,就到零的话,那么现在的问题是,我现在如果在这样的一个假设,这样的一个特征值分解已经给定的情况下。

那么我只要去做这一步就行了对吧,那问题是你计算这个六乘,哪怕是一个6x6的一个矩阵的特征值分解,其实你的规模上来上来以后,它的这个呃他的这个分解的时间也是开销比较大的。

因为你比如说你要去做一个66的矩阵的分解,其实你要做的是相当于是一个,nf对吧,就是总共是跟面数相当的这样的一个66的矩阵的分解,比如说你有1万个面,你需要去做1万个6x6矩阵的分解。

那这个提成矩阵分解特征值分解其实也是比较费时间的,那么所以说呢因为比如说像这样的对称矩阵的话,一般比如用这个假货币迭代对吧,那个假货币迭代假货币方法,假货币方法的话。

它可以用来去求这样的一个对称矩阵的所有特征值,对不对,那最强甲和币方法,假货币方法它是一个迭代方法,他需要让这些零慢慢慢慢变成零对吧,那这个方法比如,说比如说你用这个你用这个qr方法去求低下。

所有他这都是比较慢的啊,那么所以说呢这个呃如果你要去做这样60多分点,它其实是比较慢的,那么所以说呢有没有一些方法,我对于这样对于我们这样的一个特殊的问题,我直接可以去解析的获得这样的ht。

这呢啊所以说有人去做了这样的一个事情啊,就是这个是这篇c画幅文章,他就是说他的观察是这样的,就是说大部分我们现在考虑的这个能量,在几何处理里面,考虑到大部分的能量,它其实都可以描述成下面几个不变量之。

间的这样的呃形式啊,首先第一是第一个不变量,第一个不变量i一是什么呢,ie是所有的这个特征值的加r2 呢是这个假货币矩阵的这个f范数,其实是所有这个特征值的所有取值的平方,所以是所有其值的和。

那么第三个呢是这个呃行列式,就是木这个面体积,那么就是在它其实是所有西格玛的沉积,那么所以说呢比如说我举一个简单的例子,比如说对于ai p的能量应该是西格玛i减去一的平方。

那其实应该最后可以化成把你把它展开一下,就是西格玛a i的平方,西格玛一,的平方加西格玛的平方减去两倍的西格玛一,加上西格玛二减去加上二对吧,那么也就是说是r2 r2 。

就是所有的sigma的平方减去两倍的这个西格玛加起来,再加上d其实你可以用这些r一和r2 去表示,那么所以说呢最后他这个文章啊,他这个文章就推倒了这些不变量,就i1 i2 i3 的不变量。

关于那个位置的这个位置的所有的解析的表达式,它全部推出来了,就这个特征特征的这个特征值,特征向量它全部推显示推导出来了啊,这个具体推导会非常非常复杂,这个数学上非,非啊只是极其复杂。

但是它这个结论很简单啊,所以说我们的第二次作业就是去实现这样的一个实现这样一个形式啊,嗯这个到时候助教会在群里把这个具体的这个第二次作业的要求,给列出来啊,好我们说说第二次作业就是做这个。

但是这个地方的数学推导实在是过于复杂了,所以我们就这地方就直接过去了,那么接下来我们重点介绍一下另外一个方法,这个方法是叫做completed the composite majora啊。

就是一个cm的方法,大概是呃17年的这样一篇西瓜可本啊,我们主要接下来重点介绍一下这,个这个方法啊,这个方法介绍起来也比较费劲啊,因为全是柿子啊,首先首先呢我们的这个能量形式。

它其实可以写成这样一个组合函数的形式啊,就是一个复合函数的形式,我们大部分的能量都可以写成这样一个复合函数形式,这个gx呢是我们真正的顶点位置啊,是我们的变量,然后呢它可以复合出来一个向量函数。

这个这个g呢是一个向量函数,这个向量函数呢你可以认为是一个向量值函数,就是比如说啊,比如说下面啊等等,会我们来举这个具体例子,它是一个向量值函数,然后,再组合出来我们最终的目标函数。

那比如说这个x是我们的顶点位置对吧,g比如说就是gg i就是什么呢,gi就是西格玛一,西格玛二就是两个奇异值,就我们在说话的时候不是有两个奇异值吗,那它就是一个这样的一个组合。

然后呢h i呢你可以认为就是比如说就是对称狄雷克雷能量,西格玛一平方加上西格玛二平方,加上一除以xy一平方加上1÷72平方对吧,那这样的话你的g是这个,然后你的x是你这个最初最最最原始的变量。

你有x其实可以去构造这两个sigma,sigma,有了,sigma西格玛,然后呢你就可以去构造这个h啊,所以说它是一个这样的一个复合函数的形式啊,它是一个复合函数的形式,那么这个复合函数的形式呢嗯对。

然后接下来我们要引入的第二个概念叫做凹凸分解,就是任何一个函数它可以做这样的一个凹凸分解啊,那么所以说对于这样的一个h函数的话,我可以把它分解成一个凸的部分和一个凹的部分,对于这样的一个向量值函数。

我也可以把它区分成一个向量值的一个凸的函数和一个向量值,对于它的每一个坐标它都是一个to的啊,每一个坐标都是一个凸的,每个坐标都是一个负的啊,呃ege of vs它是针对一个变量,它是凸的。

这个另外一个变量也是凸的啊,就是这个意思,那么对于一个甲亢比矩阵而言,比如我们来举证,根据这两个我们来看一下这个具体的性质啊,就是任何的一个函数都可以这么搞啊,我们来看一下啊。

就是不是就是一般的函数可以这么搞啊,我们来看一下这个g2 啊,g2 甲亢b矩阵,甲和b矩阵我可以写成a b c d的形式对吧,我直接我设了两个新的变量,就是这个阿尔法一是ai加d i c2 减b2 。

贝塔是a2 减d i c2 加b2 啊,这个其实跟我们上节课讲的,就是把一个角和b矩阵写成这个a加b a减c那个东西是一样的啊,那么所以说这样的话我就可以直接求出来这个西格玛矩阵。

这个西格玛a就是这不是sigma矩阵,这个奇异值就是西格玛a一就是等于二分数加上贝塔的二份数,西格玛二就是阿尔法二份数减去贝塔的二份数啊,其实就是我们上节课讲的那两个根号,就是一个奇异值。

是两个根号的加,另外一个奇异值是两个根号的减啊,其实跟上节课讲的那个内容是一样的,就是这个地方只是换了个形式,那么这样的话我的这个g呢就可以写成这个地方的sigma一和sigma,那么即正的话。

那么这个是我们的这个西格玛一,西格玛一是关于这个阿尔法的函数,那么阿尔法的函数其实就是这地方的a b c d,那么a b c d我讲和b矩阵其实是我们一直讲过,它实际是关于这个顶点位置,是一个先点函数。

那么所以说这个地方是关于顶点的一个线性函数,就是假货币是关于顶的线性函数,那么a西格玛一其实是关于这个顶点位置的啊,就是这样一个函数形式,那么所以既然就写成这个形式,那么对于这个凹凸分解。

我们来看一下g可以做一做一个简单的凹凸分解,那么前面这个西格玛一是这两个二范数的和,那么二范数本身是一个凸的对吧,那么所以说这个它的第一项西格玛a一本身就是凸的。

所以它的这个凸的部分呢就直接就是它它的o的部分就是零,对不对,那么对于后面这个的话,它是两个二分数的减,那么这个是一个凸的对吧,这是一个后面是个减,是一个凹的。

那么所以说呢这个后面这个西格玛我就可以分解成它的out of two的部分,就是这个前面的这个阿尔法i的平方,凹的部分就可以写成这个负的贝塔的平方对吧,这个是一个凹的。

那么这样的话我就可以对这个去做一个凹凸分解,那么对于这样的一个对阵狄雷克雷能量,它的形式是西格玛一的平方,就是用这个g啊,这既是sigma sigma来表示,就sigma的平方加上sigma平方。

加上sigma的-12次方,加上西格玛的-2次方,那它可以写成这个形式,那这个形式也是个to的,他这个其实本身就是一个凸函数啊,呃这个这个函数大家可以想象一下,如果是x加上x分之一的话。

它的整个曲线是长这样的啊,这是这是一个to的函数啊,所以说它这个本身是关于这个sigma sigmt to的,所以说这个h i呢就等于这个h正啊,就是它的凸函数。

它这个凹凸分解就是等于他自己他的to的部分,凸的部分就直接就是等于零啊,好啊,这样的话我就给了举个举个简单例子啊,就是说我们的这个传统常见的这个优化函数里面。

我们可以把通过这样的一个组合去得到这个我们想要的目标函数,然后目标函数呢我们可以给它做一个这样的一个凹凸分解啊,那么接下来我们要引入一种方法,这种方法叫做mm优化啊。

就是majorm minimization优化这种这种优化的这个核心思想是这样的,就是我们现在我们要去做对一个优化问题去做一个啊去一个优化对吧,但是本身这个优化问题的求解是比较困难的。

然后呢他就把这个优化问题的求解变得比较困难,他就把它改成什么了,改成他在这个每一次迭代的时候,在每一个迭代的时候,他在这个原来这个函数,比如说原来这个函数是长这样的,他在这个点。

他在这个点他去拟合出来一个凸的上界啊,就比如给他去搞一个这样的一个凸函数出来,然后呢他去优化这个凸函数,这个这个这个构造的这个这个凸函数呢叫做majora,然后对这个凸函数呢它去做优化。

然后再去使得这个下面这个目标函数去下降啊,就相当于什么呢,就是这个地方分为两步,第一步在这个点迭代的时候啊,比如说在这个x n这个地方迭代的时候,首先要去构造一个to的上界,就这是一个majora。

首先你要去构造一个to的上界,这个地方你要去构造一个majorana,呃你要是构造他的这样的一个majora,或者对,然后呢接下来对这个majora去做优化,然后去对下面这个目标函数去呃下降啊。

所以说它整个的这个优化问题变成了呃,在迭代的时候给一个初始初始完以后,你去构建他的majora,然后去优化得到一个新的点一,然后再x一点再去构造一个majora,再去再去优化这个majora。

去求得一个向量方向,再去做,先搜索得到一个x2 ,在x2 这个地方你再去做一个majority,or再去对majority的优化再下降,下降完以后再去做线搜索,宣传完以后得到一个新的点等等。

这样的一个过,程啊,所以整个过程就变成了要多一步去构造这个majority,这个majority其实但它是因为它是要取一个to的一个上界,它是要比这个原来这个目标函数要大的。

但是呢这个思想其实跟我们之前讲的这个局部进局部的突进,是那个思想其实是一样的,就是我要对他去做一个,我要在那个地方其实要去对他去做一个就是什么做一个呃,呃限速就是要去正常局部做一个近似二次的近似。

然后对这个二次的近似去做优化,然后再去得到这个最终的向量方向,再去做,先搜索新手玩家得到,新的点啊,其实这个整个思想是一样的,那么所以说呢他可以把这个一个复杂的一个优化问题呢。

就变成一系列简单的优化问题啊,那么对于给定的一个呃skelefunction就是一个一个一个值函数的话,这个它是majority的,用这个上上划线啊,这个my road这个是一个下划线。

它就可以写成这个形式啊,那么上划线这个majora的话就是什么呢,它是等于这个这个r这个函数,它的这个x0 是什么意思,就是我们刚才讲的,它其实是要在这一个点上它去构造一个majority,的。

所以它是有一个参考点的,那这x0 呢就是这个点的参考这个参考点啊,就假如他构造的是x0 处的,或者是我这个地方写的x n处的这样一个majora啊,这个x0 是写在这里的。

然后他去构造这样的一个majority,它是等于什么呢,等于这样的本身的这个r的一个凸函数啊,它的那个凹凸分解里面的凹函凸函数,再加上它在x0 处的凹函数啊,这是一个值,这其实是一个值啊。

不是一个函数了啊,因为x0 是已知的值的时候带进去就是已知的值,然后再加上这样一个线性下是凹函数的,它的,凹凸分解里面凹函数的梯度再乘上一个线性下,然后下面这对于这个minora的话。

它其实它的凹函数再加上凸函数的,这这也是个值,然后再加上凹函数的,这也是个值,这是一个线性函数,所以说后面这两个部分呢都是一个线性函数啊,它是一个线性函数,那么这个地方可以很容易去证明它是一个满足。

我刚才讲的这个majora majoris,它需要有3。3个条件,第一个呢它是比如说这个上划线,它是一个majority,它就是个凸函数,如果是个mn road,它需要一个凹函数啊,其实很容易去验证。

这两个就是满足这个条件的,然后呢,并且它跟r在这个地方,它是要跟它的一阶信息一样,也就是说它的函数值和它的一阶导数都一样,这个很容易带进去啊,比如说我要去看一下这个是不是这个。

那你只要我会让这个x等于x0 ,我把它带进去,那么也,就是说r乘加上x0 加上r的x0 ,然后这个地方x0 减x0 ,这个地方就没有了,那么所以说呢这个对于这个呃这个majora而言的话。

它的目标函数值这个地方就等于这个凹凸分解的函数值,所以它的函数值是一样的,那你这个带给他去求一个梯度,那求一个梯度以后应该是这个函数的梯度,再加上这个就是这个凸函数的梯度,再加上这个凹函数的梯度。

那么这两个梯度加起来最后也是一样的啊,所以说这个地方很显然这个majority在这个地方,它的构造出来就这么jorge,它不光是这个函数,值要一样,它的这个梯度值也是一样的啊。

所以说呢呃当然它是一个全局的majority,它是一个有界的啊,这个就很容易胜,那么所以说对于我们的这个现在这样一个符合的优化问题而言的话,我们其实是希望去构造这样的一个majora。

使得它最后的呃求解,然后用这个majority majority的去求解,求解这个向量方向,所以我们现在核心的想法就是用这个to的这个majority heaven,作为我们最终的这个近似的hen啊。

就是那个proceed hen,那么现在我们的我们直接可以去构造出来这个majora,对我们这个复合函数而言啊,符合函数而,言我们可以去直接去构造出来我们这个地方的这个major。

这个复合复合函数构造出来是什么呢,这个地方的majora是写成什么呢,h的majora,hi的majora在符合上这样的一个,首先h2 是这个h的majora啊,是在这个点,你把它看成是一个呃一个函数。

把hi看着这个函数,它其实是在这个地方的一个majora,然后这个括号里面呢是一个向量值函数,它的每一个分量呢是是它的这个原来这个每一个分量,因为它是一个向量值函数对吧,向量值函数的话就是我刚才讲的。

比如说这个semi sa ma,比如说是sigma sigma对吧,那,就sigma一它是一个majority或者是一个man nora,那么它是它这个条件是什么呢。

比如说这个地这个这个下标这个i是第i个元素,这个j是这个向量值函数的d j的元素,比如sigma sigma j等于零的时候,就是这个西格玛一,j等于一的时候,就是这个西格玛二。

那么对于这样的一个第i个分量的话,它的是不是majora,它是取majora还是取maoa呢,是根据这个原来是根据这个h他的这个my mamajora在这个gi这个地方。

g i j这个地方di的这个地方的分量上的那个梯度的,它的梯度如果是大于零,我就取它的呃majora,如果,它的梯度小于零,你去他的mad nora啊,原因很简单啊,这个证明非常容易。

你直接对这个mm oa直接去求个导,你会发现它的二阶导数就会长成这个样子,那么这个第一项很显然是一个凸的对吧,你要证明它是凸的,很简单,就是你直接带一个二字形进去,这个二字形它是永远是大于零的。

所以说这个呢还是觉得是个正定的,那么对于这样的后面这个部分这一项,这一项如果是大于零的,就如果他的这个梯度是大于零的,那么我取他的majora,那这很显然嘛,如果你取他的majora。

那么当然是正的乘上正,的,那么当然这个地方就是一个镇定的,那如果他的这个值是负的,然后你再乘上一个负定的,那当然也变成正定的,所以你可以后面这一项呢你可以看成是一堆正定矩阵的,正定矩阵的和啊。

所以说呢最后整个的这个海森矩阵就是构造,通过这种方式构造出来,就是很焦虑的,它就是一个正确的焦虑,然后呢你就可以比如说用这个方法,你就可以把这个前面的这个这个比如说这个高斯这个个人地雷对称。

迪雷克雷能量你就可以带进去了啊,对阵dj等下,我首先这个h i呢就是它的这,个凸函数,然后通过它的凸函数呢,它的凹函数是等于零,所以你直接可以把它的这个major的构造出来。

那么所以你可以很容易把这个h的majority的构造出来,哎兄弟们,jo的构造出来以后呢,你就要对这个继续构造出来,那么我们的g的话计算g负已经有了对吧,就是对这个对称地位能量啊,我的计算机就有了。

计算机会有了以后呢,我接下来只要去取这个它的梯度,然后是不是大于零小于零,然后去决定这个地方的majora取什么,或者是取消的麦克诺斯啊啊这个东西就比较简单了啊嗯啊讲完。

这个你会发现它最后的这个这个绿色的线,是他们这个cm这个方法的这个结果啊,呃它的表现上会比这个比如说这个这个是l s cm的,这个是a q p的,这条线是这个project newton的啊。

他会发现这个蓝色的线是收敛最快的啊,啊但是其实呢这个我不知道他们这个实验做的事,当时为什么会出现这个结果,后来我们重新去做这个实验的时候,其实我们后来发现这个lcm在前面的迭代会比他这个快的。

我我不知道他们这个是不是做错了还是什么,就这个这个这个这个线是有点问题的啊,呃接下来那个前面讲的主要是这样的一个优化的方法,那么接下来我们去从从另外一个角度来介绍一下这个另外一种方法。

这种方法叫做鉴定参数化,就是我们在18年发的一篇新化的亏本啊,我们给大家介绍一下啊,前面的所有的方法,前面介绍的所有的方法,一阶方法也好,这个啊你游的方法也好,都是在强调这个求解器的不一样。

但是呢我们看不看,我们这个地方是从另外一个角度来思考的这个参数化的这个问题啊,所以说这个existence存在的这个方法,他都是在去都是直接去,比如说考虑考虑这个扭曲的时候。

它直接是把这个输入三角形和这个当前这个参数化三角形之间的,这个扭曲呢,作为这个呃这作为这起来计算这个扭曲,但是这个扭曲呢就像我们刚才讲的,就是刚才讲那个呃那个你牛顿发的时候,我们简直讲过。

在开始刚开始迭代的时候,他那个呃distortion是比较高的,所以它这个整个心态就比较差对吧,所以他一开始的时候他需要很多的迭代才能够去收敛,就是你会发现因为他一开始的扭曲实在太差了。

你的那个哪怕你做了这些所谓的二阶的逼近啊,什么逼近啊,都是很都是还是很差的,他们说他们一开始的那个迭代收会收敛的很慢,所以他需要一些非常多的这个收敛,才能去让那个能量下降啊,这是我们的观察。

但是呢如果我们假设就是这个心态变好了,假设这个心态变好了,假设这个输入的扭曲,这个reference这个参考的三角形和这个当前参数化的三角形,就如果这个三角在现在这个扭曲啊不是很高的情况下。

比如说之前我刚刚讲的,就是初始的时候,如果这个扭曲比较高,那么它的,优化就比较差对吧,但是如果扭曲比较低了,比如说这个扭曲它是被有一个借给棒得住了,那么这个时候呢我们发现只需要一两次迭代。

就能让这个参数化的三角形逼近这个参考三角形,那比如说我们来看一下这个例子,就是说对于这样的一个有界的扭曲的话,其实我只要做两次迭代,基本上就能够做到收敛了啊,这这这这是什么意思呢。

就是说如果从推特in bin开始,如果我考我的这个度量,就是用这个参考三角形,就是输入的三角形跟我现在参数和三角形的话,这个扭曲很高对吧,这个直接去做优化的时候其实是不好。

但是呢如果我这个当前如果我发现我们发现诶,如果两个三角形之间的扭曲比较小的时候,我用这个新的方法去做就比较简单了,那么这个时候就让我们想起来了,哎我这个切口三角形既然用的是这个输入网格三角三角形。

那我能不能用其他的三角形呢,那这个时候呢其实我们可以去重新计算一个新的参考三角形,使得这个新的参考新的这个参考形,新的这个参考三角形跟当前参数化的三角形的扭曲是有界的,那么我只要让我这个计算。

的这个中间的这个参考三角形慢慢的逼近这个输入参考形,输入的参考三角形,那这样的话我就能够去呃求解这样的一个原来的问题啊,那么所以说呢这个整个的这个算法就是变成这样了啊。

就是说我现在有一个就是原始网格上的这个三角形,那么这个现在一开始的这个就是这个参数化的三角形,那么这两个一开始的这个扭曲是比较高的,那么这个地方你去求解的时候困难比较大。

那么我在这个中间去构造一个有界的一个这样的一个三角形,作为临时三角形,那么我去这样,的话我就每一个三角形我都可以构造一个临时的这个参考三角形,那么我接下来的优化呢,我只需要去让这个参数化三角形。

尽量的逼近我这个临时构造出来的这个三角形,那么因为大家可以看一下这个临时的三角形,其实是在这两个输入的三角形和这个当前参数化三角形的这个过程中,如果我这个通过优化这个三角形变到了这个地方。

那其实已经是离这个原始的这个三角形慢慢的变再逼近对吧,那么所以说呢整个的过程就变成了我去呃给一个这样的三角形,我对它去构,造一个临时的这个参考三角形,我使得这个参数化三角形呢去逼近这个临时的三角形啊。

就是边边界连接的三角形,然后再去构造一个参考三角形,然后使得这个逼近零的三角形,然后得到这个,然后到直到最后呢我这个三角形的参考三角形就是这个输入三角形,最后呢我就会得到一个比较低扭曲的结果啊。

那接下来的过程其实大家可以认为就是说,我其实是在这个输入的参考三角形,跟这个我最后的这个参数化三角形之间,我使得这个参数化三角形慢慢慢慢的逼近我这个输,入三角形啊。

但是呢每次我求解的时候都是一个低扭曲的一个参数化方法,低扭曲的一个优化,那么这样的话我的优化的速度会比较快啊,啊当然了,这个地方我们还发现了一些其他的地方,我们用了一个混合的求解析啊,呃大家来看一下。

这是我们当时这个啊,大家可以看一下,这是我们当时最终的结果,比如说这是大家都用了这样一个同样的一个初始化,这是大家一样的数字化,这是lcm,这是这是cm的方法,那比如说同样都是在这个地死十次点亮的时候。

大家看一下这个这个都是第,十次迭代的结果啊,这都是第十次的迭代结果,你可以看到我们这个用这个呃这个鉴定参数化这个思想的话,你会发现在第十次迭代的时候,其实我们的这个值已经是接近最优值了。

但他们还比较远嘛,所以说但是呢呃所以说我们最后这个迭代速度基本上是可以是这样的,二阶方法的两倍左右,按量就是所以这个很呃还是比较好的一个方法啊。

嗯所以我刚才说为什么是这个lsm跟这个c m稍微有点区别的,是这样的,我们在后面做实验中,我们发现其实l s cm的这个前期下降会比,这个cm快啊,然后到但是到最后的收敛的话,这个lcm巨慢无比。

所以说cm的收敛会快一点啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

后面这个我们就不讲了啊,我们今天的内容就到这里结束,哎那个助教有没有问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

没有问题。

GAMES301-曲面参数化 - P5:Lecture 05 全局单射参数化方法 - GAMES-Webinar - BV18T411P7hT

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那我们就今天开始我们今天的课程啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

呃之前我们的内容这个讲到了,那个就是讲到了这个无翻转的这个映射啊,或者初始是没有翻转的,然后后面呢呃介绍了很多的这样的优化的方法啊,然后也介绍了一些基本的这个策略,那么今天呢我们要进入一个新的这个呃。

我们要讲一些更多的这样的一个约束啊,那么之前我们在讲到这个参数化的时候呢,啊我们说它的约束一般会存在几种,一种是没有翻转,一种是局部带色,还有一种是全局全局单色。

那么今天我们就要介绍是全局单色的这个映射的呃,或者说这个参数化的计算计算的这个方法,那么首先我们来看一下这个全局单色的这样的一个定义啊,啊不是一个这样的一个简单的例子。

那么我们可以看一下左边这个图是左边这个图其实是呃,左边这个图其实是一个呃参数化结果,那么右边这个也是一个参数化的结果,那么我们可以看到左边这个参数化结果,他在2d的一些区域是相互重叠在一起的。

那么所以说它是一个overlap,右边这个结果大家可以看到这个地方是没有相互之间的自交,或者没有相互之间的覆盖,所以说它是一个overlap freed,那么在这样的一个参数化结果的前提下。

我们来看一下,如果把那如果把纹理贴上以后,会发生什么情况,这是一个棋盘格的纹理贴贴在这里,然后把它映射回这个输入的这个曲面,那么我们可以看到针对这个左边的这个参数化结果。

可以看到这个红色的点在这个原始网格上就会有一个点,两个点,三个点,那么对于右边的这个参数化结果,它其实这个地方只有这一边块红色的区域,那也就是说你在左对于左边这个参数化。

如果你在2d上给它铺上一个纹理的话,它其实这个点的颜色会被映射到这个呃,会被映射到这个三个地方,那么这样的话它其实这个参数化的结果,其实这个地方的话,这个呃就是你的纹理的映射,它其实就没有一致性。

也就是说你比如说呃用artist在这样的编辑这个2d的这个区,2d的这个纹理的时候,它画上这个颜色可能会被映射到不同地方,他没有这样的一个一一对应的关系,那么这个其实是在这个texture map里面。

其实可能是有一个不好的事情,那么所以说呢我们需要就是保证我们需要去做一个参数化方法,它最后是在2d这个平面上是一个没有自交的,或者说没有这样重叠的这样的一个呃一个参数化啊。

那么对于这样的一个去计算这样的一个重叠的参数化呃,最最常见的这样呃,最最常见的一个pipeline是如下的这样的一个pipeline啊,那么首先呢它的初始化就跟我们上节课讲初始没有翻转的。

初始没有翻转的这个呃无反转参数化计算一样,首先呢它的初始化也是来自一个没有翻转的,或者是来自一个啊overlap raid这样的一个初始,那么这个初始就是用这个juliebeating来计算的。

并且三角形是没有翻转的,这样的一个初始的这样的一个to listing bing,那这样的一个初始化参数化结果,然后呢通过接下来通过,但我们这上节课也讲到了这个地这样的一个参数化结果。

它的一个问题就是扭曲很高,那么扭曲高,那么所以说呢我们需要去给他去做一个distortion的optimization,那么在这个扭曲的这个优化的过程中呢。

因为我们现在的目的还是希望保证它是没有啊重叠的,或者说还是希望保证它是没有自交的,那么所以说我们现在在这个优化的过程中,不光是要保证它的三角形是没有翻转的,我们还需要保证这个边界是没有自交的。

或者说这个呃这个三角这个参数化区是没有这种字重叠的啊,那么所以说呢在这个过程中,相当于类似于这个内点法一样,整个的这个python后面的这个过程中,他需,要去保证两点一点是呃flip free。

就是你需要去设计一个能量,它是保证没有出现翻转的,第二个你要去设计一个能量,它后面是overlap free,就是它是一个没有这样的重叠的,或者说没有这样的边界自交的一个能量,因为如果边界发生自交的话。

它其实就内部加生了重叠,所以说它其实这个地方就是要让它的边界没有自交,或者说它这个区域没有重叠啊,这两个是一个概念,所以说你在这个优化的过程中上类似上节课那样的pipeline。

你在整个的优化过程中去放下降方向,去做线搜索,去做这个过程,中呢你一定要保证这个flip free和这个overlap free都是要被满足的,你不能够去通过嗯,你不能够去违反这样的一个规则啊。

这样的话啊,我就能够保证最终的结果也是一个flip free和global,overlap free的这样的一个结果,那么如果最终的这个参数化结果。

它是满足这个flip free和这个of overlap free这两个条件的话,那么这样的一个参数化结果我们就叫做globally injective,参数化结果,就全局单数的一个参数化结果。

那么对于这的一个对于这样的一个计算的过程呢,上节课我们主要讲的是这个如何去保证它最终的结果是啊,flip,raid,那么今天我们就要主要介绍的是怎么去通过一些能量的设计。

或者通过一些算法去保证它的这个边界是不是产生自交,或者区域没有去发生重叠啊,主要是我们今天要讲的内容是这部分,但是整个pipeline是跟我们上节课一样的啊,首先是有了有了这样一个初始化结果。

初始化结果以后你要去优化扭曲,你要去做一个,你要去做一个线搜索,做完先搜索以后,你要接下来去做一个呃,就是在线搜索过程中,你要保证这两条啊,然后再回来去做这个,下载方向的计算啊。

然后直到最后的收两个输出,好那大概是现在是这么一个情况啊,我怎么去设计一个能量,使得这两个东西能够被满足啊,那么首先第一类方法也是最自然的方法,就是这样的一个啊by function的形式。

就是通过这样的一个障碍函数对吧,你只要是发,因为一开始初始是没有自交的嘛,那么我们也讲过,如果你接接近他这个发生碰撞的时候,你就把这个bufunction给呃,能量值变得比较大。

所以说呢我们现在的这个需要去设计这样的by function,使得,它在这个接近发生自交或者接近发生这样的覆盖的时候呢,我去把这个呃能够去阻止他去产生这样的碰撞对吧。

那么所以说我们接下来所以说最常见的这样的一个bufunction,因为我们现在的目的,其实在上节课的时候,我们已经花了很多时间说其实已经可以很好的去做了。

那么所以说我们接下来主要是关心的是这个边界如果发生这样的碰撞,它的呃目标函数应该怎么去设计,那么对于2d的情况,2d的情况,因为它的边界,你可以认为是一个多边形。

所以说它产生自家都是这样的一个都是这样的一个情况,都是两条这个两条这个边界的边产生这样的一个自交,那么也就是说呃对于这样的一个case,u一和u2 是一条给定的边。

那这个v i u i是另外一条边的一个端点,如果它要产生自交,那么也就是说这个三角如果一开始一开始的状态是一开始的状态,这个是u一个是u2 ,这个是u2 ,那如果要产生自交。

那么也就是说这个ui要穿过这条边对吧,那么这样的话才会变成上面这种case,那么也就是说对,于这样的一个,但是我不希望去,我不希望他去产生这样的自交,所以说我要去阻止这个ui穿过这一条边。

穿过这个u1 u u1 u2 这条边,那么所以说呢我就可以设计这样的一个很简单的一个buyer function,这个bfunction呢就是这个里面里面这个d不良的。

是这个点到这个到这个ui ui的这个距离,那么当这个距离接近于零的时候,那么我应该这个地方的目标函数变成无穷大,对不对,那么也就是说我所以说我把这个distance是放在这个分母上的。

那么实际只有当这个距离接近于零的时候,那么这个能,量就会变得无穷大,那这个app是什么意思呢,就是说如果我的这个距离地如果这个距离d大于1b系统的时候,那么这个1p c o除以d减去一其实是小于零的。

对不对,那么小于零的话,我在这两个取max的话,那么其实也就是我这个地方的目标函数是等于零,他们就说是if d大于零,那么这个地方的这个能量其实是等于零的,那么yes d小于一cm的时候。

那d如果是小于一cm的时候,那其实这个地方的能力能量,这个e其实就是一步行能减去d除上d括号的平方,那么当这个地区趋,向于零的时候,那么这个地方的这个能量就变成无穷大。

那这样的话我就能够去阻止这一条边的这个顶点穿过它,那么这样的话我就不会产生上面这样的case,那么也就是说我能够保证这个边界没有产生这样的自交啊,那么所以说这样的一个目标函数呢。

它就会具有这样的一个形态,它在大于1p的时候,它的这个有它的这个呃,他的这个函数值是等于零,那么当这个你装这个点,比如说非常靠近这个靠近这条边的时候,它的这个目标函数就会变得非常的大啊。

那么所以说这样的过,程的话它就通过使用这样的一个呃buyer function的话,它就可以它可以可以阻止这个呃点穿过它,那么可以一旦阻止这个点穿过它的话,那就是我就不会产生这样的两条边发生碰撞啊。

这样的一个约束啊,那么所以说对于这样的优化问题就变得很简单了,首先这一项是这个防止翻转的扭曲向,然后这一项就是我们刚才的那个boundary,boundary,boundary breed。

像就是上上上一页的那个function的一项,那么这样的话我现在的两项,一项是这项distortion项是用来防止产生翻转并且降低扭曲,这一项就是用来去防止边界产生自交啊。

就是上上面的上一页ppt里面那个能量,那么所以说这一项就是使用的,比如说最常见的这个对称dm的能量,那这一项就是上节课,那么接下来我要只要去优化,这是一个无约束的优化问题。

那我只要去对这个无约束的优化问题进行求解就可以了,那么求解的方法其实之前的那些方法都是直接可以跳用啊,直接可以呃,呃比如说l b f g s啊等等,都是可以直接啊来调用的。

但是呢其实我们这个地方的还是希望使用一个这样的,就是二阶方法去做,但是我们后面会分析,在这样的问题上,如果用二阶方法去做,它会存在一些问题,在我们在后面会分析。

那在这个地方呢只是说如果用l b f g s去优化这个能量的话,它的收敛性其实是相对比较差的,那么这个时候呢它的这个呃最终表现出来的这个呃,花费的时间就会比较的长啊。

所以我们接下来会呃重点讲一下怎么去改善这样的一个呃怎么去设,计对针对这个问题的一个优化方法啊,那后面再讲呃,如果使用了这样的优化目标函数以后,大家会发现最后的这个地方原来是。

比如说你不加内向bl方边界的bl方形那一项,那这个地方会产生这种自交,这种自交,这种自交,那么如果你加上以后,你就会发现这个地方其实是被分隔开了啊,最后就没有碰上了,那么呃再多说一句啊。

它其实里面也是会涉及到怎么去防止发生碰撞的这个事情里面,其实用的这个最核,心的东西也是这样的一个barrier,其实当然它的barrel的设计可能会有一些不一样,然后但是呢对于这个3d的情况下。

会有两种case要处理,一种case是这个边与边产生的自交,还有一种case是三角形和这个顶点穿过的,这个如果一个顶点穿过一个三角形的话,也会产生自交,还有一条边穿过一条边也会产生自交啊。

就是在23d里面需要去考虑这两种,配好这个地方就过去了,反正内容的核心思想都是一样的,就是简单的bufunction,就无非就是你的bufunction怎么设计,那么接下,来我们讲另外一个方法。

那么这一类方法的话就是呃思想也非常的简单呃,首先我们的目的啊,就假设这个我们现在这一块这一块区域是一个参数化的区域啊,这一块是蓝色呃,就是就是假设这一块绿色的区域。

就是由我们的这个to test ebing得到了这样的一块区域,我们现在要对这个tobi这一块区域去做这样的优化,那么我们希望它这个边界不产生自交对吧,那么所以说这一类方法叫做scaffold呃。

中文中文翻译过来叫什么脚手站啊,anyway,就反正你可以认为它是一个辅助的网格啊,它是一个辅,助的网格,它是一个辅助性质的网格,那么你现在的目的是要对这块绿色的区域去做扭曲的下降。

然后使得它呃在这个优化过程中,我不希望它产生这个边界的碰撞,也不希望它产生这个,呃内部产生无三角形的翻转,那么这个时候呢我可以给它在这个绿色的外面加上这样的一层,这个黑色的这样的呃。

或者说这个灰色的这样的一层三角形啊,那么这样的话我把整体这个灰色的这一层三角形,这一层三角形叫做s里面这个网格叫做m,那我把这个s跟这个m看成是一个整体的网格啊,比如说我这个整体网格叫做g。

那么现在我要让这个边界不产生自标对吧,我要让这个三角形的这个绿色的这个三角形网格的边界不产生自交,那么这个时候呢我可以怎么去做呢,我可以固定,我可以固定整个这个整体网格。

就是这个绿色的跟这个外面这个灰色的这个网格的整体网格的边界,我把它固定住,那么只要我这个内部不产生翻转,不产生flip,那么如果我只要这个整体这个灰色的和这个绿色的,只要不产生flip。

那其实这个三角形的边界就不会产生自交对吧,这其实应该是可以很容易去严格证明这个事情的,就之前之前有一个很严呃,这就有一个病例吧,就是或者说这个事情也是一个很嗯,从这个就是也是比较容易去看的。

就是说如果这个边界它是一个没有自交的边界,那么它的内部只要所有的元素,比如三角形,四边形,四面体,它的所有的元素都没有产生这个呃所有的元素都是没有flip的话,那么整体的话这个内部这一块区域就是一个呃。

就是没有产生边界自交的情况啊,这是很容易的,那么所以说呢它相当于在外面通过加上这样一层辅助的网格s以后呢,他把原来这个对这个m这个网格去做扭曲优化,边界不产生自交,内部不产生翻转这样的一个问题呢。

它就可以转成只有没有翻转的约束啊,就是相当于原来是这样,又要考虑边界不产生自交,又要考虑这个三角形不产生翻转对吧,那么现在的话我我加上这个外面给他套上这样的一个caffe,这样的一个网格以后。

这个整体这个网格我只要保证这个整体这个网格不产生翻转,那么这样的话我就能保证内部这一块区域,它是overlap free和这个flip free就可以了对吧。

那么所以说呢这样的话这个问题就变得非常简单了,因为原来的话我们在做这个参数化过程中,我如果又要去考虑它没有翻转,又要去考虑它没有边界产生自交,那么这个问题其实是呃相对比较困难。

因为上面我们讲过那个buy function,那barrefunction其实在做真正在做的时候,那个八方形算起来其实还挺费劲的,因为你要算这个点到直线的距离,然后你还要去对这个东西求导。

然后你还要嗯你如果是考虑所有的点,边界点到另外一个边界点的这样的距离的话,那个元素的数量会非常多,所以你一般情况下会需要会需要去做一个类似制作网,类似这种就是数据解,一种就是,一些数据结构去捋一下。

播对吧,就去滤一下,不是去滤一下一些case,只是留下一些可能发生翻转的地方,所以这个编程上也会稍微复杂一点,所以说呢现在我们在这种情况下的话,我们就不用管在这种cao的这种整个的这个架构下的话。

我们不用再去考虑那些很复杂的情况,我只需要在外面套上这样一层三角形,然后整个三角形的这个处理就变成了一个非常简单的一个配合,变成了一个非常简单的这样的一个呃没有翻转的这样的一个求解啊。

那这样整个过程的优化就会变得非常简单,那就意味着我们上上周日讲的那个所有的初始没有翻转,等那些二阶方法,一阶方法都可以直接无缝地套在这里面呢,整个的这个优化效率也是非常的高的啊。

但是呢呃对于这样的一个优化问题,比如说我现在的这个这是我们最终的这样的一个优化的目标形状,这是我们的初始tobin的这个形状,那么大家可以看到,如果从这个形状慢慢变到这个形状来的时候呢。

因为这个它要保证这个绿色的三角形和这个灰色的三角形,都没有产生翻转,那么因为这个绿色的三角形要往这么极端的形状去旋转,那么就意味着这个灰色的三角形它在这个变形的过程中。

他需要也需要去非常强烈的去产生一些扭扭啊,扭曲对吧,形变,那么这个时候呢它其实在一些极端的情况下,你可以看到出现这个三角,这个三角形的质量其实是非常非常差了,那么这样的话它会导致它后面的这个呃。

后面的这个再去进一步优化的时候,它相当于会被lock住,就会被锁住啊,大家注意啊,在整个的这个优化过程中,是这个绿色的这一块,这一块区域和这个外面这块灰色的区域是同时一起去呃变形的。

因为它要让这两块区域同时不产生翻转,所以这两块区域都是同时动的,那么同时动的话,这块绿色的它要趋向于这个最终的这个形状,那么这个灰色就只能跟着动,那么跟着动的时候。

它就会产生一些非常极端的这样的一些三角形,那么产生这些非常极端的三角形的时候呢,那么这个时候它这个产生到一定一定形状的时候,它就没法没法往下动了,为什么呢,因为你再往下动。

这个灰色的三角形就要产生翻转了对吧,那这样的话你整个后面就没法动了,那么所以说呢在这个整个的这个优化的过程中,他就需要去做一个叫做connectivity updating,什么意思呢。

上面这上面整个过程是没有上,那么下面这个是有的,什么意思,就是说相当于它做一步优化,就要对这个外面这个灰色的三角形,它去做一次重新网格化,所以大家我们应该熟悉这个数据集的数据资料。

就是给他重新去remax一下,或者我直接用这个dlna抢creation,重新给它去生成一个dny抢ation,那么这样的话我就能保证这个灰色的三角形的质量是一直是比较好的,就不会出现像这种退化的情况。

那么这个地方的三角形质量一直是保证比较好,那么才能够使得这个后面的优化能够顺利的进行下去啊,所以说如果没有做这个connetivity的updating,他最后的这个三角形的质量很差,如果做了。

那他最后的那个结果就能够达到它的最优最优质啊,那么所以说呢在整个这个过程中,他需要去做这个connectivity updating,那么即便做了connection updating以后呢。

他的所有的呃它会带来一个不好的不好的东西是什么呢,你如果如果这个灰色的三角形和这个跟这个绿色的三角形,它的连接关系在整个过程中都是不改变的,那么也就是说它的整个黑森矩阵的这个非零元的结构是不改变。

但是如果你在这个过程中做了这样的呃,connectivity updating以后呢,它就会导致这个呃整个参数化过程中的这个飞行员是在发生改变的,那么飞行员发生改变的时候呢。

就会导致这个导致你的海森矩阵的每次的这个非礼员的改变,那么黑森矩阵去求解这个线性方程组,去求得这个下降方向的时候呢,它的这个呃矩阵的这个分解啊,迭代啊,就举证的这个就是方程的求解的时间大家会比较大啊。

这个后面我们会去具体再分析一下,嗯这个caford呢当然他除了这样做一个单个的三角形的,三角形的这个text map以后,大家可以用了,大家可以用来做真正的text map。

大家可以把这个所有的这个比如说这个这样的一个结构,它可以把所有的这个分块结果的每一个都放在这里面,然后一起去做这样的two toba,就是做这样的一个呃呃texp啊,并且快一块之间不发生不发生这个翻转。

而不发生碰撞呃,就是他它它不光可以适用于一块这个参数化,它也可以适用多块啊,当然他这地方还需要做一个简单的编辑,才能让这个摆放的更加好,因为摆放本身是一个np hard的问题,那么接下来我们希望做的是。

那么接下来我们当然说刚才说了,这地方其实两个方法都会存在一些困难,那么所以说我们接下来需要想想啊,这两个方法的困难是什么呢,就是说它的那个优化的效率都不高,因为第一个方法的话,它的这个优化过程中。

它的他用如果用一个l b n v g去优化的话,它的这个优化效率其实不高的,那么第二个方法,如果他是在整个的这个过程中,它的三角形的这个连接关系一直是在变的话,那它导致它那个呃所以说导。

致他的这个呃三呃三角形的质量,而不是三角形质量,是那个海森矩阵的这个飞行员结构一直在改变,飞行员结构一直在改变,导致它的这个求解的速度就会降低啊,那么我们来看一下具体是为什么。

比如说对于这样的一个二阶求解,二阶二阶求解器的话,他的二阶求解器,我们在这个我们在这个相当于求得这个赛道方向的时候,我们其实是需要去解一个线性方程组,那么对于解这样的一个线性方程组呢。

一般情况下会有两种求解方法,一种是这个迭代法,还有一种是直接法,那么迭,代法的话主要是类似于这个假货币迭代,高斯赛德尔迭代对吧,那么这一类方法的话,对于这个参数化这个问题,我们之前也尝试过。

然后他的这个最后得到了这个解的精度不够,导致最后求出来的这个下降方向不够的准确,使得他最后的能量下降没有的那么显著啊,不是说在局部很容易陷入局部最小,所以说呢我们一般情况下,在这个参数化的这个问题里面。

我们使用的是这样的一个呃直接法去求解,那么直接法求解的话,一般最长就是要去做这个矩阵分解,咱们要去做矩阵分解,的话一般情况下分为是这个在真正的这个代码里面会说,这个从这个算法角度来讲。

一般会分为这三大步,一部是这个符号分解的,符号分解呢主要是去给这个矩阵去,因为你要去做分解的话,你肯定要去根据这个矩阵的这个非零元的结构,你要去分配内存啊。

你要去这个重新去对这个结构做一些适当的这个微调啊,就是rewarding一下啊,什么等等这些操作,那么这样的话整个这个符号分解这个过程中,它其实是在就是只只依赖于这个矩阵的非零元的结构。

而不依赖于这个矩阵的这个就,是说这个地方它其实依赖于的是这个矩阵的非零元结构,那么如果这个矩阵的非能源结构在改变的话,那么这个符号分解这一步每次都要重新做,那么有了符号分解以后呢。

才是真正的这个数值分解,那么数值分解的话,最常见的比如像l u r l d l l d l l的转制啊等等这样的一些分解,那么这就是承认这些数值计算,那么接下来就是最后是求解,求解是一个回答对吧。

这是最费最不费时间的,那么对于这样的,比如说我们这样的一个问题,就是在这样的一个参数化问题里面,我,们要去最大去求解一次这样的求解一次,这样的一次下降方向的话,他能花时间花费是这样的呃。

如果对于这样的一个符号分解而言,它的花费的时间是大概在0。083,如果是一个数值分解的话,它大概在0。006,然后这个回带回带大概是在最后这个时间花的最少的,那么所以说呢在这个过程中。

其实我们希望这个矩阵的这个飞行员结构,它是,但因为大家可以看到这个,其实这个符号分解进一步是占据的时间是最长的,那么所以说我们希望这个时候它的这个因为符号分,解花费时间长,所以我们希望加这一步。

他最后的所有站的它能够固定住对吧,如果这个飞行员的结构能够固定住,那么也就是说这一步我就不需要重新做了,我只要做一次就行了,就如果这个飞行原子结构是固定的,那么这一次只要做一次。

但是如果这个飞轮的结构是变化的,那么这个地方他需要做的这个次数是每次都要做,那么这个时间开销是比较大的,但是呢刚才我们讲过,在那个skyford的那个里面。

他需要去对这个外面那个灰色的网格去做rematch,那么也就是说它的这个结构是变它,的这个三角形的连接关系是变的,那么导致它的整个黑森矩阵的这个飞行员结构是在改变的,那么导致它的飞行员结构在改变。

就导致他最终的这个呃非两个结构再改变,就导致它的这个每次的这个符号分解都需要做,那么这个地方的这个时间开销就比较长啊,那么所以说呢这个我们是希望这个海森矩阵,它是具有这样的一个固定的飞行员结构。

好开森矩阵它是希望它有固定的飞行员结构,那么这样的话我这个符号分解就只需要做一次,那么后面的这两个时间它其实是开销,是比较小的,那么对于这样的一个对于这样的一个优化问题对吧。

我们现在这个是假如说我们还是考,所以我们不会去考虑这个cao这个方法,因为caffold那个方法,它的这个飞行员结构一直是变的,所以我们考虑是这个带ber function的这种方法。

那么考虑带bufunction的这种方法,那么首先这是一个扭曲向,这是一个边界的碰撞项,那么这一项的这个飞行员结构其实是固定的,所以说我们对应的是这个,那么这个这个是那个边界和这个内部的交叉上。

这个是主要是这个边界的barry function啊,beryl beryl那个function function内向,那么如果当这个点在这个当这个点在这在这个迭代的过程中。

如果这个点的距离比这比这个给定的这个阈值这一系统大的话,那么这个地方取值是零,那么当这个点呃取值是零,那么也就是说这个这个这个距离变成零了,那么整个的这个这一项你对它求导求黑色的话。

那它对应的这个里面的这个矩阵也都是零,那么也就是说你其实是可以把它就不考虑对吧,不考虑的话,这个dk就会比较的低啊,就是因为它是大部分都被你去除,了,因为等于零嘛,你就可以不考虑嘛,就是它是个稀疏项嘛。

但是呢如果这个距离它比如移动进去以后比他小了,那么比他小了以后呢,也就是说它的它的这个距离就会取成这一项,那么距离取成这一项以后呢,它是有值的,有值的话就是原来这个地方是空的地方。

你又会给他加入这个新的,给它变成这个地方,原来是没有值得,你现在又填进去了,那么也就是说这个地方又产生了这个非零元结构的变化对吧,那么产生了这个飞行员结构的变化以后呢,它其实你如果你还是用这样的方。

法去做,你最后还是会去啊产生这个变化的这个黑森矩阵,导致它的这个符号分解每次都要做,那么时间开销也是比较大的,那么所以说如果你这个比如说这个点又从这个区域里面又出来了,那这个地方又变成空的了。

那么这样的话你这个飞行员结构就一直在变,那么飞行员结构一直在变的话,导致你的符号分解每次都要做,符号分解,每次都要做,那么所以说如果是你是动态的去考虑这个值大于零,小于零。

然后去动态的决定这个地方要不要去变,这,个地方要不要是是一个空的,还是还是一个非空的啊,那这样的话你也会引起这个数,那么所以说呢一种一种办法是,考虑所有的这个为了去固定这样的一个黑森矩阵的非电源结构。

我们可以去考虑什么呢,考虑这个边界边,任何一对边界边就是你把两条边界边变成一对,你可以考虑任何一对的边界边去做优化,那么这样的话你把所有的这边这边都当成一一组去,都是去相互作用的话。

那么也就是说你不会去管这个地方的这个,值是零还是这个后面这个值你反正都把它填进去,就是零,我也填进去是零,那么这样的话他在这个呃这个优化的过程中,虽然这个地方直是零,但它也是占一个飞行员的结构啊。

那么这样的话就是也就是说你这个距离,比如这个距离现在我大于这个大于这个值了对吧,那它其实这个地方的这个值应该是零,但是呢原来我可以把这个地方空出来,但现在呢我我我空出来,我就强行给他填上零。

那么前上强行强行给它填上零以后呢,这样的话我最后其实也是一个飞行员,结构也是固定,住了,但是这个飞行员固定飞行员这个结构固定住以后呢,但是这个矩阵h b b的这个矩阵的density也是比较高的。

为什么呢,因为我需要去考虑的是任何两个,任何两个两条边界边之间的这样的一个发生碰撞的case,那么它这个地方产生的这个边界边的数量,这个边界边界比例的对,是跟这个边界边的这个数目是呈一个二次的关系。

那么这样的话它的这个h b b这个海森矩阵里面的dc比较高,dcd比较高,就是指的是什么意思,指的是这个就是海森矩阵里面的这个助演的海森矩阵里面,的这个非零来的结构分类。

其实穿an矩阵里面的这个非零的元素的比例比较高,那么就是它的稀疏性比较差,那么我们知道如果针对一个一个稀疏矩阵,如果你要去求解它的,它求解它的那个线性方式的话,如果他的这个呃吸收性比较低的话。

吸收性是比较就是它的这个稀疏性比较低,也就是说它的这个吸飞令员比较多的情况下,那么他的这个求解速度也是比较慢啊,所以我们现在虽然我这个考虑了所有的这个pencil的这个两个都考虑了。

那么它的这个飞利亚结构是固定的,但是这,个菲利亚结构,它的数量是非常多的,它会产生一个非常高的dsc啊,我们来看一个具体的例子,这个是左边,这个是我们把所有的这个边界边都全部考虑进来了对吧。

那么它的这个飞行员结构就是固定了,但是他的这个density比较高,那么也就是说它的这个因为它的飞行员是固定的,所以说它的这个符号这个是符号分解,符号分解只要做一次。

但是他每次要去做一个数值分解和一个回答,大家可以看出来它的这个数值分解是非常耗时间的,是0。9秒,但是呢如果我还是去考虑刚才说的,这个大于零小于零对吧,如果大于零,我还是去考虑大于零的时候。

如果这个距离是大于这个app的时候,我还是给他设置,我还是给它设置成零,那么呃给他设成零,给他设成零以后呢,这样的话我就可以去保证它的呃tensity比较低,但是呢它的这个飞行员结构在变。

那么最后他的这个最后花的时间大概是在00:00:09,虽然这一步每次都要做这一步,虽然每次都要做,但是它的这个整体的时间,大概只有前面这个固定飞行员时间的这个一半啊,十倍1/10。

就因为它的这个density是比较低的,啊那么所以说这个地方呢我们就在想一个事情对吧,那既然他的这个dancity是就说我能不能去,他现在是因为现在的问题是在这个dc比较高对吧。

那我就用办法去把这个dd给降下来了对吧,那就是density降下来,那么其实我要降density其实就是什么呢,因为我那么我们就来看一下我们density是哪来的。

这个dc其实是这个边界的任意的两对边之间产生的这个这个关系,对不对,就是如果我考虑所有的所有的边界边,就比如说任意的两对边界边之间它的碰撞我都考虑,那么这个时候他就是把dc的提,高了对吧。

就是因为它是跟你的边界边的数量,那么边界边缘原来是1000条的话,你就是要大概是1000的平方,那么也就是说1000的十的六次方,那么这个时候所以说你要去做这个事情。

让你无非就是说想我能不能把这个边界边给边界边的数量给降下来,那么数量也降下来,这个时候你的density其实也就下来了对吧,那么你要去降这个density呢,所以说所以说做做了一个简单的方案。

你其实可以在这个这个dk,你看这个边界边,如果你考虑这个现在的这个边界边是非常非常稠密的,对不对,所,以他是有这个你的这个这个外面的这个边界边,如果你一开始有b条边界顶点的话。

它最后有这么多一个b平方的一个飞行员,那么这个dc是比较高的,那么这个时候呢你想要去做一个d的dcc,那无非你就是要把这个b给降下来,那么这个时候呢,你可以在这个现有的这个边界边外面去做一个非常稀疏的。

一个非常稀疏的一层壳,那么这个边界边的数量是显著低的,比如说你里面是1000,我可以这个地方可以做成100,那这样的话我只有100的平方,就只有十个十的四次方对吧,那。

这样的话我的这个飞行员的数量可以显著的下降,所以说这个地方呢我给他去做一个造一个这样的coser,那么这个地方的coser里面的这个紫色的点,比这个里面的橘色的点的数量是远远小。

那么这个地方的黑色矩阵就会比较圆圆的小,那么这样的话我的dc就能下降,那么所以说我最后就能从把b变成一个s s的平方,那么这个地方是low density啊,这样的话我就能够显著的降低时间。

那么可以看一下,这个是固定的考虑这个刚才的那个原始网格的这个边界的所有的情况,它是固定的,这个,飞行员结构,但是它的dsity比较高,所以他每次花的时间会最长,因为这个虽然只要做一次。

那么这个这个地方呢它是这个整个的结构是在变的,所以他每次花费的时间是这个也要做,这个也要做这个要做,所以它整体的时间是这个,那么对于这样的我在外面加一个cos的这样的一个网格以后。

加上这个cost的网格以后,那么我的这个边界的,我的这个飞行员结构就是固定住了,那么我的这个density呢也是比较低的,那么所以说呢这个只要做只要做一次,这个只要做一次,那么这个是要重复做的。

那么每次花费的时间只有这两个加起来,将来在这个0。10。01,大概是这个前面这个方前面这一部分内容的大概1/10左右啊,那么这样的话我就相当于可以把这个desk降下来,把最后的这个时间效率给提上去啊。

那么接下来还有一个问题是这个bfunction这个问题,refunction的话,原来的bfunction它其实考虑的刚才也写了,他其实是考虑的是点到这个平面的距离,点到线的距离对吧。

那么他考虑的是点这个是一个点点到线的距离,那么点到线的距离是如果他在这个点到线的这个内部的话,它,这个距离其实就是这个垂直的距离,但是如果他在这个外面的话,它其实是这个点到这个端点的这个连线的距离。

所以说它最后构造出来的这个等级面,它其实是一个这样的一个等级面,他在这个地方是一个半圆对吧,这个地方也是一个半圆,所以它这个等值面是这样一个半圆,那么对于这样的一个距离的话。

他所以说如果这个如果他在这个这个这个里面,这个区域它其实是一个垂直的这样的一个关系,那么如果他在这个外面的话,它的整个区域就是一个点到这个线的距距离,那,么这样的呃,这样的话它就导致了什么呢。

导致了这个最后的这个呃这个距离在这个地方,在这个地方,在这四个地方,它其实不是一个c无穷的距离,它其实只是一个c一的这样的一个距离,那么你直接去套这个二阶方法的话,在这个地方可能稍微有一点点啊问题啊。

所以这个距离它不是c2 的,它在这个地方其实只有一个c,那这个具体的分析这个数学上的这些东西,可以去看一下文章吧,那么于是呢我们就提出了一个c无穷的这样的一个distance。

这个distance呢也比较简单,这个distance就是什,么呢就是基于这样的一个三角不等式呃,我们知道其实在三角不等式里面,这一条边加上这条边应该是大于等于这条边对吧,那如果发生这个碰撞的话。

其实这个比如说这个呃绿色的点要穿过这条边的话,那其实也就是说这个点到这个这条边的距离是要等于零的,是不是就是那么这样的话,其实所以说我们最后的基于这样的一个三角不等式,我们就可以提出来一个新的距离。

是这条边加上这条边减去这一条边,那么那么这样的话只有当这个距离是等于零的时候,那么这样的话,他最后这个地方才会发生这样的穿穿透的这样的一个情况,而且是只能在这个中间穿透,你在这个旁边的话。

你会发现他这条距离是等于这条加上这条距离,还有这个你你如果你这个点从这边过的话,也是没有问题的,因为这个距离在这个距离,这个距离是还是比较大的,v等于零对吧,它只有在这个真正在这个中间产生穿透的时候。

这个距离才会等于零,那么所以说我们最后构造了这样的一个very function呃,构造了这样的一个distance,然后你把这个distance呢重新去代替原来这个distance。

那这个distance它其,实就是一个c无穷的distance啊,啊这个distance也比较容易,这个distance其实最后你可以看成是一个退化的椭圆啊,这个地方数学上我们就不说了。

其实你可以把这两个点看成是一个椭圆的这个焦点,那么椭圆的交点的话,如果现在只是说我把退化到椭圆的两个轴的,我们知道在椭圆上有一个定理是有一个定理是统一上,任何一个点到两个焦点的距离之和是等于一个常数的。

对吧啊,就其实就等于这个长轴会比他,那我们就长成整两倍的长轴啊,啊反正就是这个这个距离你可以看成是这个,所以,最后他这个表现出来的这个等级面其实是类似于是一个椭圆吧。

好那么接下来我们把这个距离放到这个分母上以后呢,我们接下来还是希望对这个方法去,好像我们这对这个方法我们之前就要去做一个二阶对吧,我们只要希望去用二阶方法去做嘛。

那么所以说我就要去对它求一个python,求一个那个镇定,那求一个黑森矩阵,或者说我要具体给他去求一个这样的呃黑森矩阵的正定话,对不对,那么这个时候呢我们就用了这上节课我们讲的这个呃major那个概念。

那么首先对于这样的一个函数对吧,这是一个我们的目标函数,我们把这个目标函数写成这样的一个复合函数的形式是,fg等于e技能除以g减去一加上g呃,g是等于这样的一个distance。

这个distance是等于这样的一个形式,那么我们可以把这个矩阵给它去做一个凹凸分解,那么这个这个上面这个本身是一个凸函数,那么对于这个g的话,我可以分成这是一个凸函数,这是一个凹函数的形式。

那么有了这样的一个凹凸分解以后呢,我就可以直接去对这个海森矩阵的正定话,直接去做这样一个做法,这就是我们上节课的那个cm啊啊,这个具体的形式我就不推导了,大家有兴趣可以再去回去看一下之前的那个方法啊。

其实跟那个东西是一样的,就是相,当于是把这个呃把这个过程给重新的,就是,呃把这个过程给重新的去做了一下,这个呃重新给套到这个地方来了,这个推导过程其实也是比较容易的啊,呃但是我要说一下。

是这样的这个推导啊,就上节课其实我们呃如果是去深挖一下的话,其实我们我可以这么跟大家讲,其实上节课讲的这个cm,它这个方法也不是完美的。

因为它里面去构造那个呃那个can convex那个majora的时候,他其实用的是这个它的导数大于零,小于零的这个情况,但是这种方式呢其实就是它这个地方其实是比较的,就怎么说呢,他这个不一定是最优的啊。

后来我们在另外一篇文章里去呃,做了另外一种这个majoring的构造,所以我们会发现它其实我们最后的方法,这个majorion构造出来的优化效率,会比他原来的这个文章里的那个教练能构出来的。

构造出来的优化效率会更好,而且就好好的还还挺多的,所以这个地方其实也是挺有意思的,因为这个majordan的构造其实真的不是唯一的,他们当时那个文章也只是给了一种方法。

好接下来这样的话我们就有了这样的比较快的这样的二级求解器对吧,我们这个整个的这个结构也就固定住了,然后呢呃整个的飞行员的结构也就固定住了,飞行员的结构是固定住了,然后呢这个dk也比较低。

然后呢最后的这个对于这样的barry function,我也可以解析的获得它是一个呃to的分解近似对吧,就是我的黑森矩阵的直接可以把它写成写出来,就是那个buy function。

而且那个buy function本身也是c无穷的,那么这样的话我整个的优化的效率就会非常高啊,这刚才是展示了一个具体的例子,那么这个地方是一个具体的比较,大家可以看一下啊。

这个是这个就是我们刚才讲的这个第一篇文章,就是那个bufunction那个结果,这个是那个caffold的那个结果,就是外面加了一层这个网格的结果,这个是什么。

这个是这个pp就是我们上节课讲的这个就是这种没有可以阐释,这个是最终的,这个是我们现在刚才讲的那个文章,就是又带这个cost function,又带那个的,最后会发现其实那个呃看一下啊。

就可以发现最后这个的结果你可以看到这个的花的时间啊,就这个这个是产生了一些很多的自交对吧,这个是没有产生自交之后,你可以看下线这个地方他用的是04:00:23,这个只有05:00:04。

那这个扭曲也是相当的啊,他不会说明什么呢,说明这个呃这个方法基本上是接近于乐,接近了这个没有翻转的这个效率了啊,你可以看到这个cover它大概时间是在这么多,那个这个另外那个这个就更别说了。

那这个你可以看一下这个例子也是这样的啊,比如这个他只用了0。190。26,这两个方法其实是就这个地方已经接近了,这个最快的这个算法了,那这些方法呢就是其他的这些,因为它这个地方这个飞行员的结构的变化。

它的这个效率还是比较低的啊,就基本上你可以认为什么呢,就现在这个说呃无缝的这样的,不就是这样的全局的参数化的结果已经是逼近了,原来这个,已经是跟原来这个没有考虑这个边界自交的,这样没有考虑这个边界啊。

就不考虑边界产生自交的这个情况的这个最优质的啊,或者说接近这个最优值,那么这是一个更加复杂的例子,哪怕是这样一个高规格的网格,最后切开以后去做这个参数化,最后这个情况下。

就是我只要这个边界其实给一些比较糙的一些cos mage的,最后这个优化出来的结果也是扭曲还是比较低的啊,啊这是一个更简单的例子,这是一个希尔伯特的这个希尔伯特曲线构成的一个客单曲面,最后优化出来的话。

应该是一个完整的一个平面啊,在这个随着这个优化的过程中,最后呃这样给它构造一个这样的层的话,也是慢慢能够把这个曲面给合上的啊,这基本上是达到了这个最优值啊,只不过花的时间会比较长,不管怎么样啊。

就是今天介绍的这个三类的这样的一个考虑,这个全局无缝参数化的这样的一个呃呃呃globin不是全局,不是全球服的话,是这个global这个injective参数化的这样的一个呃方法。

那首先第一类方法是这个就是基于障碍函数的方法,第二类是基于这个,第三类是把这两个方法给做了一个结合啊,就是又考虑了这个bufunction,又考虑了这个scaffold。

就你可以认为这个后面这个方法里面的这个cos share match,其实就类似于就是这个scaffold mesh,那么接下来还要考虑一下最后一类方法,这一类方这这还要考虑最后一类问题啊。

这类问题呢是这样的,就是说他原来的这个原来这个问题啊,就是说在做这个全局无缝参数化的时候,或者在做参数化的时候,其实我们没有考虑一些额外的约束对吧,那么但是呢真正在做这个纹,理编辑。

或者说在做这个纹理的这个贴图的时候,其实比如说这个图片叹息已经已经给你弄好了,那这个时候你要去支持一个参数化,那其实我是希望这个参数化的某一些顶点是移动到我指定的顶点的。

比如说我要给这个人去贴一个参数化结果,那么它比如说我的这个纹理图片里面有一个眼睛,那么我我当然是希望这个网格上的这个眼睛,这个顶点是移动到这个纹理的这个眼睛上,这个点上来对吧,那么这样的话。

那么也就是说你需要把这个网格上那个顶点和那个参数化结果,是放在这个图片的这个眼睛上,那么也就是说你需要这些呃,参数化的顶点是移动到这个指定的给定的顶点,那么把这些指定的顶点移动过去呢。

这个过程其实也是比较的呃,相当于你会额外的加入一些约束,那么加入这样加入一些约束以后呢,其实整个这个优化的过程就会产生一些问题,就之前讲的一些方法可能会产生一些问题。

比如说你现在要把这个眼睛这个点放到这个图片上,眼睛那个点上去,那么这个时候to this embedding显然是就是不能用了对吧。

因为啊不to this embedding和这个呃two bedding,和这个顶点预约束,它其实是在这个初入式里面是没法去同时满足的,你比如说你使用这个titing bing。

那其实他这个两个眼睛的顶点,其实是没法直接去落到这个图片的那两个顶点上的,也就是说你的这个初始化它其实是不一定会满足这个约束,那么第二呃,当然可能很多同学就说哎我能不能先做一个tobin。

然后去把直接把两个点通过这个deformation叫handle this deformation对吧,我把这个两个顶点当做handle移动到那个顶点,移动到那个眼睛上去。

那么这种方法你直接去移动的这种方法呢,它其实可能会在有时,候会产生一些呃叫做self locking的issue,就是他两个东西,比如说你这个左眼睛,右眼睛。

你正好在这个或者说你这个这个顶点的这个轨迹啊,在这个移动过程中可能会产生这样的自锁情况,就是说你把你先生成一个to this bedding。

或者你先生成一个呃global global injective参数化,然后呢你把这个呃顶点移动到它的这个指定的位置上去,那么你在这个移动的这个过程中呢,你不不反不穿,不发生这个翻转。

不发生这个边界的自交,但是呢你在这个移动的过程中,可能会这两个路径产生一定的啊,这个路径可能会产,生一些的自锁情况,就是他要往这边,他要往左边去,另外的话要往右边去,两个人正好在中间卡住了。

那么这种情况是会产生的,所以说呢我们一般情况下呃,当然可能有些case下其实这样做可能就能解决问题了,但是有些case下这样做是不能解决问题的,那所以说为了去想一个万全的方法的话。

我们一般情况下是不是在学术上我们不会去这么做,当然可能工业学会这么做吧,我们不会去这么做,所以说我们这个所以我们要去想一个另外一个方法,去解决这样的一个自锁的一个情况啊,那么还是这样的一个问题。

其实我们还是可以把这个原来的这个问题啊,就是还是用这个caffold的,我其实可以把这个问题转成一个什么呢,转成一个无翻转的问题,就是我现在这个那这个图他现在这个这个蓝色的点。

它其实是给定了这样的一个约束的,蓝色的点是给定的这个约束的点啊,就是我希望它是移动到这个指定的点的位置上去的,那么这个红色的点是这个边界产生这个自交的点,那么边界产生自交的点的话,其实。

呃我只要去给他呃,如果现在这个边界也产生自交了对吧,那么这个时候你其实外面如果有一层这个scaffold的话,那其实现在就会产生一些反转的三角形,那我只要把这个翻转三角形去掉。

那最后呢他其实就会得到的是这样的一个没有翻转的结果,这是什么意思呢,我们来看这个图可能画的不是很清楚,我们可以来看一下下一页ppt啊,这是一个输入的一个呃初始网格,这是一个初始的这个参数化。

但是呢这些蓝色的点呢是希望只希望指定到一些给定的位置上去的,那么这个时候呢我可以把这个呃先不管怎么样,我先可以在这个过程中,我先可以生成一个就按照前面的方法。

比如刚才讲的barrefunctions cafort,还有后面的这个一个需要mesh这种方式,我可以先称生成一个先生成一个呃初始的没有翻转的。

并且边界没有自交的这样的一个globe jective的结果,但是呢这些蓝蓝色的点不是在这个目标的形状上,那么我可以给它去构造一个外面一个caffold mesh,然后里面这些蓝色的点。

但这些蓝色点注意啊,这些蓝色的点还不在指定的位置上,那这个时候呢,我可以强行的把这些蓝色的点移动到这个指定的位置上去,指定到移动到这个指定的位置上去,大家可以看一下。

那这样的话就会产生很多的这样的翻转的三角形对吧,那么接下来我只要把这些翻转的三角形给去除掉,就我只要在接下来的优化过程中,把这些翻转的三角形去除到边界,整个staff的外面的整个大边界不改变的话。

所以说如果外面的scaf的整个大边界是固定的,并且内部的这个没有翻转,那么整个的这个结果就是一个global结合体的对吧,那么说但是现在呢我把这些lmark。

或者我把这些handle移动到指定位置上的时候呢,那么这样的话我最后的这个产生了一些翻转,那么接下来我其实只要把这些翻转的三角形给去除掉,那么去除掉的过程中,我就能够比如说我去除变成这样。

把把这个三角形的这个边界全部去除掉,那么这样的话我就可以其实就可以得到我们想要的这个,最终的这个结果了是吧,那么所以说最后的这个问题呢就变成了一个带有翻转的初始化的,无翻转映射的求解问题啊。

那么这样的话就可以引用我们,上周六讲的那些方法去应用到这个问题里来,那么所以说我们只要去想办法把这些翻转的三角形去掉,那么去掉完以后呢,最后我们就可以得到我们想要这样的结果了啊。

那所以相当于我们把一个原来一个在呃带global injective,加上position约束这两个问,这个问题呢就转成转化成了一个求解无翻转,无翻转移,无翻转参数化的这样的一个问题。

这个无法等参数化的这个问题呢,它是带有这个输入,是带有这个当然转转的啊,那么这样的话我们就可以我们之前的方法,比如投影的ba function啊,比如说这,个其他的一些方法来求解这个问题,那当然了。

在这个问题因为用了这个staff的这个网格,我们还是也需要对这个scal的这个网格去做一个remax对吧,那么之前的那个网,之前那个pv里面那个cf的地方的rematch,因为它是个外边界永远是好的。

所以他直接可以用一个c d去做,他对战我们的问题呢,你可以看到这个地方的这个三角形其实有一些翻转,所以说呢真正在去做这个remax的时候,其实我们会用这样的呃,叫做age的split aged。

lapse,age的flip aged voice relocation,这样的方式去做这个remash,那么最后呢我们就可以因为,这个地方还是会有这些三角形变得很差的情况。

所以我们也是需要去做这个remax的啊,做完这个remax以后再去优化的时候,最后的这个就会很顺利的优化完成啊,最后这是我们最终得到的这个结果啊,整个方法也是比较简单的。

那比如这是更多的这样的一个例子啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

嗯简单的总结一下今天讲的内容啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

今天讲的内容,那么在这个参数化的求解过程中呢,我们其实是呃优化了它的,我们去强嗯,强调的是这个边界不要产生自交,然后顶点,那么并为了让这个边界不产生自交呢。

我们一般情况下都是从一个two dibly这样的结果开始去优化扭曲,在整个过程中不会去产生这样的一个边界自交啊,那么在整个这个过程中呢,我们主要介绍的方法,一类是这个障碍函数法。

还有一类是通过加上一个scaf的这样的一个mesh,然后去做那个求解吧,那么嗯后面我们会讲的把两个方法给combine在一起,然后接下来去讲一下带顶点位置的约束的这,样的一个呃方法啊。

好我们就今天的课就到这里。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GAMES301-曲面参数化 - P6:Lecture 06 参数化应用1 – Atlas生成、艺术设计 - GAMES-Webinar - BV18T411P7hT

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

好那个我们现在的这个时间到了啊,我们今天就开始今天的课程,今天呢我们就开始要介绍一下这个呃参数化的应用啊,前面介绍了一些这个基本的方法,然后计算无翻转的参数化。

然后上周上昨天讲的是那个计算一个全局单数的一个参数化,那么今天我们就要去来介绍一下这个基于参数化的一些应用,这个基于参数化的应用的课程内容会比较多,呃我们今天会介绍的是两个,一个是这个atx的生成。

还有一个是呃艺术设计,然后下周六我们会讲一下这个网格生存,然后再到后面,我们还会介绍一些其他的应用啊,那么首先我们今天进入我们今天的课程是这个ex的生成。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

啊我们主要今天讲的这个at last generation呢是for这个scanned mesh,就是说你比如说你通过这个三维扫描得到一个数据对吧,那你可能想对他去做一个纹理的贴图,这样的。

而不是希望它是自动的去生成一个纹理贴图,而不是说去通过这个artist去首条对吧,因为在这个啊游戏或者说电影这种场景里面,或者更多的还是这个artist去手聊这些atlas。

然后它其实需要的是一些基本的工具,那么对于自动化的要求啊,只要说那些工具里面是自动化的,但是它其实整个流程的自动化,反而有时候不能体现出它的这种自我创造了这个东西。

所以我们在我们之前今天介绍的这个艾克生存,在我看来主要更多的是面向这个三维扫描,比如你通过这种激光扫描仪得到了这样的数据以后呃,重建出来网格以后,我怎么去生成这样的自动的去生成这个ax对吧。

你不可能这个扫描的时候,你还要去通过artist去调这个纹理,这个是不大现实的,那么对于这样的一个text map的话,呃,首先txt main的一个定义是什么呢,它其实是一种方法用来定义高频的。

这样的deta曲面的texture color information,有一些颜色信息在一个计算机生成的图片上,或者一个3d的模型上对吧,那么比如说我们现在左边这是一个呃呃这是一个三角形网格。

它上面什么颜色都没有,然后再加上这样一个纹理贴图,其实就是相当于把三三角形每片跟这边的纹理颜色对一一对应上,然后呢最后通过这个渲染的时候,我就可以得到这样很逼真的这样的效果。

这个过程就是通过这样的一个纹理texture map的这样的一个过程去呃,去构造的,那么真正去做这样taxi这个地方展示了一个这样的一个简单的例子,这是一个房屋。

然后呢你可以看到他真正做text map的时候,涨到2d平面上的时候,其实就是这样一堆一堆的这样的房子,然后他最后把它这样一堆的图片参数化结果对吧,然后参数化结果每个上面有一个颜色。

然后再回到这个三维上,它就会变成一个可以三维渲染的这样的一个房子,那么所以说这个itx呢你可以认为它其实是从这个model space,从这个model space到这个text space。

它其实是有一个嗯mark,那这个这个model space,它其实是是从这个这个三维模型的空间,到这个2d的平面的那纹理的空间,它实际需要对这个模型上的每一个点,它需要映射到这个2d的平面上。

这样的话它才能够去把2d的这个颜色再返回到这个三维的模型上,所以这个ex它需要的是一个market,或者说他需要的其实是一个参数化,这个参数化是从这个啊模型的这个表面,映射到这样的一个呃纹理的空间。

因为纹理的空间,这些颜色其实都是有这种呃真实真实生活中存在的颜色,或者说只有orchestra去调的这种颜色,那么你一旦把这个映射建立起来,那你在做渲染的时候。

你就可以在这个三维模型上把他的这种细节特征给渲染出来,就是它的这些颜色特征给渲染出来啊,所以这itx你可以从这个本质上认为,其实它本质上还是一个参数化。

只不过它这个参数化呢它需要是在这样的一个texas space,text space,一般是这样一张图片,所以它基本上是希望最后你的参数化是落在这样的一个长方形,或者是一个正方形里面。

那么这样的话才能够去做真正的这样的一个test map啊,这才能去做真正的这样的有这样的颜色空间的存储,然后到这个三维曲面上去渲染,那么对于这样的一个过程对吧。

现在我们的目的其实是现在给了一个左边的这样的一个三维的模型,我需要去啊,比如说你对于扫描的扫描的网格的话,扫描的这种三维模型的话,它其实扫描出来其实是点云,然后每个点上它可能会有一个颜色。

那么这样的话你其实最后得到的这个网格,它其实是一个重建出来的这个网,格其实每个顶点上又有颜色,又有这样三维坐标,那这个时候呢其实你需要把这个网格参数化到这样的2d平面上。

然后把这个颜色坐标颜色值付给他的顶点,只能构成这样一张图片,然后再去逆向的渲染就可以了,那么所以说现在我们的现在我们想要解决的问题,就是怎么去建立这样的一个map,就是怎么把这个网格切开,切开完以后。

每一块参数化到这样的2d的平面上,那么所以说整个的过程其实可以分为如下的三步,首先是这样的一个网格切割,切割完以后呢,然后再做参数,化啊,这参数化就是我们之前讲的,最后呢才是把这个做出来的这个块。

然后在这个二在这样的一个正方形里面,或者说在这样的一个矩形里面去重新的pack pack呃,这个切割呢当然你可以认为就是在这个表面是个黑色的线啊,就是在这个三角形的这个网格上。

其实是引入了一些这样的啊黑色的线,或者说你是其实引入了一些这样的歌缝,把这个网格给切开了啊,就是其实就是一些边的,你可以看简单的看的话就是一些边的集合,然后把这边的把把这个边呢然后拆开以后把这个网格。

切开以后,然后呢你就可以去给它做一个参数化,那么参数化的时候,比如现在这个地方展示的这个例子,它其实是连在一起的啊,就是说每一块它还会有一些啊,他还而且没有做到这个global injective。

他还是有重叠的,然后呢你对这一块参数化,你可以去做进一步的切开,再比如在这个内部我再去引入一刀,再去引入一些刀,就是再去把它分开,然后分开完以后呢,我再在这个矩形里面再去做一个重新的参数化。

或者说重新的这样的一个packing,重新的排布,那么得到一个这个是一个overlap free,flip free的参数,化,并且是这样的一个在这个矩形框内比较紧致的排布在一起,就这个空白的这个面积。

白色的这个面积跟这个整个三角,整个正方形的这个面积的比例是比较低的,那么这种是比较高的packing的效率,那么所以说呢对于这个整个的问题的话。

就所以说整个的这个atlas对于这种can mesh aclas tension的话,一般情况下是首先是对这个三角形网格去做一个切割,切割完以后去做参数化,参数化以后再去做一个重新的切割。

重新的packing啊,得到最终的这样的一个结果啊,那么所以大家可以想一下整个的过程,就是分为这个三步,那么也就是说我们首先要怎么去在这个原始的网格上去做一个,这样的切割,切割完以后怎么去做参数化。

那么这个参数化的话其实之前已经有已经讲过很多了对吧,那么这个参数化你可以复用之前的一些啊,结论他们做完这个参数化以后呢,我要去重新对这个,因为我其实目的是要让这个白色的区域这里面留下来。

这些白色的区域占整个正正方形这个比例是比较低的,那么所以说呢我希望这个台不是怎么紧致的,那么这个地方其实是另外一个要处理的问,题,嗯做了做完这些以后呢,我们就介绍完这些以后呢。

我们分别来看一下每一个每一个具体的技术是什么样的,首先是这个cutting,那么cutting的话我们当然是希望最后呃因为在这个过程中,我其实希望这边的这个扭曲是比较低的对吧。

那这样的话我的这个txt map的时候,那个颜色的失真就会比较小,那么所以这个地方呢,我们希望这个切割出来的这个网格的这个扭曲是比较低的,那么并且呢这个边界切出来的这个边界的缝啊是比较的短的啊。

为什么要短呢,其实因为是就是说如果你这个边界的缝长了以后呃,首先在这个边界缝的左右两侧,它其实它的纹理的映射,最后你做这个testing map,做这个纹理的映射回来以后,你去做渲染的时候。

他那个地方可能会在缝的两侧出现一些artifacts,那么你这样的cut如果越短的话,它这个artifex产生的这个就几率也就会比较低,那么所以说这个地方呢我希望它的这个扭曲是比较低的。

并且它这个cut的长度是尽量比较短的啊,这是凉一点呃,所以这个地方就要就会遇到一个问题,是你在做cut的时候,你其实就要预先,的知道你做出来这个cut的时候会呃低扭曲的。

那么这个地方其实是就会有一个寄生蛋蛋生鸡的关系对吧,其实你有了cut,你才能会去做参数化,你有的参数化才能啊才会知道它的扭曲高不高低不低,然后你这个情况其实是会不要急升段,就是会存在一个迭代的过程。

这个过程其实是比较的对,但是刚刚有一些技术可以去不做显示的参数化,就能去把这个丁有区给啊,就影视的表示出来吧,这个是另外一回事了,这个后面可能呃方钦老师会去介绍一下这方面的内容。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么就是说我们,希望它这个地方的这个缝啊是尽量短的,因为什么,因为这个这个网格切割出来的这个缝,如果真正在做文,在做那个渲染的时候,它可能会产生这样一些artifacts啊。

所以我们希望这个cut尽量短短的话,最后才拿的f是不明显啊,当然这是一个比较极端的例子,而大部分情况下还不会不会可能就不会这么明显啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么当然第二步就是做参数化,那么参数化的话,既然当然我们希望它还是这个呃扭曲比较低,并且它是一个globally jective对吧,这个上节课已经讲过了,我们就跳过去了啊,那么对于这个packing。

的话就最后我需要把这个参数化重新再把它拆开,拆开完以后再去贴到这个2d的平面上去啊,拆开完以后我重新把它pk到一个呃矩形里面,或者重新pk到一个正方形里面,这个呢也非常的定义的。

其实就是你可以看成是这些紫色的,紫色,不就这些彩色的这些三角,这些参数化这些这个参数化这些所在的这个块,它占整个它在整个这个外面这个bonny box就是这个呃黑色的框所占的,它的那个比例是多少啊。

那比如说这个地,方的66%,就是指这些彩色的块的面积除上整个这个长方形的面积,它就是等于0。66,那么如果在右边的话,你可以看到这个彩色的块的面积除上整个这个长方形的面积的话,是把呃把那0。858。

那么也就是说你这个对于同样的这样,比如这个彩色的面积,其实它都是跟这个原始网格相关的对吧,这些彩色的面积基本上是约等于这个原始网格的,那么也就是说既然它是约等于这个原始网格的。

那么也就是说它这个彩色的彩色的块,它其实它是呃约等于这个约等,于这个所以他们产出的块的面积是一样的,但是呢他的这个右边这个结果它的这个效率会比较高,就它的面积比会比较高,那么也就是说我在真正在计算机里。

比如说我要去存储一张纹理图片的时候,我右边这个存储来的图片的大小就会比这个左边这个图片要小对吧,呃什么意思,就是说你原来比如说你这个这个彩色的面积都是面积,假设我就是一的话。

那么我最后这个右边传出来的这个这个正方形的,这个这个长方形的这个面呃,这个面积的话就是衣橱上85点呃,除上零,点858对吧,那对右边这个图就是1÷0。66,那么显然是右边这个呃框的那个面积要小。

那么面积要小的话,也就是说它对应的这个像素的数量会显著的比这个左边这个p对吧,那么这样的话我们就可以通过这样的一个方式去呃,减少这个存储的量啊,因为它在特别是在一些游戏,或者说在一些呃影视动画里面。

它最后特别是游戏嘛,它其实存储的这个texture其实是会非常非常大的那张图片,因为它很有可能是把很多模型的这个text,是混在一张这个纹理图片里面的,那么它的,这个纹理图片的那个规模或巨大无比。

那么巨大无比的话,如果你能节省这样1%或者节省10%,这样的一个packing效率的话,可想而知,给你这个游戏或者说给你这个呃带来的这个成本会比较呃,这个这个这个就是呃存储成本会显著的降降低。

那比如对你这样的一个扫描的一个模型的话,你如果这样的存存储除图片小的话,也就是说比如说你最后给人家交付的这个模型的大小对吧,也会降下来,因为你的图片本身也要嗯。

比如你这个test的图片其实也要占这个存储的这个大,小那么呃比如说像右边这个图,它还有可能这种,因为我们之前按照这个参数化计算。

那它这个参数化可能还不一定是这个globally globally indictive对吧,它可能还会存在一些这样的自交,那么他这种图片的话更加没法直接去交互。

那么所以说呢左边这个图你就是说我还是需要去把它给解耦对吧,把这个packing的这个把这个把这个给结尾看了,结果开了以后重新去切割,切割完以后重新去做这样的一个pack啊。

那么这左边这个东西你还可以看成是一个无效的,这样的一个纹理贴图对吧,因为它会有一些,自交啊,成为这些更多的问题,那么右边的话我可以把它重新给切开以后对吧,重新去做pk。

然后这样的话最后得到的这个扭曲也是比较低的,然后并且他的这个packing效率也是比较高的啊,这个at last呢就是说传传统来讲对吧,它主要是用于这样的一个texture mapping对吧。

就是我们之前讲的这个可以呃用来做,比如一个三维扫描出来这个模型对吧,你把这个at t做好以后,那你可以当然可以直接去做渲染啊对吧,只要有一个三维模型,再加一张图片啊,这个都都直接可以去做渲染。

这是最直接的应用啊,除了这样的应用以外,它其实还有一些就是他其实这个一个是这个信号的存储嘛,就刚才的那个test map,其实你可以认为是比如说对于这样的smos模式,mesh mesh的话。

就这些扫描这个网格,的话,其实你可以认为这个纹理贴图,它其实存储的是这样的一些颜色的信息对吧,那么对于这样的artist的话,在,前几年他们还做了一篇这样的一个文章。

是他可以把这样的艾特是用在一些几何处理的问题里面,比如说他们在这个几何问题,他们在这个问题里面,比如去计算这样的测试线对吧,那怎么当然这里面的呃就是说只是想表达一下这个ex是比较有用的。

它其实不光是可以用来做这样的text map这样的事情,它还可以用来做更多的这样的一个jma processing task,比如说这个地方讲的这个呃叫didistance的计算对吧等等等等。

还有一些呃其他的一些应用,所以说呢这个ats它本身这个也是一个比较fundamental的一个structure吧,就是你你如果对他的计算的比如packing的效率更高啊,你这个方块的这个数量更少啊。

你当然是这样,是我们是比较好的,那么所以说呢从这个从最后还是回到这个最后,这个其实最终你要去评判这样的一个access的好坏,其实我们用的比较多的这样的准则。

首先是一个是这样的一个呃packing的效率,这个效率就是指这个彩色的面积,除上这个bonny box的面积,第二个是这个boundary lance的长度。

就边界的长度就是其实就是指这些边界的这个长度啊,这个边界的这个长度,然后这个cn指的是这个块的数量,总共是13块块的数量,然后还有一个是这个distortion本身对吧,有趣的distortion。

所以说一般情况下我们会用这样一个四个指标去,首先是这个packing的效率,第二个是一个边界的长度,因为我们刚才讲了这个边界的长度,它其实会迎来这个渲染的时候的一些artifacts。

编辑的长度也是比较重要的,最后还是这个chat number对吧,这里面总共有多少块,这个快如果多了,那其实最后的这个扭曲也会比较钝,要不这块比较多了,其实也是比较不好的。

因为这个快一块之间的这个不连续性其实也是我们不是很喜欢的,最后还有一个这个distortion对吧,这个discortion不能太高,那么对于这样的,我们接下来来那个分别来看一下这个技术啊。

那么接下来我们要讨论的是这个嗯,接下来我们要讨论的是这个match cut的一些呃,首先我们还是分为这三个方向啊,应该是这个网格的切割,一个是这个参数化,还有一个是最后的这个packing。

那么对于这个网格的切割而言的话,一般情况下会有两类,一类方法呢是这个叫做pointer to pass,这个这个point two two pass的意思是什么呢,就是他会通过去寻找一些这样的点。

这些点呢其实会引起这样的一个高扭曲,就说其实网格上你真正引起这个扭曲的其实就是这样的一些离散的点,然后呢你只要把这些离散的点给它连起来,那么最后的整个的这个参数化的这个扭曲度不会很高啊。

那么这一类方法叫做point to point,point to pass这样的一类方法,那么这类方法的话就是它一般分为就是两个步骤,一个步骤是这个啊这个point的这个计算是吧。

然后第二类是这个怎么去把这个point给连起来,因为你如果给定point的情况下,你去连这个point的话,其实就是一个呃,相当于要经过这些所有point的一个最小生成树是吧。

那其实就是一个斯坦纳树的问题,在一个图上去做一个斯坦纳数的问题,那其实本身也是一个你要去如果要去做它的长度最短的话,其实本身也是一个np hard的问n p hard的问题,那么呃对。

所以说这个pass的生成,你在给定点的情况下,它其实也是个2/2的问题,那么对于这个点的生存的话,其实你要在这样的前面,在生存的过程中,你要知道这个点会引起高扭曲对吧。

那这个时候你其实是会需要去做一些这样的预测之类的,那么第二类方法是同意通过这样的一个分割的方法去做这样的,做这样的参数,做这样的这个match cut对吧,那么参数化的意思就是说呃就是分割的意思。

就是说你去把这个网格分成每分割成一块一块,而每一块呢我去通过它,我知道它是最后参数化到2d上,它的扭曲都比较低啊,相当于他直接是通过分割,那么这种方法的话呃也是也是比较常见的啊,后面我们会介绍一下好。

这个是eternative method,那么首先我们来介绍一下这个第一位啊,就这个point to这个pass,那么我们今天要介绍的,今天我们在这个这个题目上我们不深入去介绍啊。

我们就只是简单的给大家呃介绍一两种方法啊,这个是首先是这个是一个啊,我忘了加标下面这个呃paper了啊,这个是那个小米跟image那个文章里面的啊,小米小米g e o m e t r的话。

叫我们去image里面那个文章里面的那个方法,他为了去做这样的一个所谓的引起高扭曲的,这个distortion point的这样的一个检测的话,它其实是用了一个非常启发式的一个交替迭代的方法啊。

首先呢他在这个曲面网格上随便的这样的割一刀,然后呢去做一个这样的two test beding,做完two diy bedding以后呢,他在这个参数化里面,他去把那个最最高扭曲的那个点找到。

这个点是最扭曲最高的点,然后你去最高的点找到以后,然后他把这个线连起来,然后生成一个新的一个啊一个cut,然后再去做一个参数化,做完这个参数化以后呢,他再去把这个最高扭曲的那个点找到。

然后再去做这样一个参数化,然后这样交替迭代,直到最后的这个最高的扭曲的点是落在这个边界上的位置啊,很简单,就是每次就是相当于做一次参数化,选一个扭曲最高的点,然后做30话,选一个扭曲最高的点,做一次。

30话选一个扭曲最高的点,做一次30化,选一个扭曲最高的点,就这样一个很交替交替迭代的这个方法,那这种方法一般情况下会漏掉一些重要的点,然后最后他的那个嗯结果一般是不是特别好的啊。

然后接下来这个要去连这样的哎,这个p p t里面没有讲啊,如果要去连这样的一些呃,现在比如假设这些点我已经找到了,那么接下来你就要去把这些点给连起来对吧,那么连起来的话,我就要去给他去啊。

构造一个市场的,要是需要去做一个最小生成树,把它连起来,那么为了去做这个数的话,最常见的方法就是把这个点与点之间的这个最小路径,最短路径给构造出来,就是先把这些点我先去单独去构造一个完全图。

在这个完全图上去找一个最短路径啊啊这,这类方法呢是一个比较启发式的方法,他最后跟最终的这个菜单速度还是会有一定的差距,这个我们这个课就不具体多,我不进步进一步介绍了啊,我们就大概就是说一下。

它其实是个连接呃,你要在这个网格上,你要去把这些点全部连起来,这个路径是最短的,这其实本身是一个嗯斯坦纳数的一个问题啊,斯坦来数的话,它的这个求解的问题是比较的困难,就是它本身是一个nb号的问题。

你要去求解它是一个比较难的问题,那么接下来是一个呃这样的,我基于网格式方法,那么基于网,格生成方法其实是我希望去把这个网格分成一块一块,然后每一块在参数化到2d平面上的时候,它的扭曲都是呃比较低的啊。

那么为了去做这样的一个分割的话啊,今天我们要介绍的这个文章是一个就是叫低差值啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

哎呦今天没有加那个下面的引用啊,那加这个低下的,他其实用的是一个类似于这个那个vs的那个paper的那个思路啊,叫vational,他其实用的是这样一个思路,或者说大家如果比较熟悉这个cvt的话。

它其实就是一个logo的迭代,如果大家是熟悉k miss的话,它其实就是一个k mix里面,那个聚类中心跟这个这个属于哪一类这样的一个迭代啊,那么对于他这样的方法,那么他的这样的一个出发点是来自这样的。

因为我要知道我要把这一块三角形网格上分出来的每一块,我要定扭曲的参数化到这个2d上去,那么也就是说意味着我需要去嗯,我需要去这个什么呢,就是我需要让这一块我要找到找到一个只找到一个度量的方式。

说这一块我在参数我不要去做显示的参数化,我他在不做参数化的时候,我也知道是扭曲比较低的,那么这个如果是这样的一个出发点的话,我们我们其实可以根据什么呢,可以根据这个可展曲面的这样的一个思想去做这个事情。

因为我们知道如果是一个这一块曲面,它如果是一个可展曲面的话,那它其实是参数化到这个2d上去的话,它其实它的这个对应的distortion是等于零,对不对。

就如果这些衡量曲面它可以是等距的参数化到2d上去,那么所以说呢他的出发点就是基于这样的一个客单,曲面的这样的一个想法,他们如果是一个曲面,如果是一个曲面的话。

核弹曲面它然后呢呃但是你要去表示一般的核弹曲面,它其实是又有这个呃直纹面啊,也有这个锥啊,又等等一些很多的这样的不同的类型呢,其实所以这个文章里面他就是用了直接就是用了这样的一个呃。

追的这样的一个思思反思想,那么所以说呢他这个地方做的这样的一个呃constant angle between,这个surface normal,就是说他这个地方用的是什么呢,用的是一个追。

那么追的话我们知道对于一个圆锥而言,对于一个这样的一个圆锥而言,你其实可以只用它的这样的一个这样的一个中中心线的这样的一个线,对吧,就是他的那个法线,它的母线,它的母线跟这个他的这个轴。

这个圆锥的这个轴跟他的这个表面上每一个点的这个朝向,它的这个夹角其实都是一样的,那比如这是圆柱,圆柱退化成这样的一个圆柱,其实可以看成是一个很极端,或者原台,它其实也可以看成是这样的一个轴。

跟这样的一个夹角之间的这样一个它的夹角是一个嗯固定的值,那么所以说呢对于这样的一个就是一个圆锥曲面的话,它其实可以用一个轴和一个角度来表示,对不对,那么只要是你的这个轴。

你的表面上所有的点跟这个轴之间的夹角都接近于这样的一个呃,常数圆角的话,那我就可以去表示它是一个圆锥曲面的,圆锥曲面的话,它的这个它是可展的,它参数化到2d上,它的扭曲是比较低的对吧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么所以说呢他这个地方他就可以去做一个什么事情呢,呃matches就是,所以我就可以用一个很简单的度量去做一个事情,比如说我给定一个三角形,我给定是一个三角形,这个三角形呢它的那个法向是这个nt。

把它的法向这个三角形的法向是nt,那么这个nc是什么呢,nc是比如说我这个地方这这一块区域,这是一块我分割出来的这个区域,这个区域里面我给它定义一个轴,这个轴是n s c。

它的这个朝向是刚才说的那个角是c他c这是一块分割出来的角色,然后这个里面有一个三角形,这个三角形的法向是i n t,那么我们怎么看这个三角形跟这个,给定的这个a c和c大c这个圆圆锥曲面它的逼近程度呢。

那其实我们刚才讲了,这个如果是圆锥上的一个三角形的话,它的法向跟这个轴之间的夹角应该是等于这个c到c的,那么所以说我直接可以用这两个之间这两个法向之间的点乘,跟这个cos in c的c去做了一个差对吧。

那如果这两个相等的话,就意味着它们的差应该是等于,如果这个三角形是完美的落在这个圆柱上的话,那么它的这个轴应该这个角度应该是等于零的,但是呢这个地方肯定是肯定还是会有一点这个呃,差别的。

那么所以说这个地方呢,我们其实是希望它这所以说在这个地方会有一点差别啊,所以我们可以用它们之间的这个差的平方,作为这个去确定这个三角形是不是属于这个圆锥,或者说它离它在这个圆锥里面,它的这个误差是多大。

那么所以说呢当然了,他还会定义一些其他的这样的能量啊,反正我们主要是以这个能量为主吧,那么这样的话我接下来我要去做这样的一个迭代对吧,那么跟这个loyd的迭代,或者跟这个kris迭代一样的。

那么随机选择它的整个流程都是一样的,随机,选择一些三角形作为这个种子点,然后呢把这个种子点,你比如说你看这个这个种子点以后,你可以对每个三角形啊。

你可以用它的这个三角形的这个呃法向作为它的这个process,然后,然后呢你再去增长这个chat,从每个seed往外往外去涨,涨完以后呢。

你其实可以让这个呃让这个三角形跟这个当前也就是k miss一样的,就是或者跟logo给的样离谁最近,我就属于他对吧,然后呢在呃做完这一步以后,其实已经做了一个分割,做了一个分割以后呢。

你再去重新的去更新这个每一个分割里面的这个process对吧,所以做完这个process以后呢,然后你再去做这样的呃,再去算完这个新的process以后呢,然后你再去算新的seed。

算了这个新的seed以后呢,然后再去做这样的呃重复的这样的去呃做一个,聚类对吧,这样的一个交替迭代,我就可以把最终的结果给分割出来了,那么整个的这个方法是跟k mic dt都是相似的。

好接下来我们要介绍的是这样的,因为参数化整个就是一个是match cut,参数参数化,那么参数化其实在我们之前的课程里面已经讲了很多了。

那么所以说呢我们今天接下来直接讲的是这个啊packing your visions啊,就是这个packing这个效率,那么对于这样的一个packing的效率的话,它其实描述的是这些彩色的区域。

跟这个呃彩色的去所占这个整个长方形的这样的一个比例啊,比如这一块就是80%,但是呢对于这样的,比如右边这一块,它的packing的效率就只有46。45%点六。

那么对于这一块他最后的这个pixel的这个使用的效率就比较低,那么对于左边这个的话,它的pixl使用效率就比较高,那么这样的话你会发现它这个地方的这个矩形的框,长方矩形的框会比这边矩形的框显著小很多。

那么也就是说我最后这个去存储这张图片所需要的这个呃,图片的分辨率也会小很多,那么这样的话我的内存和存储都会下降,内存指的是就是说你这图片读到这个计算机里的时候,它这个会下降,所以我刚才讲的。

如果是一张单独的图片,比如说这一张小图片,那你可能这个在现在这个计算机里,你可能感受不出来,但是呢如果你就像在一些游戏场景里,你整个的这个比如说你100个模型的开始都放在一张图片上。

那你这张图片是巨大无比的,那这个时候他的这个如果他是个巨大无比的,那你如果再去呃,就你能省一点这样的pk,你能提高一点这样的pk自己,或者提高一下这个pixel的呃使用的呃使用率的话。

那么它其实最终它所有的这呃节省出来的内存,和节省出来的这个硬盘的空间存储都是比较可观的啊,那么但是你你现在比如说给定这样的分割的这样的效率下,你要去这个提高这个at least packing效率。

它本身也是一个np hard的问题啊,因为本身这个tapk的这个问题本身也是个np号的问题,那么当然了,这个地方我派出了还希望是它是低扭曲的对吧。

那么还希望它是有保证这个其他的这个知识我们之前都讲过对吧,那这个是overlap free,他还是个global类的jective,那这个是一个边界的长度要比较短。

那但是呢这些方法就是这个每一个方法之前,其实都有一些相关的工作啊,但是他没有去考虑这些p啊,那么对于这样的一个ex refinement的问题的话,就是说我原来的这个p啊。

就是刚才比如说经过我们之前的这个就是啊match cutting,mash cutting以后,做完一个参数化,那么做完一个参数化以后,你会发现它这个结果其实是长这样的,但是这样结果的话。

他的packing的效率是比较低的,就是说什么意思呢,就是这个packing它是一个比较简单的ping,但这个packing效率就比较低,那么所以说呢我们希望去做一个重新的react。

或者说重新去做一个at test refinement,让他的这个packing的效率变得比较高,当然我可能会引入一些额外的歌颂啊,所以我们现在的问题是什么啊,注意啊。

现在的问题是你现在已经有了一个itx,或者说你现在已经有了一个参数化,然后呢我需要把这个参数化去做一个ping,或者说对这个参数化重新去引入一些歌分,重新去react一下。

使得它最后的这个pk的效率比较高啊,就是大概要做这样一个事情,就是要从这个左边到右边这样一个事情啊,这个参数化也可以是存在非存在交存在,这种就是相互的of overlap的这种参数化啊。

那么这个是之前的有一个文章是18年的一篇新冠piper,他其实做的是一个叫做呃box cutter的一个方法,他这个方法的思想其实是比较简单的,就是我刚才输入是这样的一块,这样的一个输入是这样。

你看你看啊,他可以看到它的过程啊,它是输入是这样的一个长矩形,那么现在你要去做这个所谓的packing,效率的提高,其实就是要把这里面的一些空白的区域给填掉对吧。

所以说他就是做了这样的一个叫做box cutter,它其实做的是这样的一个cut,然后cut完以后呢,他把这个切下来的这一块给它重新填到这个原来的这里面去,那么也就是说他其实是它其。

实是什么这个安全视频能更多了,它其实是把这一块的面积给省掉了对吧,这块空白的面积给省掉了,并且把这一块他又填到了这里面,那么也就是把原来的一块空白的地方又给填上了。

那么这样的话这一块的这个pk的效率提高了这一块的空白的区域,删除人民整体的这个pc的效率也是提高,当然可想而知,这个算法它的出发点虽然是比较简单的,但它的实现起来其实是相对比较困难的,原因在什么地方呢。

就是你需要每次去检查这一条,这一条cut它是怎么去生成的,然后使得这,一块能够提高,然后并且接切下来,你你切下来的这一块怎么能够填到原有的这个参数化里面去,使得这个pon的效率提高对吧。

那这里面其实是一个非常复杂或者非常试错的一个方法,对然后呢并且他这样做,他其实是没有去保证最后的这个pk的效率一定是能多高的啊,那么所以说呢接下来就来介绍一下,花这个十分钟的时间来介绍一下啊。

或者会花个两分钟的时间来介绍一下,我们之前在19年的一篇c挂b本,那么我们发现确实是你比如说现在左边我给你的这个参数化,如果都是这样的一个irregulate ships,或者这样的一个多边形的话。

你要去做high packing的问题,你要提高它的packing效率的话是比较困难的,但是呢你如果你是一些长方形,就是你整个的这个参数化已经分成了一些,已经是就是你你可以就是一些长方形的款。

那么你其实是很容易去做到这样的一个pc的一个效率,高效率的话,那么所以说呢我们就是也是用了这样的一个思想,我们可以把这个原始网格去给它去分成这样的一些呃,高高的一些这样的一个packing项。

就是我去我可以去把原始网格去切成这样的一些呃呃矩形,然后去给他去做一个这样的,所以说接下来这个问题就是你现在既然知道这样的长方形,它其实是可以获得这样的一个很容易获得一个高的一个packing的效率。

那么接下来就是说但是我现在给你的这个三角形给你这个参数化,它其实不是这样的一个矩形对吧,这就意味着你需要把这个输入的,但是你需要去把这个输入的这个网格变成这样的一个呃,轴对齐的这样的结构。

那么我们再来看一下啊,这是一个access line的结构,这是一个轴对齐的结构啊,你不用管这个是什么东西,这是一个就是一个平面的2d的多边形,这个2d的多边形的边界它都是跟这个x轴和y轴是平行的啊。

那么这样的话这种结构叫做axis aligned的结构,那么对于这样的结构的话,其实我可以很容易去做这样的一个长方形的这样的分割啊,这个方法这个分割是基于这样的一个motorcycle的这样一个分割。

分割完以后呢,其实我可以把它切成一系列的这样的一个矩形,然后呢我其实可以去做一个很高很高效的这样的一个packing的效率,但是对于我们一般的这样的输入参数化,其实它的整个形状不,是长这样的对吧。

不是长这样轴对齐的结构,那么所以说我们现在就要去把这个输入的形状,变成这样的一个轴对齐的结构,那么所以说呢对于一个一般情况下的case的话,其实我们的输入的形状是这样的,就是乱七八糟的。

还有这样的一个交替,这样的一个重叠的情况,然后并且这个边界它也是这样刺刺刺的,那么这个时候呢我就需要去做对他去做一个at ax is aligned information。

然后就给大家做一个galax information,然后把它变成轴对齐的结构,然后变成折叠式的结构,我就可以给他去做一个矩形的这样的,一个分割,然后再去做一个高效率的高效率的pk对吧。

那么但是呢它会引入一些扭曲比较高的,因为你相当于对这个输入的形状去做一个很很明显的变形,对不对,那么但是呢你说但是你可以去比如说得到这个结构以后。

我其实可以用从上节课我们讲过的这个sky ful的这个best method的对吧,它其实是可以又可以保证没有翻转,又可以保证没有边界自交,并且可以去降扭曲,那么这样的话我可以去把这个扭曲给降下来啊。

那么所以说呢整个那么整个的这个papi大家来看一下啊,首先是输入,是这样一个参数化,那么首先我给他去做一个ex ninformation,把它变成一个这样的一个轴对齐的一个轴对齐的这样一个结构。

那么有了这个轴对齐的结构以后呢,我去给大家去做一个啊矩形的这样的一个分割分,from the composition,然后并且把这个矩形给pack在这样的一个长方形里面。

或者说pc到这样的一个长方形里面,然后最后呢我再去做一个distortion的这个reduction,就是用其实就是把之前的那个啊careful那个best method重新跑一下。

那么这样的话我最后的这个扭曲月轮降下来,然后呢并且这个整体这个有需要能站起,来并且整整体的这个呃pc的效率又比较高,然后并且这个,这个所以说整个的拍出来也比较简单啊,就是基于这样一个思想。

就是说这个长方形的这个快,它其实是很容易去做一个pc啊,就是长方形的快,它的pc效率会比较高,那他会呢就是它会多多加两步,就是你需要把这个输入的这个参数化变成这样的一个轴对齐的结构。

然后并且去给他去做一个切割,然后再并且去做一个distortional reduction,因为你千个万你在这个变形过程中,在这个变形过程中,你会把扭曲给提高。

所以你在最后一步你需要去做一个扭曲的降低啊,嗯关于这个aas的这个部分内容,我们就讲到这里啊,at as首先它是嗯就讲到这里,我们后面就不介绍了,我们接下来呃休息五分钟。

然后进入这个第二个参数化的应用是啊艺术设计啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

好我们接下来回来啊,我们继续开始我们的这个下下半场的内容,那么接下来我们那介绍的这个应用是这个艺术设计啊,那因为这个艺术设计的话,它会针对某一类的这样的艺术设计去做一些工作。

那么所以接下来介绍的工作就没有一些普遍性啊,主要是一些很呃具体的一些案例啊,主要是我们组自己的一些工作啊,就是这个参数化应用艺术设计。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么接下来我们首先要介绍的第一个艺术是这个,我们中文把它叫做这个橘皮成型艺术啊,大家我们先来看一下具体是个什么样的一个形式,那么这是一个视频,它播放的是其实是一个呃artist啊。

他在这样的一个橘子皮上去画一些这样用小刀去画一些这样的歌缝,那么画完这个割缝以后呢,它可以把这个橘子皮啊完整的展开,它用的是整个橘子皮完整的展开啊,这个橘子皮没有被浪费掉。

它就会变成一批这样的很很很惟惟妙惟肖的这样的一匹小马啊,啊就是大概就是这样的一个呃艺术形式啊,那么这个艺术形式呢它其实是一个非常的一个popular的艺术形式,它其实是受受到了很多的这个小朋友。

还有一些这样的的喜欢啊,其实我们还有人专门对他这种艺术形式出了一本书啊,出了一些书啊,其实是非常非常popular的啊,当然这个是在日本非常抱怨,在国内好像没有那么危险,那么这里是一些更多的一些例子啊。

其实可以看到它可以变成各种的动物啊,那么但是这个过程呢其实你要在这个区,在这个橘子皮上,你要去画这样的一些歌缝的话,它其实是呃你需要去做试试错法,就说你割出来的这个东西。

其实最后展出来展暂停到这个2d上的话,他不一定是一个合理的,或者说不一定是一个呃有意义的这样动画,它需要去不停的试错啊,那么这样的过程是非常复杂,非常的耗时,并且非常的说实话挺浪费东西的啊。

这个橘子皮其实挺浪费的,这么多橘子你都没吃,就没办法在中国这个环境上来讲,这个属于这个典型的浪费粮食股,那么我们再来从这个计算的角度,或者我们从这个算法的角度来看一下这个真正的这个橘皮艺术。

或者说这个橘皮成型的艺术,它到底在做什么,它其实是你给你了一个,比如说这样一个形状对吧,那我想把这个橘子皮变成左边这样的一个形状,就是我希望这个橘子皮,最后哥哥给他在上面去添加这样一些灰黑色的线。

然后最后呢把它切分成右边这样的一个形状,其实本质上相当于是你在这个,你其实相当于是你在这个橘子皮上去寻找这样的一些黑色的歌缝,那么其实这黑色的歌赋不一样的话。

你会发现最后这边得到的这些图案其实是不一样的,那你不同的黑色勾缝得到的这些图案其实是不一样的,那这个形状其实也不是你想要的,所以你需要在这个上面去做一些更多的这样一些图案。

使他最后这个形状跟这个形状是非常接近的,所以本质上其实是相当于是在这个橘子上去找这样的一些黑色的,这样的一些歌颂,学生会又回到了跟我们上节课讲这个atx的时候。

那个mesh cutting就联系起来对吧,那么match cutting的话,其实本其实就是在网格上去找一些歌颂,值得到最后的这个参数化的扭曲比较低,那么对于现在这个问题的话,其实相当于是什么。

就是你在这个直接p上去找一些歌颂,然后把它展平到这个2d平面上的时候,得到了这个参数化的扭曲是比较低的对吧,呃呃得到这个参数化的扭曲是比较低的,那么呃不是得到这个形状跟这个输入形状是接近的话。

所以说我们这个地方它其实是要去寻找的,是在这个橘子皮上去寻找这样的黑色割缝,然后把它切开以后去做一个参数化,得到一个2d的p2 d的形状,这个2d形状跟这个输入形状之间是比较接近的啊。

那么接下来的工作他是你就相当于是需要去做做一个cut的generation对吧,就是其实就是我们上节课讲的这个mesh cutting的这样的一个工作,那么match cut这样的一个工作的话。

就是呃你需要去做呃,就让我们上节课讲了对吧,他会问,首先看图形学里主要考虑的是两个问题,一个世界的扭曲要低,第二个是这个cut的长度要比较短,那么但是这两个东西其实都是没有考虑什么。

没有考虑这个你对参数化的形状要跟输入形状比较接近,这样的一个问题,那么所以说呢我们接下来就要去啊,相信我们这个问题其实是一个新的问题对吧,就相当于是你要学在橘子这个形状上去找一些歌缝。

把它参数化到2d平面上以后,这个跟2d这个形状跟输入那个形状要比较接近,这个问题其实本身是一个新的问题,那你要去真正去求解这个问题的话,也是比较困难的,困难在什么地方呢。

首先你你的这样的一个生成了这个你比如说你随便给一个cut,那么你去参数化出来一个2d的形状,那这个2d形状可能是跟你输入形状,就这个difference啊,你要去。

因为你本身是要去minimus他们之间的difference,但是你要去minimize两个形状和difference,这个事情其实是相对的比较困难的,而且这个歌颂他在这个三大,在这个橘子皮上。

它其实你可以认为是一个呃类似带一点重组和优化的感觉嘛对吧,所以这个过程是比较其实比较复杂的,那么所以说呢呃这个问题又比较困难,第二是你这个输入的这个形状对吧,你其实是你希望这个绝对比找它这个形状。

是找是找这个是接近你输入那个形状,但是很有可能是你输入那个形状,用这种橘子皮其实是没法去展成,所以你这个输入的形状可能是不适合于这个当前使用这个橘子皮展开。

这个时候你其实是需要去对这个输入行动去做一些修改,那么所以说呢这个其实本身这个你要去做这样的一个问题啊,就是你要去做这样的,你要去做这样一个问题,你要在这个cut上对吧,去生成一个问题。

然后去跟他去做一个比较,这个问题是比较困难的,那么所以说呢我们就希望去做一个简单的方法,就是说这个往这个过程你要去生成一个cut,使得它这个猜中画出来的形状跟这个形状逐步的接近。

他这个方这个方向其实是很难的,因为你升2d参数化出来的形状要跟他去对比,然后再要去回来,那这个过程其实是非常复杂的一个过程,然后接下来,但是呢从算法层面上讲。

其实你可以把这个橘子皮映射为这个映射回这个橘子上,就是你可以把你输入的这个形状映射回到你的这个c2 d的新社会,到这个橘子上,如果这个映射回去能够把整个橘子,全部给cup住。

那么这样的话它的这个最后的这个边界,这个构成的这个边界其实就是这个橘子比上的割空对吧,那这样的话整个这个这个问题就变得简单了,你可以直接去把这个形状尝试的映射到这个橘子皮上,那它就是你最后要的那个对吧。

所以说这个方向这个方法是比较这个方法,这个方向是比较简单的,那么直接下来的问题,我们其实就是要在这个就是要把这个输入的形状,映射到这样的一个呃橘子上,那么我们这个地方是首先是你这个映射对吧。

你要把这个橘子这个把这个输入的形状映射为这个2d的虚设,回这个橘子皮上,那你当然希望这个地方的扭曲是比较低的对吧,不可能让它的扭曲比较高,那第二呢是你希望这一块。

那这个时候也就是说你其实希望这些露露出来的这一块这个橘色的,皮它的这样的面积是趋向于零的对吧,所以我们现在有两个目的,一个是要让这个映射就是这个马,比如这匹马映射回这个原始的这个啊橘子皮上的时候。

它的扭曲是非常低的,那第二呢是这一块留下来的这些呃橘色的区域就这一块,剩下的区域是啊面积要趋向于零,就这一块的面积要趋向于零对吧,那这一块是这个有其表的地,那不为了去求解这样的问题的话。

那其实我们把这个问题就可以变成这样的一个mini marz的问题,第一个问题是这个输入形状和这个映射后的这个形状,它们之间的扭曲要比较低,第二是这一块的面积要趋向于零对吧,那么对于这样的话。

我们这个扭曲要比较低,我们这地方就直接使用了之前介绍的这个a r a p的这个dio啊,这就是假货币跟一个旋转矩阵的这样啊,对于这样的我需要去把这块橘色的面积慢慢慢慢的优化变成零。

我们这地方做了一个叫做呃啊one rank rank一的这样的一个能量啊,其实就是一个角和b矩阵减去这样的一个啊,b b是一个rank唯一的这样的一个矩阵,那么这样的话呃。

这个假货币矩阵指的是这个黄色三角形里面的,黄色区域里面的一个三角形啊,这是我们要让这个黄色三角形里面,这个黄色三黄色区域里面的一个三角形的小号比矩阵。

它是从一个比如从一个正三角形映射到一个这个黄色的三角形里面,这样一个映,射我要让这个假货币矩阵是一个变成一个制一的矩阵,那么大家知道如果是一个质疑的矩阵的话,它的这个面它这个面积就变成零了对吧。

那么所以说呢我们就让它变成z一的面,当然你其实你要让这个面积变成零,你还有其他的选择,比如第一是你要让这个甲和b矩阵的f范数等于零,那么等于零的话,其实我们知道还要算数。

其实就是两个其一乘的平方之和对吧,如果要等于零的话,就是两个其一直都等于零,那么这样的话它其实会让这个形状收缩的比较严重,那么接下来你,可以当然你也可以去让它的面积等于零,这是你最显然的方式。

那面积等于零的话,其实就是西格玛a一乘上sigma等于,那么这样的话,其实但在这个优化过程中会产生一些症状震震荡,是不是我们很像,为什么呢,因为你sigma乘西格玛等于。

其实你可以让他的西格玛等于西格玛等于,这样会产生一些症状,震荡又发了什么,那么这样的话我们就是我们就设计了这样的一个,rank one的这样的一个能量啊,然后最后呢大家可以看一下整个优化的过程中。

你会发现这个随着这个优化的进行,它其实,这些区域就慢慢慢慢的给合上了啊,最后呢就是基本上就是完全的这个和尚,大家可以看一下,就在这再看一下这个视频,他这个随着这样的一个优化的过程。

它其实是让他的这样的一个呃,这个啊这个橘色这个区域慢慢慢慢的收缩到零,那这样的话你可以翻到这个形状,但是呢其实你啊刚才那个情况是比较好的一个情况,那么但是你其实在整个的这个给我们的这个例子里面。

其实有可能这个形状是没有完全把呃,我们就需要去做一些这样的用户交互,那么所以说我们整个的这个这个橘皮成型的技术呢,一部分是这个应试的过程,还有一部分是这个交互的过程,交互的过程我等会儿再讲。

那么交互的过程完以后,直到能够把这个截止p全基本上全部覆盖,全部覆盖完以后呢,我再去生成最终的这个cut,那只要其实只要把这些线给搞一搞,就生成最终的cut,有了最终的cut就把它解开。

就会跟我们的形状比较接近啊,那这个地方呢给ta design,就是说我这个mapping过来对吧,我就把它映射过来,那这个地方发现不能覆盖,不能覆盖的话。

就是这一块区域我需要在这个原始的形状上再去做一些交互,使它变得一个比较有意义的形状,并且能把这块区域给覆盖住了,那么这个是怎么做呢,就是通过一个交互式的作用,那么为了去做这样一个交互式。

首先是我们要去确定是交互的这个地方对吧,交互的地方的话,其实我们就是把这块区域这些在彩色的区域呢,我去把参数化到这个2d上,看看他是跟谁相连的,其实我可以在这个地方,我在可以去画一些形状。

然后跟他去做一个交互,那这地方交互呢我们做了几个方式,首先是做一个,比如这一块区域,它整个都没有做,那么我其实其实可以去做一个形状的加强,我这地方画一个码头是吧,那么还可以去做一些这个删除对吧。

这些地方我们不稀一样的,然后还可以做一些角度,因为什么呢,因为他在2d屏幕上,它的这个角度都是接近于这个呃,你可以想象我们那个橘子皮剪开它那个地方的高速距离。

其实就是接近于22半减去那个半径分之半径的平方分之一,那么其实它的这个高曲率都是一个比较接近于二派,但是你这个原2d的这个形状它离二派比较远,但这个地方所以你需要做一个角度的增强。

然后你还需要做一个曲率的增强,因为你这个橘子皮它本身是个球,本身球的话你随便签约到的话,它其实参数化到2d上,它可能不一定能够得到一个低扭曲,那么这样的话你橘子皮在参数化高的情况下。

他的橘子皮可能会拱起来啊,当然了,还会有一些这样的预处理,比如说我觉得这个机关头的重要性比较高,那么我先把它圈住,那么这一块在这个后面的过程中变形比较会变形量比较大,那还有这一块区域。

我希望他最后是能够在皮上是同一块地方展开的,那么首先需要在一开始的时候先把它给合起来了,那最后呢我就可以去把这个边界去做一个简化,然后最后得到最后歌颂了,但实际的制造过程中呢。

我们会把这个图纸生成的歌缝,从这个上面上,那个从两个两个,你可以从这个给我们在这个橘子皮上画上这样的经纬线啊,这个线这个线呃,这个线是纬线,这个线是经线二上经纬线。

然后呢这个是这个你可以看看成是从北极上看的,这个是从这个南极上看的,然后是把这个把这个经纬线给展开以后的这个割缝,那最后呢你只要在这个橘子皮上,按照这个经纬线的这个按照这个经纬线的这个做参考坐标系参考。

然后你去把这些把红色的线去画到这个橘子皮上,那你这样的话你就可以最后得到我想要的,最终的这个把这个歌缝去画到这个平面上去,这样的话你可以这个红色的线就是我们这地方的经纬线。

然后这个黑色的线就是这个里面这些线,你可以把它画上去,最后一句话就可以长成这样一个兔小兔子啊,这里面具体展示了一个这样的过程,首先是我们在这个上面,我所以把这些经纬线给画出来,纤维性画出来以后呢。

我就可以根据这个图纸,我就可以在上面去画这样的一个这个黑色的线cut啊,把它画上去以后呢,我就可以把这些cut给剪开就行了,这样的话就会得到我们想要的这样一个小马的形状啊。

啊真的是这些由这个artist,这是一个日本人artist做的这样的一个形状,那么我们其实可以在这个实验室里就把它给复现出来啊,这次也是就是他们他之前做的,还有就是我们自己做的对吧。

那么这个是一个就是我们后来让一些,就是我们实验室的一些这个同学们来去做这个事情,然后最后得到的这个形状也是啊,基本上是能把它做出来的,这个后面我们在这个我们后面。

在这个就是我们学校的这个科技活动周的时候,当时还没有疫情,当时还没有疫情的时候呢,我们这个就是怎么说呢,就是把在这给您磕碰的时候,它其实是可以把它画出来。

所以当时那个活动我们这个我们当时是在一个小教室里面,这个非常受欢迎啊,就是小朋友都喜欢来割一割,因为他是是一个体验性的,他知道这个背后我们跟他会去介绍一下这个背后的这个数学,然后去跟他讲一下这些事情。

然后很多小朋友还是很乐意来这个玩一玩,因为它会涉及到什么,他会呃就是比较的这个怎么说呢,就是说就会有一些体验性嘛,那么在做科普的时候也比较的就能触动他们啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是我们当时做的一些更多的一些例子啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

啊这我们就简单过去了,这个是一个gallery,大家可以看一看,就是不同的这样的一个结果啊,大概做了有五六十个形状吧,就我们这地方基本上啊动物啊什么的都都有了,答案是比较丰富的,这个形状。

嗯好这个我们就介绍完了,接下来我们要介绍一个呃新呃,另外一个这样的一个艺术形式啊,这个叫做那个paper raft,或者说叫做一个纸模的艺术。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么先来看一个example,呃,这样的example啊,首先来看一下这个左边这个example,就这个这个例子,呃左边这样的一个例子啊,首先我们来看一下,这个是他最后成型的一个纸模。

然后但是呢他在这个2d平面上,你可以看到它其实就是这样的一些这样的2d平面上的一个指,这是指,然后这把他是把这些纸给剪开以后,把它合起来之后,就会变成这样的一个正正方方的这样一个狮子头啊,就把它剪开。

把它折起来之后就会就会贴上来,就这样,这是一条这个小鱼啊,这是一个小于的话,你可以看到它在2d平面上也是这样的一些值,然后最后把它给剪,把把这些值给剪下来,把它粘上,去就会得到这样一个题啊。

这是一个企鹅啊,但大家可以看到这些形状都是比较简单的这种啊,方块型的就是这种叫做盒子型的box形状,就像这个企鹅就更像一个box,这个鱼也是的,这个鱼的话其实大家可以看它这个轮廓还是比较简单的。

那么现在呢就是我们想做一下更加一般的,或者说做一些更加复杂的这样的一个几何系数啊,就叫做paper bo,那么对于这样的一个艺术的话。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

它其实本身因为你要用纸去折的话,它其实就是一个可展曲面对吧,那么对于一个可展曲面而言的话,它其实,是一个高斯曲率输出为零的这样一个c2 连续的这样的一个光滑曲面,那么对于这样的一个光滑曲面的话。

它有上二阶可微的,就是高斯曲率处处为零,所以说其实我们的问题呃,就是要去把这样的一个网曲面,变成这样的一系列的这样的一个可展曲面片对吧,那么每个可转曲面片我就可以用这个纸张来构造,那当然了。

可单曲面除了我们刚才讲的这一类,就是这个paper应用里面,它可单曲面本身也是一个非常具有非常广泛的应用,他在艺术设计衣服这个折纸什么等等里面都会有。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一些很多的应用,那么我们今天的主要的目的就是说一开始给你三维的形状对吧,这个形状不是那种很简单的box,这种形状可能是一般的这样的一个网格,那么我希望去给他去做一个这样的一个分片可展的局面。

因为分配可单曲面的话,因为可载本身没就是参数化的时候,就是可以参数化到2d上,它最后的这个扭曲是接近于零的啊,所以它其实跟参数化也是比较相关的啊,它是一个一开始是一个啊。

不是全局的这个global developer,那么我需要去给他做一个分片的可展的bg,相当于这个每,个颜色的每一块它其实是一个呃,你可以认为是一个可展曲面,那么可展曲面的话。

我就可以用一个纸张来去构造它啊,那么当然我希望这个做出来这个快的数目是比较少,那这样的话我最后的拼接的难度也会比较短,那么第二是这个这个这个比如这只乌龟,我要跟这只乌龟是比较接近的对吧。

所以我希望他需要这样有一个比较高的相似性,这个乌龟总不能长的都不大一样吧对吧,所以这个希望就我们这地方设置这样两个标准,一个是希望它快的数目比较少,第二是希望他的这,个相似性比较高。

那么但是呢你其实想一下,如果我要去确定这样的一些歌缝,然后使得它这个网格切成一块块的接近可展的,那这个过程本身是一个啊就是一个类似是一个组合的优化对吧,那么你其实是要去确定它的这个块的数量啊。

这个cut的这个摆放,然后还有最后你的这个整个的这个,最后这个每一块可展的这个片的形状,然后呢并且你最后还希望它是一个可展的,并且是一个这个相似的,这个过程其实是一个比较复杂的过程啊。

这其实就是你相当于要在这个曲面上做一,个分割分割出来以后啊,还是一个比较接近的这样的,跟这个原来这个形状比较接近,那么可能同学就会问了对吧,我们上节课讲的这个呃,让每一样一个每一个圆锥去逼近他。

是不是可以呢,虽然你可以用这个圆锥,但是你的圆锥里面刚才的那个度量,就是用的是那个法向跟这个圆锥轴的轴的那个朝向,然后再减去这个cosine,它其实本身它其实是一个很隐私的度量。

它其实跟最终的这个呃相似性啊等等,它其实会存在一些这样的呃,一些这样的啊不是很明确的这样的关联啊,并且他自,己怎么怎么去去优化它的这个快速啊等等,它其实都不是很明确。

那么比如说基于这样的这个分割的方法啊,这个是之前的分割的方法,那么这一类的分割方法的话,它的好处是它可以得到这样一个显示的快,但是呢他的一般情况下,他的这个误差是比较高的。

那么还有现在最近这几年发展出来的这种变形,基于变形的这个方法,那么基于这类变形方法,它会形成这样比较明显的这样的一个c curves,就是这些客服会比较明显。

但是呢对于这样的一个ition best method,它的它其实没有分块的,没有显示的这样的一个方块的结构,它只是只会生成一些这样的一些线啊,他没有去做这样的分块。

所以这个这个defaulation best method,它其实没有这样的一些结果,但是对于右边这样的分割结果,它其实会有,但是这个分割的结果你会发现这些线其实没有右边这样的一些呃。

更加的所以说呢这个两个方法,其实这个之前的这些方法,他其实其实还是没有去解决的很好,没有去把这个问题解决的很好,那么所以说呢接下来我们的问题就是要去做这样的一个事情,我们我们的想法也比较简单。

既然这两个方法没有去做的都很好,那么我们能不能去把它给这样做一个can die呢,那么我们对这样的一个key observation是这样的,如果你的这个形状是已经是变形的,是接近于是一个可展曲面了。

如果这个中间这个形状,你把从这个输入形状变形到这个形状以后,这个形状已经是一个接近的一个可下局面了,那这个形状已经是一个接近可量局面了,那它其实如果我再去给他去做一个分割,那得到了这个每一个块。

它其实都是都是接近于可展曲面的对吧,那么接近于可视频,那么也就是说其实问题就变成了什么呢,就如果是一个这样的一个快,这中间这样的一个变形后的结果,它如果是接近于核弹曲面的。

那它其实整个后面的这个呃分割就会变得比较的简单,那么所以说核心的问题是核心的,所以整个的这个拍拍呢就是变成了一个变,首先去把一个输入形状去变形到一个接近可展的局面,然后呢再去给他去做一个分割。

这个分割就会变得稍微简单一点,然后最后呢我们还需要做一个,这样的requirement实它最后的每一块是真正的真正的是接近可展的啊,这个地方只是说我你要the development。

那么我希望它是最终的可展,比如说每一个每一个点的高斯曲率就接近于零这样的一个形式啊,那么接下来按照这样的一个pp呢,我们来介绍一下每一步啊,首先是这样的一个变形的这一步,那么变形的这一步的话。

我需要去给他去做一个变形,使得它最后的生成出来的这样的快是接近于高斯,接近于这样的一个呃呃接近于可载的啊,那可以大家可以再来看一下这个视频,你可以看一下这个,比如这个是这些代表的是这个高斯曲率。

你可以看到这个随着这个变形以后,它这个高斯曲率是慢慢慢的变小的,相当于它在大概在每个地方都变成接近可展了,那么接下来我们就是要我们要介绍一下这个方这个变形是怎么做的啊,它其实是来自于这样的一个朋友。

来自于这样的一个驱动啊,首先这个可展曲面它其实是在这样的一个高斯map下,就是说你把这个可转曲面的每一个三角形,这上的法向映射到一个球上以后的话,它其实在球上它会形成一系列的线啊。

那么就意味着你需要把这样的一个高级曲面,就是你要把这个曲面映射到一个曲面上去,然后映射到一个球面上去,然后他这个把那个法向映射到球面上去,那么他的这个好像在这个球面上构成,它其实是一个现状的结构啊。

就是这个啊合成曲面的这样的一个性质,那么现在接下来的问题其实是,你就是要把这个性质用在哪个法向上对吧,那么最常见的用法其实你就是用在这个三角形的这个面上,但是你这个三角形的面上其实不一定是好的啊。

就是你其实比较简单,就是之前有并非不就直接做了,那么到时我们就想了,你现在用用到这个三角形面上不行,那么其实我们去给它定义了一个叫做age normal的形式。

我我就是只要让这个age normal它是在这个映射到这个呃,映射映射到用gosmap映射到球上以后,把法线映射到球上以后,他在这个球上它是形成一条线的结构。

那么所以说这个地方呢我们就希望比如说对于这样的一个边,它可以走到它的四个邻边,那我希望他这个四五个法向它是在一条线上的,那这个时候他其实对应的这个约束就是要让要让这个要上,比如说i j就是这个。

就是这个五个法向里面,其实你可以找这个找出来它的三个不同的对吧,那应该是c,比如这个这个这个这个这个这个这个,然后这个这个这个这个这个你可以把这个四个塔下,你让这四个靶向就是一个是这个对吧。

你要说这个接近于零,然后接下来是这个的法向的,他在这个平面上,它在那个上面要形成一条线,要形成一条线,其实就是那样在那个地方产生退换,那产生退换其实就是要让他的这个行列式等于零的啊。

所以说其实我就是要让这个行列式等于零就行了,那么所以说这个退化,如果是上面这些行列式的条件都满足的情况下,那这个高斯map就退化成了一条线啊,那么所以说接下来我们的目的就要去优化这个线的这个扭曲啊。

那么当然了,这样的条件,就我刚才讲的这个这个方法,就是直接是定义在这个三角形的这个法向上,三角形的这个面的法向上的,然后我会发现我们的这个条件呢是比他们这个条件更弱的。

然后并且在有一些很特殊的case下,我们这个呃这个定义它的这个可转性就是直接就是完美的啊,比如说像这个例子啊,这个这两个例子这个地方用我们的定义,它定义出来的这个可弹性的能量就是等于零啊。

那么真正要去做这个变形的话,我们会有三项能量,第一项能量是这个可感性,就其实就是要让上面那四个行列是慢慢变成零,第二项是我们变形后的这个形状一样,跟这个输入形状之间的这个距离是比较低的。

那最后还是希望我们这个变形以后产生的这个distortion是比较小的,这三项一项是可转性,一向是近似性,还有一项是变形的这个形状啊,当然这个优化是比较复杂的,然后最后呢我们会听说过引入一些辅助变量啊。

那么比如说这个地方对于这个可选性能量,其实我们就是要让这些行列式行列式接近于零对吧,那么行列式接近于零,其实就是用我们之前那个橘子皮那个gp成型,那个里面的那个rank one的能量啊。

所以这个地方我们用的其实就是一个rank one的能量,所以说我们这个地方其实是rank to,因为它是个3x3的啊,这个地方是一个rank to。

其实就是要把这个投影投影到一个rank two的magic space,然后投影的话就是这个比较简单,就是你这个是优化后的点,然后这个是在原始网格上的地方,我们只要把这两个点之间的距离给连起来。

然后对最后这个地方是我们希望它的distortion是比较低的啊,这distortion比较低的话,我们这边用的一些呃,就因为我们本身的优化都是在反向上的。

所以我们这地方把这个distortion的度量引引入到了这个反向上来,这个世界我们就不这样了,然后最后呢其实这个迭代因为它的变量里面加入了很多的辅助变量,这个迭代是非常非常复杂的。

所以我们用了一个交替迭代,就类似于之前的那个local global这样迭代啊,就是每个变量每个变量在固定其他变量的情况下优化一部分变量啊,这样的高级阶段其实就是一个block的脑力链的高级三角迭代啊。

接下来去做分割,他们有了这样的一个变形的结果以后,我们要去给他去做一个分割,那么这个分割的话我们会做一个非常呃分割,就是给他做一个over sentation啊,他的快速会比较多。

那么再去呢我们再去把它去做一个papatch的合并啊,最后那所以整个过程就是一个close to find的过程,大家可以看一下啊,这是一个出风格,啊出风歌的话就随着这个,比如现在我在这个地方找一条。

就是用这个下面这个方法找一条这个歌缝,把它切成两块,然后再去做呢,就这样每次去做,然后最后做出了非常非常粗的分割,在这个分割大概有这样一个100几块的分割啊,做完这么多分割以后呢。

然后我们再去给他做一个合并,合并的话会基于一些准则啊,然后再去把这个合并合并完,最后只剩下这个26块,然后做完这个合并以后呢,我们接下来就要去做一个refinement对吧。

因为我们这个地方的高速曲率还不完全等于零,所以我们要去给他去做一个优化,他这个优化的话,它会有这样的几个条件啊,这个条件是这个可感性,光滑性和这个。

所以我们就把对每一个片他的那个高速曲率优化到基本上都是等于零,这条边界线比较光滑,这个内部也比较光滑,最后的话就会得到我们最终的这样的一个结果了啊,这是我们的当时做出来的一些结果啊。

啊这是跟这个18年的文章和21年的文章比较,他们其实没有,这个是上面他们的变形的结果啊,这是我们变,形的结果,然后呢基于都是同时基于我们的分割方法去做的这个分割,那么他们这是他们的分割出来的结果。

就是我们分割出来的这个结果啊,这个是跟20年的文章,它是直接生成分割的,那最后发现我们的快速更少,我们的这个呃我们的快速更少,我们的这个bh我们的hosh距离更小了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

啊这个是我们给大家展示了一下这个纸模的制造过程,这个指标这个首先是我们把这些参数化全部打印到一个图纸上,然后呢去把每一块给呃呃拆出来,然后呢把每一块根据这个连接关系把它给这样的拼起来,那么拼起来以后呢。

就是把这个相邻的,因为我知道它是哪两块相邻的,把这个最后把这个拼起来,就会得到一个比这是一个bug这样的一个形状,后面还有一些更多的这样的例子展示啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

就是一些更多的例子的一些展示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GAMES301-曲面参数化 - P7:Lecture 07 参数化应用2-网格生成 - GAMES-Webinar - BV18T411P7hT

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

好那个时间到了啊,我们就开始上课啊,十点钟那个今天我们要讲的是一个基于参数化的一个应用啊,就是这个网格生成。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么首先来看一下什么是这个网格生成,或者我们来简单的了解一下这个事情啊,那么网格生成的话,从这句话的来,这句话的意思来是讲,就是说用一些多边形或者多面体,然后呢通过一些边点把它连起来。

然后呢它的目的是用来干嘛的,是用来近似一个,呃去用来近似一个数字的一个模型的几何对吧,那比如说下面这个例子,比如这个黄色的是一架飞机,那它可能是由这个c a d的,是一个c a d的模型,它是由这样的。

就是呃呃设计公司或者说这种cad的软件,就是他们用这种软件设计出来的一个模型,然后呢你把它去做一个呃四边形化,就是表面去做了一个这样的一个四边四边形化是吧,那这样的话你就生成了一个四边形。

表面去近似这样的一个飞机的模型,那么也就是说它在这个表面的每一个元素都是一个四边形,然后呢他真正的在这个有限元的模拟里面,它其实还需要对这个飞机外外面的这个空气啊或者流体啊,去做进一步的仿真。

这时候他需要去给他去做一个外面的这些空气里面的这个网格化,那比如说这个最最外面这一层是一个四面体,那这个表面这一层网格是一个表面,这一层网格是一个呃边界层网格对吧,但不管怎么样。

它这个整个网格化的过程就是去生成一些多边形或者一些多面体,然后呢通过一些呃我们之前讲的这些边啊,点上去把它给连起来,那么连起来呢连起来以后呢,它最后其实是近似的,是一个这样的一个数字模型啊。

那么这样的话有了这样的一个呃多边形网格,或者说这样一个多面体网格以后呢,它其实可以应用到后续的这个应用里面去,那比如说最典型的就是这样的一个有限元分析,或者说这个就像流体力学啊等等。

这样的还可以做这种物理的仿真,那得到一些物理量,然后进而去判断你这个一开始设计的这个形状合不合理,或者说以它的一些性能达不达到要求对吧,当然这个过程就说这是一个网格化的过程,那么多说一下这个。

比如说在刚才讲到的这个,呃刚才讲到了这个c a d对吧,你现在有一个c a d的模型,然后呢你接下来你可能要去做c a e就是有些人的分析,然后呢你这个地方会有一个cad模型。

比如现在最常见的还是用这种ns曲面片,或者用一些这种嗯,这一种就是各种这种基本的原去表示一个cad模型,但是片与片之间它其实是一个呃离分散的过程,然后呢你需要去给为了去做c a e,为了去做cae。

那这时候呢或者为了去做有限元,你这时候需要去把这个c a d模型去做一个这样的一个网格化,这样一个过程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么这个过程呢其实是相对而言是比较费时费劲的,就是说其实这个网格化过程显然就是很重要,但是呢你给一个cad模型在做这个cad的时候,它其实是比较的缓慢的。

所以这个时候呢你需要去进一步的去提升它的这个效率,提升它的这个呃鲁棒性,那么所以说现在这个网格从这个网格化这个角度来讲,首先它是一个连接c a d和c a e之间的一个桥梁,呃,当然了。

现在呃最近比较热的一个研究的题目,就是这个所谓的c a d c一体化的这个这样的一个问题对吧,希望啊cad和cae放在统一的这样的一个模型或者数据的这样的一个,表示的情况下去做设计和分析。

那么从而不需要去做这个网格化呃,但是呢这个现从现在的这个发展来讲,现在还没有一种方法能够完全去把这两个东西给放在一起去啊,比如说现在这个很热的,有一些啊,具体内这些我就不讲了。

就比如现在有一些很热的这个方法,其实还是啊还有很大的发展空间,或者说他可能从根本上也没有解决一些嗯,就是这些问题啊,那么反正不管怎么样,所以说要去把这个cad和这个cae去给它联系起来。

那么最常用的或者说最古老的方式就是去把cad模型做成网格化,他们去做c a e,做完ca以后,你会得到一些物理的分析,那么有了这些物体的物理的分析以后,其实你应该反过来再去修改这个cad模型对吧。

那么这个时候呢你其实这个过程也是比较的嗯,呃这个这个过程也是比较的繁琐的啊,那这个时候很多时候呢其实现在也是只能通过人去做,那么现在最近这2年呢,他们发展出来就是去通过这样的啊神经网络。

或者说这样的可微的这样的一个技术,去把这个呃c a e的这个结果再反过来去去deform这个c a d对吧,或者说基于这种可微的基础,那么现在或者说ai的这种技术去做这个事情,现在也是一个研究的趋势啊。

好啊这就拆开说了一下啊,那么接下来就是呃我们在图形学里面经常常见的这个东西呢,我们是一般叫一般是这样的一个remage的一个过程啊,啊跟这个前面的这个,motion的过程稍微有一点点区别啊。

reversion是指这样的,首先呢你有一个输入的一个三维模型啊,比如说是这个是一个输入,然后呢你要去计算另外一个模型,computer another match。

你比如说这是你的another mesh,就是就是输入,这是out,这是out,就是input,这是out put,然后呢你的这个输出的这个模型,它的element就是它的每一个三角形。

比如说每一个四面体,每一个334边形,每一个他的element要是满足一些质量的准则的,然后呢近似这个对这个输入曲面的这个近似是比较的好的啊,那么所以说呢现在given a three d呃。

呃three d mesh,computer another mesh,whose elements satisfies,some quality requirements。

who who while approximation of the input e accel,那么这是一个remax的一个从宏观上的一个定义啊,就是它的定义就是说输入我有一个三角形网格。

这个三角形网格质量可能很差,所以它的质量满满足不了啊,就是满足不了这个某一些质量的这个呃要求,那么所以说这时候你需要去计算另外一个呃,你需要去计算另外一个网格。

那这个网格它是能够满足这样的一些质量的要求的,然后呢并且这两个之间的这个距离啊,就是他要近似他是比较好的,就说能在可进行的范围内,比如说他们之间的hotop距离是呃是control的。

或者他们的hotop距离是比较小,或者他hop就是有界等等这样的一些约束,他们说这个reaction呢它最常见的,比如说你这你这个模型怎么来的,最常见的模型就是这个模型就是来自于这种扫描的模型。

现在的三维扫描里,他们其实少的都是等于等于重建重建8。1重练成网格,一般都是用ming cube marching cube的话,一般出来的网格质量还是,当然有些时候也做的还可以,但有的质量还是比较差。

就是说他在这个模型cube出来很密的网格以后,他做了一把简化对吧,简化完以后呢,它这个网格它其实就是当时他可能没有考虑质量,那这时候说出来的结果就可能比较的啊糟糕。

那这个时候呢你可能需要去进一步的去做一个reaction,让这个网格的质量提升,那这样的话可以用于后面的这个嗯去进一步的去做这个分析,那还有这个输入这个网格质量比较差的。

还有还有可能是来自于这种cad的模型,这种cad的模型它的输入就是一开始的时候它可能是质量呃,就是你一开始是一片片的note曲面片,然后你可能给他做三角画的时候,可能或者说你给他做spa spa情况。

或者说做做其他的这个网格化的时候,你可能确实它的质量没有做的很好,那这个时候呢你在呃或者说你在这个cad网格化的过程中,其实第一步可能是生成一个粗糙的一个cad的三角化的模型,然后再去做一把优化。

然后让它的这个网络质量提升对吧,那这样的话,所以说呢这个remaster呢,它其实相当于是你可以认为是对这样一个输入的一个三角形模型,或者对输入的一个网格模型,不一定三角形啊,输入的网格模式。

你去做进一步的这个质量的提升啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那这种方法这种叫做remaster啊,那么这个就是输出的这个网格的这个呃输出的这个网格,它的呃就是网格的这个类型的话,一般情况下会分为如下的四种吧,首先第一个是这个三角形网格是吧。

那么它只是一个表面网格,每个每个元素都是一个三角形,那么还有一个也是一个表面网格,但是他的每个表面都是一个四边形,然后还有一个是体网格,就是它不光是有表面,它还有内部。

那这时候他的每一个体都是一个四面体网格,四面体,那么还有一个是六面体,它是整个是一个体网格,但是它每一个单元都是一个六面体啊,这是一个六面体,一个四面体,一个四边形,一个三角形,三角形网格。

三角形网格和四边形网格是表面形网格,四面体和六面体网格是一个呃体网格,这里这四种网格也是在这个有限元分析,或者说在这个图形学的应用里面使用的最广泛的。

那么使用的最广泛的应该是这个三角形网格和这个四边形网格,三角形网格和这个四面形网格,那么啊特别是现在这种传统意义上呃,这两个网格用的很常用啊,但是这个这个网格三角四面体四边形网格其实用的也比较广泛。

因为什么,因为它这个比如说在这个比如在这个动画,或者说这种就是游戏里面,它的有时候因为这个四边形,它这些呃边的走向其实可以跟这个一些呃特征的走向,是保持一致的,那这样的话他在做一些这种动作的时候。

他就能够把这个人的比如说他就可以把一些呃动作,他的捕获会比较好,所以他们经常使用的也是一个呃思维性网,在特别是在动画里面呃,六面体和这个四面体网格在这个有限元里面,其实也是相对数比较比较受欢迎的对吧。

那这个因为它可以在上面构造这个高精度的机,然后再去做这样的,有些人的分析可能会呃精度会更高一点,但是呢说实话这个事情不是那么的绝对,就是说现在特别是现在这个时候,其实有时候他有。

一些呃四面体或者说一些三角形,你也可以在上面构造一些高高低啊,就是高阶的机啊,你当然你也可以把这个几何变成高阶的几何,比如说变成一个后面我们会讲讲和所谓的高阶的网格。

那这个时候你去做这个有些人分析的时候,其实每个提速上或者每个呃每个这个三角形上或者每个四面体上,其实你的这个有限的精度也能够提升啊,首先这个里面其实很混乱。

就是说这个你到底比如说一个应用具体什么使用什么网格是最好的,天下的那肯定是有应用来驱动的,就是你的这个应用决定了你要使用什么网格对吧,那么你这个比如你这个应用下,你觉得就是他们觉得给这种网格是最合适的。

那你可能就要去生成这样的网格,但是有一些应用里面可能可能两个网格,两种网格之间其实会存在一种battle,或者说他们会直接一些竞争,所以你不能说哪一种网格一定会比另外一种网格好。

那这个时候可能就是你要在有一些质量下,或者有一些计算的代价下面去做一个取舍,就大概是这样一个意思,特别是比如在有限,原理你肯定是为了为他的物理仿真去服务的,只有你不管你生成什么网格,最后只有评判标准。

应该就只有一种,就是说你的物理仿真的结果比较准确对吧,那怎么去看待这个事情呢,这个情就需要有很有经验的人去做这个事,或者说你要用一些能够去自动的去判断这个事的人,判断事情的这种机制是吧。

那你这个时候呢你可能就是这时候需要去,你不管你生成的四面体网格也好,高级网格也好,或者说是四面体网格也好等等等,那么六面体网格也好,等,等最终你这个结果或者说你最终这个东西这个网格好还是不好。

其实就是完全由这个物理仿真最终的这个准确性来来决定好,那么对于这样的,刚才我们说了,他其实是个网格化也好,或者说这个重新网格化也好,最后其实我希望这个质量是有一定的保证的对吧,就说说这个质量的话啊。

显然是刚才我已经提过了,就是different application,就是不同的这个啊应用,或者说不同的这个,他其实对这个质量的需求和这个啊质量的定义其实是不一样的啊,那么通常的这个质量的话。

比如说这个三角形的正则性,可以说四边形的正则性,四面体的正则性,那比如说是不是三角形更接近于正三角形是最好的,四边四边形,正方形是最好的等等对吧,然后还有sns上的,有些地方它的这个四三角形要大一点。

有些地方的三角形要小一点吧,有些地方四面体要大一点等等,这个s还有这个orientation对吧,那比如说我现在这个地方,它的这个网格是具有一定的朝向信息对吧,那比如说这个四边形网格,那比如说。

这个四边形网格,这是一条feature,那当然我希望这个四边形网格就是这样构造的对吧,那这样的话我其实就是这个这条fish就能够保证出来,那么这个四边形的走向,orientation。

它的朝向就是要这样走对吧,那比如说alignment,就是比如说在这个地方的alignment,对这一条你要跟它对齐,然后还有就是这个呃网格的这个单元,这个三角形的形状啊,是不是什么时候是最优的。

当然可能最后的网格质量你还要考虑这个拓扑的一些,比如他这个地方的产生了一些呃非流行啊,top上出现了一些不好的东西,那你需要去,做一些repair等等,这些,好那我们具体来看一下几个典型的例子啊。

首先是这个element的ship,那比如说对于这样的啊,这不好意思,这个地方打错了,地方是iso tropic,不是iso matchiso t r o p i c啊,下面没写错,这地方打错了。

这地方是不好意思,这是一个alex roy的一个网格,这是一个ice ropic网格,这是一个各项,这是一个各项同性的网格,这是一个各项异性的网格,那么我们来看一下这个各项同性的吻合。

你可以看到每一个三角形的元素都是接近于正三角形对吧,都是接近于那个regular全员过的,不是每个三角形都是接近这样,那么它,就是一种各项同性的这样网格,当然对于这样的各项异性的网格的话。

这个左边是一个各项异性的网格,你会发现,比如说这是一个正一个带呃round的那个就是带这个边界是圆弧过渡的,或者说它是一个round的这样的一个角和一个四面一个正方体。

那么其实这个地方你会看到它的这个每一个元素,它其实是这边,比如说这边是接近于正正三角形,这边这个三角形它其实是这样的一个狭长的三角形,然后在这个中间它这个比较平的地方,是一些比较大的这样的一个正三角形。

那么它其,实会根据比如说像这样的一个结果,它其实是跟这个曲率是,这跟曲率其实是一个自适应的一个这样的结果对吧,那比如说在这个地方,它其实是个圆角的,它接近接近接近于这其实是一个小圆小球。

那么所以说它这个地方就是一个各项同性的接近于这个面积啊,这个元素质量比较小的,那么像这种这种狭长的这个地方,它其实是一个这样啊,这样一个狭长的一个三角形,它其实是这个轴的。

这个它其实是满足这样的一个曲率的一个关系的对吧,那么这种就是叫做一个各项异性的网格,那么还有这个delement的那个desk对吧,那它其实有些地方这个从网格质量来讲的话,它同样是比如这个眼睛这个地方。

比如中间这个结果它就生成的是一个uniform,所有的三角形代表都是一样的,然后还有一个是能与form或者说自适应的,比如还是这个眼睛这个地方,但它在这些曲率高的地方,就是比如说这些曲率。

这是曲率比较高的地方,它在这个地方它就是加密了采样的密度,就像这个地方的点踩的更多一点,那这样的话它能够让这个眼睛在这个地方的,这个就是在这个地方曲率高的地方,它的那个三角形放的更多一点。

那这样的话你最后呃对于这个原始网格的逼定程度,你就会更好对吧,这个事情也是很自然的一个事情,就是你在曲率高的地方,你放的三角形更多一点,在曲率低的地方,你放的三角形更少一点。

那么这样的话其实你还是能达到一个平衡,就是你三角形也不会爆炸的很多,但是你会对这个三角形的逼近程度会做得更好,你你比如说你在这个地方放的这些三角形比较多,那么也就是说这个地方本身是曲率比较过的。

曲率比较高的,那么曲率比较高,也就,是说明了这个地方它的这个呃曲面的这个变化程度是比较快的,那这个地方你放一些,然后三角形的元素放的多一点,在这个地方,那么其实你对这个曲面的逼近程度也会做的更好对吧。

那么这样的话你其实也是可以做到这个就是对这个就是他的呃,他的逼近程度会比较,那么所以说一般情况下,就这个就是uniform和这个呃自适应的这种都有这种采取的方式吧。

好接下来是这个要元素对齐或者orientation朝向,那比如说现在是你现在首先是你比如说像这样的一些cad的模型对吧,就这个地方,给的是三个c a d的例子,这个三个cad的例子。

一般情况下他会都会有这样的一些sharp feature,就是这些这个两个feature,左右两侧的这个normal产生了一个很很剧烈的一个变化,这个其实是也是这种在机械里面,或者说在这种工业里面。

它在设计一些零件的时候,他可能就会有这样的一些呃,就是棱棱角角对吧,那就是对于这样的一个棱棱角角的话,其实你去跑这样的cad模型,其实你是去做这样的,他会有一些这样的很大的feature。

那这个时候你再去生成这样的一个呃,你再去生成这样的一个三三角形,网格的时候,按三角形网格或者四边形网格的时候,你的这个边呢最好是跟这些feature是对齐的。

那么这样的话你才能够去把这些feature给保持住,那比如说我们来看看具体的例子,比如这是一条这个呃shfeature,那么正常情况下,如果你要保持住的话,你这个左右两边的这个三角形应该是长这样的对吧。

但是如果你是这样,你还是你原来中间这条边是这样,这个是你现在这个是一个三角形,只是一个三角形对吧,但如果你最后的三角形就变成这样,你的这个中间这条边是变成这样了,你这这个原来是一条feature啊。

这是这是这是一个feature,然后你的三角形是这样和这样,那么你就说你在中间这一条边,你是长这样的,那其实你对这一段的feature其实是没有保持住的,那么所以说呢我们在做这个。

我们希望最后你生成的这个网格是能够把这些feature给保持住的啊,那么接下来还有一个是orientation,我希望它是跟这个比如各项异性的网格,它是沿着这个曲率的朝向的呃,保持一致的啊。

比如说我们来看一下,像有些地方它的曲率就是一个方向大,一个方向小,那么我希望跟它的主体离方向是能够对齐,那这样的话看上去比较舒服,或者说或者说他最后的这个分析也是比较好。

但是真正对于这个各项异性网格而言,它的朝向呢一般情况下在这个工程里面,它其实这个朝向其实是由这个p d e决定的,这个各项异性网格的这个使用经最常用的使用的这个地方,其实一般是在这个流体的这个仿真里面。

那么流体的仿真里面它是具有很强的各项异性,就是它的流体的流动,它其实具有一个,方向性,那么其实你这个时候你生成的这个网格,如果能符合这个流体的这个流动,或者说流体的这个变化的这个方向的话。

其实他对他的这个仿真带来的这个是那个,所以说这个时候那个我哦对我刚才讲到,就是说你在这个流体流体里面,它其实这个这个它的具有很强的方向性,正常这个时候你这个这个时候你给他去做一个就是你生成的这个五个。

如果能符合它的这个流体的这个流动的潮,流动的这个方向,那这个时候它的这个流体仿真的这个精度就会显著的提升,那么显著,提升以后呢,你最后它的这个就是流体就会准确性比较高呃,准确性比较高。

那就会导致你最终的这个,导导致你最终的这个叫什么,这个就是就是你这个网格是比较适合你这个应用的对吧,那么所以说呢对于这样的各项异性网络而言,它在这个流体仿真里面,或者说它在c f d里面。

其实啊应用是比较广泛的,特别是这种水的模拟啊,空气的模拟啊,它一般情况下都是需要了,或者说有些喷气的模拟,它其实比如一些它其实是受各项一些网络,他对这个物理的这个呃。

那他们对这个物理的表达能够更加的准确对吧,呃是是这样的啊,那么嗯接下来是这个要讲一下这个全局的这样一些structure,比如说这个顶点,那么比如对于这个三角形网格而言,他如果一个顶点周边的度是六。

那么我们称为这个三角,这个顶点就是一个regular的顶点,如果是四边形网格,它的内部的顶点如果是一个度为四,度为四的话,就长这样吧,周边有四个四个四边形。

那么这样的话这个点我就称为是一个regular 4边形,那对于这个三角形的话,比如说我这边周边的都是六的话,那么我这个点称为是一个regular的顶点,那么其他的顶点就是一个irregular。

那么对于这个全局的而言,如果是一个irregular的三角形风口,那就是讲这样的,那么如果是一个sai regular,它其实是一个对一个这个粗糙的一个三角形网格。

做细分以后得到的一个呃网格叫做regular,一一semi regular的,如果是一个完全regular的一个三角形网格,指的是指的是什么呢,指的是这个三角形网格里面所有点的度都是六。

那么这个时候呢就称为是一个regular的三角形网格,但这样的是这样的三角形网格其实很少,就所有点的度都是六,那么这个三角形混合称为这个regular 3角形,那如果是一个regular 3角形网。

格如果是一highly regulate,也就是说大部分点都是一个re度为六的啊,好啊,那么介绍到这里呢,我们接下来要进入,前面是介绍了一些这个基本的这个网格化或者重新网格化。

这样的一些基本的知识和概念,那么接下来我们就要去呃进入这个呃,今天我们要呃的重点就是一个基于参数化的这样的一个网格生成的,这样的一个方法的介绍,那么首先呃当然作为作为一个网格生成。

它其实是一个非常非常大的呃领域啊,那么比如说我这里面列了几个最经典的这个方法,第一个是基于这个底donation pression和bo diem的这样的一个方法。

那么还有这种advanced front对吧,就是这种玻纤板这个东西呢在工程里面的使用是非常广泛的,但是它的研究的价值可能没有那么高,但是他在这个工程里面使用的这个使用的这个还是经常会被使用的。

特别是他在有些地方的这个控制力会比较强,那么接下来是比如说最常也是比较常见的,是基于这些local operate去做一些质量的提升或者生产logo opera,age flip啊,还有这h sy啊。

或者说还有这个clipse split等等这样的一些操作对吧,那么这些操作的话就collapse flip,sweet location,就几个四个操作。

那么这样的话swap或者flip或者叫做swap,那么这样呢我通过这些操作以后,他对这个网格的这个质量的提升也是比较显著的,但是它其实还是过于局部的。

这时候呢其实有时候在呃做用这些局部的操作去做操作的时候,你其实最后得到这个结果可能会很容易陷入一些局部最小化,那么接下来还有一类方法,就是我们今天要介绍的这个基于参数化的方法,就是我们今天等会要讲的啊。

那么当然还有一些什么结构优化等等,这个地方方法就很多了,还有基于这个field的对吧,就这2年比较热门的啊,其实还有基于这种field啊,其实field其实会跟这个参数化的方法是有一些办。

或者说有一些这种内容上其实是有一些是交叉的啊,那么接下来我们来进入这个基于参数化的这个方法,那么基于这个参数化的方法,它的这个python其实也是比较的,它的参数它的整个拍出来也是比较的简单的啊。

首先呢这是一个输入的一个模型,然后呢你把它去做一个参数化,这是我们的参数化,参数化以后呢,你在这个平面上你再去做这个,或者说你在这个参数域里面去做这个呃,我重新网格化,或者说网格生成。

然后再把这个参数与你根据这个地方你不是定义了一个f吗,然后呢你这个地方其实用的是f的力,把这个参数据的结果在映射回这个原始网格上,那么因素元素网格化以后呢。

你可以得到比如说这个地方它这个做的是各项同性的生产,这个地方做的是一个各项,在刚才说的带dac的,就说这是取率高的地方,他放的点会多一点,但我其实说出来结果就长这样子啊,所以这里面整个来看呢。

它这个整个基于这个参数化的方法,它一般情况下会基于如下的步骤,第一步是计算这个参数化,然后第二个是在这个参数的gmain里面,参数的等main里面去做remage就remash。

然后第三步是在lift回来,就lift到原始这个曲面上啊,一般情况下就会分为这个三步,那么所以说接下来你可以可以想象,你所有的工作其实都是在这个三步上展开,如何做参数化。

如何在这个参数域里去做这个网格化,如何去把这个呃基于这个参数化去给lift回来,那这个是相对的容易的,主要的困难是在这一步呃,这一步里面,那么首先我们来讲一下,首先我们来讲一下。

为什么这个既然他这个基于这个参数化的这个网格方法,他为什么要去做这个事情,就是为什么要使用这个方法,那其实是这样的,就是你把这个网格参数化到这样的一个平面上以后呢,其实你的这个在平面上去做这个网格化。

或者说在这个参数域里面去做网格的话,就会变得比较简单,所以说it is easy to perform motion或者remission in the参数的可能,那也就是说你其实参数化以后。

你的这个把你这个网格生成这个问题变简单了,那这个时候才是驱动你去使用这个参数化的方法,去基于参数化的方法去做网格生成的这样的一个内在动力,就是你可以认为这个参数化其实它是一个映射。

把你这个原来的这个do main是把你这个输入的dm映射到了啊,把你这个输入的多边输入的定义域,你去做一个参数化,然后映射到另外一个定义域里面,另外到吝啬到一个令你可以认为是一个映射。

映射到另外一个域里面,然后你在那个域里面去做这个网格化就会变得比较简单,然后简单的网格化以后,你再返回来再去把这个问题再去把变回到这个原始的网格化啊,这是基于这样的一个思想。

其实就是本质上就是说你硬生后的那个日语里面去做事情,就变得简单了对吧,那这个时候也是跟我们平时日常生活也是一样的,比如日常生活我们要去解决一个问题对吧,我们解决这个问题,你可能这个直接去解会比较麻烦。

那这时候你就要去想办法,能不能去转化到另外一个地方对吧,把这个问题等价转化成另外一个问题,或者说在某种意义上能够能够转化成另外一个相对简单的问题去求解,求解完以后我再去返回来去解原始的问题对吧。

那这种其实是一种思维的逻辑,就,是说你其实这种就是一种方法论,那你原来这个问题很难对吧,那我能不能去想个办法去把这个问题变简单,然后再去反驳回来,那么所以对于我们这个地方的这个对于这个就比如说这个。

那这个网格化的话也是一样的,就是这个地方我其实是需要去呃,就是我现在这个输入的等待你去做这个网格化比较困难,那么我就把它转到一个定义里面去做对吧,定义里面相对比参数域里面去做。

那么参数语里面相对比较简单,简单化以后我再做完以后再返回来,那么但是呢对于这个真正,要去做这个事情的话,那这个参数化本身也是一个问题,问题在哪里呢,比如说现在这个地方这个这一页p p t展示的例子。

它其实是一个开网格对吧,它或者说它是一个开网格,那么你要去想,你去做开网格的时候,哎我可能可以做对吧,呃比如说我直接去做参数化了,那比如说我现在是个b网格,这是个b网格对吧,那b网格我怎么去衡。

我们之前讲过的吧,那之前比如在讲这个atx,我们所谓的给他去做一个cut对吧,去做一个这样切割,切割完以后我再去做这个呃网格化,再去做参数化,参数化以后再去做对吧,那这个切换怎么切。

那对于这个他对这个各项运行网格,对这本对于这个网格化而言,他的这个切有没有什么额外的要求是吧,那第二是这个虽然说在这个参数语里面,这个虽然说在这个参数据里面去做这个网格化变得比较简单了。

但是他在这个参数化里面去做这个网的话,它是不是会带来一些额外的约束,那比如说我刚才讲的这个你在这个分组是吧,那最起码我在这个返回返回到原始网格的时候,在跟缝处,它其实是需要网格是能够拼上的,对不对。

就是,你你你因为你很简单,你在还有就是不是很简单,就是你在这个空间中,如果你去做一条歌缝,然后参数化得到2d上,那这条歌缝的量,它其实是会把这个原始网格上一个顶点。

拆成参数域上的两个顶点或者参数参数参数日常的几个三个点点等等,那么这个时候你在这个最后第三步lift起来的时候,其实你是希望这个地方能够再返回回来,再到这个原始曲面上。

他还是这样的一个能够合上的状态对吧,能够能够这个整个就是拼上的状态,那么这个时候你就会加入一些额外的约束,对,吧,所以说对于这样的一个参数化参数化的这样的一个呃,就是对于这样的参数化的方法。

那么我们其实是希望这个从这个嗯是一个低扭曲的对吧,那低扭区的话就定扭曲,或者说是一个低呃,confirm,或者说是一个confirm的意思,或者是一个等距的意思。

那这样的话你在这个参你在这个2d平面上做的这个三角的话,你直接返回来的时候,你还能够保证它的形状对吧,那比如说接下来的问题就是这个cut对吧,这cut我刚才讲过的,其实你真正在去做这个映射的时候。

你其实是需要去嗯满足一定,的这个条件,那么在才能够使得最后你回来的时候,才能够还能够欣赏的是一个最最麻烦的这样的一个约束,呃这个接下来我们进入一些典型的案例啊,比如首先是这个各项同性的网课。

那么比如说我现在是一个各项同性的这样的一个remix,这个这个是一个这是一个输入的,这是一个输入的网格啊,这是一个输入的网格,那么我现在是希望去给他去做一个就是各项啊。

就是所有的三角形都长得差不多的这样的一个,或者说是一个regular的一个三角形啊,直接定义正三角形的这个网网格生成呃,你为了去保证这个输出和输入之间的近似程度。

那你需要去对这个身心的点去投影到这个原始的局面上去,那么对于比如说这个例子就是一条一只狗,它的这个耳朵呢是比如说是就是接近于这样的一个两个耳朵,它的那个这个上下就靠的非常非常的近。

那这个时候呢你再去做这些什么投影啊,你再去做这个比如说这个collapse啊,split啊,你在这个地方,它其实会把这个因为你在这个地方,你其实会把这样原来的,比如说这这条边。

你就会把它collapse掉对吧,那这样的话你其实最后做出来的这个结果,比如这条边小于你的目标边长,小于你的这个目标边长,然后这样的话你这个地方其实这个耳朵慢慢就会被你class掉。

那么所以说呢对于这样的各项同性的网格生成,如果这些地方出现一些很极端的这样的一个扁平的结构,或者说一些很小的特征的话,如果你直接用之前那些collapse,因为这些操作去改善这个网格质量的话。

它其实这个耳朵就会被搞没掉,那么这个时候呢,你就可以去尝试去使用这样的一个rematch的这样的一个操作,就是可以这样在平面上参数域里面去做一个rematch操作,这个怎么做呢。

就你还是先把这个网格参数化到这个2d的平面上,那然后呢你在这个2d的平面上,你再去做这个各项同性的remax对吧,你可以看到比如这个地方刚才那个尾巴那个地方可以搞,被你搞没了,那这个时候你去发现啊。

尾巴尾巴这个地方还有很多的三角形,那么这样的话你最后的这个呃提升上来的这个网格的这个质量,这个耳朵也在,这个尾巴也在对吧,不像这个前面这个地方,它的这个尾巴和耳朵都不在了,因为为,什么呢。

因为你在这个2d平面里去做这个各项同性的网格生成的话,其实这个地方的原来的这个欧式距离啊,你在因为你在这个空间三维中你去做计算的时候,你其实更多的用的是这个三维空间中的这样的一个欧式距离。

去判断这两个点的距离,这两个点之间的距离对吧,那比如说像我刚才说的这两这是一个耳朵的上面和下面,那这个点和这个点的距离其实是比较近的,那这个时候有时候有可能会影响你的这个,比如说一些这个操作的一些执行。

那这个时候有可能会使得你,的这个出现把耳朵给弄没了这样的一个情况,那么如果你在这个op平面上,如果你做了一个各项呃,这接近于这个就是iso metric的这样的一个参数化,那么你这样做完这个参数化以后。

你再到这个2d上,你再去做这样的一个,你再你再再到2d上去做这样的一个各项啊,呃各项同性的网格生成的话,因为你在2d平面上,你这个由由由于你的这个呃接近各项接近那个等距的嵌入。

那这时候你在这个2d平面上,你去计算两个点之间这个距离其实接近于等价,接近于等价于你在这个原,始的这个曲面上去,原始的曲面上去算一个彻底距离啊,所以说这个时候呢你就不会出现,比如把有一些很窄的地方。

因为我刚才我画的,比如说这个地方存在对吧,那你原来这个地方距离可能是这个被你collapse,但你到这个地方,你现在在这个做的话,距离可能会比较长,那这时候你可能就不会被collapse掉。

那么对于这样的一个问题,我们之前说过对吧,这个地方可能会存在一个cut的问题对吧,那么要去完成这个cut问题,最最常见的最最简单最最最最简单的一种做法,就是你去把这个网格切开,开的时候的那个cut。

你在做这个2d参数化的时候,保证保持边界,保持边界并保持边界不动啊啊保持这个边界不动,好这个地方就是当然了,你如果你当然是可能有的同学问问了,那你原始网格上切出来那个边界,它不能够保证它是一个各项同的。

就是它那个每个三角形状都长得差不多,那这时候其实你可以在你的cp的时先去做一个这样的一个spring,刚刚好差不多使得它的这个边界cut尽量已经是在你做参数化之前。

已经保证它是比较每一段每一个边长都是差不多长的啊,那么所以说呢这个整个的这个方法的话,就是对于这样各项同性的,如果你要去基于这个参数化去做这样的呃,mansion的话,其实或者remain的话。

它其实分为如下的几部啊,首先第一步是做这个切割,切割的话,就是把这个网格切割成各项同性的网格,然后第二步是做这个参数化啊,不切割成这个跟圆盘同配的网格,然后呢接下来你是做这个参数化啊,做完参数化以后呢。

你在这个参数域里面去做什么mash,然后接下来是把它投影回原始网格啊,啊这这个四步啊,当然注意这个地方能cut的处理啊,就是在这个地方的时候,你是cut是这个边界是边界。

是在这个remaremax的过程中,边界是不改变的,那么你在做这个cut的时候,你需要对这个现有的边界已经去做一个,比如说呃split club,让它的这个不是其实就是把它的边框位置调一下。

那么这个是一个很简单的这样的一个各项同性的网格生成,那么接下来我们要讲一个基于这个叫各项异性的网格生成啊,那么首先这个地方的各项对于各项异性网格生成的话,首先我们要明白什么是各项异性网格法。

那么各项异性网格的话,这就是之前我们讲的,它其实各项同性的话,就是让它它的每一个三角形看上去都接近于是一个正确的道型,那么对于各项而各项异性网格而言,它的输入是一个定义域。

然后它的呃还有一个是一个叫做不良的厂,这个杜兰的厂是一个对称正定的矩阵,它其实是描述了这个地方的这个三角形,或者说这个地方的这个元素,它的朝向大小啊,就是由这个各项异性。

就是由这样的一个度量的厂来决定的啊,那么对于asthmatic的呃,as the magic reaction,其实你是我们希望它的所有的3a所有的边长都是尽量相等对吧,所有的三角形都是一个正三角形。

那么对于各项异性网格而言,其实我们是希望的是这个生产出来的这个网格,它在就这个你给定的这个度量意一下,它的边长是尽量多相等啊,就是说呃原来是你的这个就是用欧式距离去度量了,你的这个所有的边长。

这个时候如果在这个各项异性网格的时候,你其实是要用这样的一个度量厂magic field去度量你的所有的片厂,那他其实是希望你在这样的不良场意一下,它的这个所有的三角形和所有的三角形。

都是呃尽量的都是一样一样的啊,那么,这个地方啊,这页ppt简单的介绍了一下什么是度量啊,这个度量的话如果大家不理解的话,其实可以回过来想一下大家的,学过的,学过的在这个之前学过的这个距离的定义啊。

呃如果距离的定义还不清楚,大家可以想学想一下这个之前学过的这个范数的定义啊,如果算数还搞,如果大家都不清楚,那可以想想内积的定义啊,比如说你现在要去定义一个magic。

或者说你要去定义一个这样的不良的话,它其实是描述的是这样的一个函数啊,所以它这个函数呢它其实是把这样的一个呃,就是把两个向量映射到一个两个向量映射到一个呃正正大于零的数的。

大于等于零的数的这样一个那非负的一个数的上面的一个映射啊,那么对于这样的一个恢复上面映射的话,它这个距离它其实是需要满足几个性质啊,就是这个这个或者说这个magic,你也或者说你也可以认为是这个距离。

那么在一般情况下,在中文的书里面,这两条性质合起来就叫做非负性啊,非负性的意思是什么呢,就是x y你可以看到它是一个映射,这个映射它是把呃两个向量,x和x这两个向量或者一个集合里面的元素映射到一个d。

这是一个映射映射后的结果,它是大于等于零的,那么如果等于零,当且仅当x和y是相等的啊,这个东西呢其实比如说比如说最简单的,我给大家举一个最简单的例子啊,就是这个欧式空间里面的那个距离。

欧式空间里面的距离,它其实是比如说d x是一个n维的向量,y也是n维的向量,它其实这个地方的这个距离定义一般情况下嗯,所以我们一般情况下定义成就是x减去y的一个二倍数,那其实如果用内积来定义的话。

其实就是x减去y和xy的一个内积,然后再自己和自己的内积在开根号对吧,那这样的话我们其实定义的是x和y两个,比如n维向量中的r n中的两个向量的距离,其实你就定义成这样对吧。

那么对于我们来看一下这第一条这个非负性,那么你当你这个x和y相等的时候,那x x y当当然这个因为是二次数,所以它肯定是个大于等于零的,那么如果是唉这个这个距离等于零的情况下呢,只有这个x减y等于零。

等于零对吧,那么第三条是这个呃,接下来这一条是这个具体的定义,或者说这个match这个函数的定义,它还是需要去满足这样的一个对称性,那么接下来第三条是这个三角不等式,那么三角不等式的话。

其实就是这个x减去x到z的距离是小于等于x到y的距离,长到y到z的距离,那么如果按照这个形式,就是按照这个右边这个二次函数的形式其实就是什么呢,你就x减去对的二范数,等于x减去y加上y减去z的二范数。

那么由这个算数的这个定义半数的三角不等式,你就可以知道小于等于x减去y的二分数,加上y减去z的二范数,那么所以说我定义的这样的一个欧式距离,它其实是满足这个三角不等式的,那么这个当然对称性也是蛮多的。

但是这样的对称性,所以我最简单的这种距离的定义就是这样一个定义啊,所以这个所谓的这个magic你就可以看成是一个e一的,它可能是一个映射啊,它但是它定义的是一个距离,这个距离要满足非负性正正交。

非负性对称性和这个三角不等式啊,那么最常见的这个距离的定义就是用这个内积的内在线性空间里面,用内积去定义这样的一个呃magic bu,当然你这个地方还可以用其他的方式。

那么在我们这个各项异性网络生成里面,它这个地方的match的定义,就是或者说你这个222之间这个呃两个元素之间的这个距离的定义,它其实是用了这样的一个呃,用了这样的一个对称正定的矩阵啊。

这个其实也是一样的,就是我们刚才讲了,我们刚才讲这个地方的这个,我们刚才讲这个嗯,我们的这个r欧式空间里面的这个bx y,它其实是等于x减去y的二范数,然后等于根号下x减去y和x减去y自己的内心对吧。

那么如果对于这样的各项异性网格生成里面,我已经输入了这样的一个呃magic field,这个magic field你可以看成是每一个点上,它都是一个对称正定矩阵,那么这个时候我是可以去重新定义它的内积。

好这个地方我重新给它去定义一个呃内积,内积的话就是x和y的内积就定义成x的转置乘上m乘上y对吧,就是假如说x y都是一个r n空间中的一个向量的话,我可以把它写成这样的一个啊,这个这个是一个m啊。

这是这是一个啊,这如果这是一个m乘以m等它就是一个m为了一个向量的话,ma的向量,那么x的转置乘上m这就定义了他的内积对吧,定义了它的内积,我就可以定义这个x减去我就可以定义这个范数。

我就定义成根号下x跟x的这样的内积,它再开根号,这就是他的那个范数,那么定义完算数以后,我就可以用这个d x y的距离,我就可以定义成x减去y的二范数啊,这个不是这个地方也不一定二,就定义成这个范数。

那么这样的话,我其实最后就会得到它的这个x和y之间的这个距离的定义啊,首先定义内积,定义内积完以后,定义范数,定义完算数以后再去定义这个距离啊,或者说定义这个两个向量之间的这个距离啊。

那么这样的话对于我们这个各项异性网格生成而言,其实也是这样的,就是我现在有一个这样的一个度量啊,这个度量其实是用来去定义这个内积的,有了内机以后,我可以去定义这个范数,有了范数以后呢。

我就可以去定义距离,那么接下来我们的各项异性网格生成的这个目的,其实就是要让这个这个距离对于三角形的一个,对于这样的一个三角形而言,他其实我可以去,我可以去估算这一段的距,离对吧,这个距离是注意啊。

是这个距离不是这个欧式距离了,那么这一段我也可以估算它的距离,那么这一段我也可以估算它的这个这个距离,这个注意注意,这不是欧式距离,就不是这个欧式距离了,是这个下面这个定义新的这个距离。

那么在这个新的定义距离情况下,我们希望它这个每一条的边长是,所以我希望这个三个边长在我心的这个距离的定义上其实是相等的啊,那么所以说这个所谓的这个呃整个的这个各项异性网络生成。

你可以认为是说先输入是有个定义域,然后每,个地域上我有一个对称正定的这样的一个match,或者是这样的一个距离的一个矩阵,然后去定义它这个距离,有了这个距离以后,我就可以去计算它的这个呃。

就是我希望他最后在这个情况下是够升尽量一样的啊,那么所以说呢这个地方它还可以讲的就是说这个近似的长度是这样,这样你就不看了,那么我们来看一下对于这样的一个各项呃,这样的一些,比如说这是输入的一些例子啊。

这是一个正方形的定义域对吧,然后呢对于在每个面上我可以定义一个各项异性的度量,那这个地,方的这个度量呢我其实本来是写成了这样一个椭圆的形式啊,这个椭圆是什么意思呢,就是让这个d x y等于一啊。

或者说等就是我们刚才讲的不是定义了新的这个距离吗,这个距离其实就是等于什么呢,等于根号下x减去y乘上m x减去y这样的一个形式啊,这个地方是转折,就这样它这个形式等于一的这样的一个椭一个椭圆啊。

那这样的我就把它扣,我这个代表的是这个意思啊,那么这个是一个三维表面上的一个呃度量的定义,这是一个空间中的一个火球的这样一个定义,啊那么有了这度量以后,我们其实希望他在这个度量的意义上。

其实是最后是长度都是接近于是一样的,那么这个时候呢,其实我在刚才我们再来回过来看一下这个事啊,那其实我可以把这个m呢呃做一个这样的一个分解,作为这样的一个,因为它是一个对称正定矩阵。

所以我可以把它作为一个特征值分解,还有就是它这是它的特征向量,就是它的特征向量的转置,就是它的特征向量的,但是它的特征值,那这个时候呢我就可以把它转成,我就定义一个新的这个发这个f是取它的一,半啊。

其它的一半,那么所以说这个地方的这个m呢就可以写成f的转置乘上范大,这没问题啊,far的转置乘上这个f那么乘上f以后呢,这样的话我就可以去原来我们的距离的定义啊,大家回过来看一下啊,我们的距离定义是呃。

d y等于根号下x减去y的转置,乘上m对吧,乘上x减去y,所以说这个地方就等于根号下x减去y的转置,乘上φ的转置,乘上y乘上x减去y,那这个时候呢我把这个向量就这两个向量,我这两个是转置的关系对吧。

那我把这个向量看成新的x1 y减去,y1 y那其实我们希望的是这个x1 y这个新的这个向量,就是相当于映射后的这个矩阵,它是尽量的是各项同性的,对不对,就长度尽量是一样的。

所以说其实呢这个地方我可以用一个发这样的一个矩阵,把一个各项异性的网格里面映射到一个各项同性的网络空间里面,什么意思呢,我们的目的是要让这个距离是变得在这个各项。

相当于我要让这个要让这个距离是各项异性网格生成的目的,就是要让这个距离尽量的全部相等,那么也就是说我要让这个距离这个ex 1 y减去y,1y尽量的是一个项,a是一个正三角形对吧,那么是一个正三角形。

所以说你可以把这个各项同性的这个网格去做一个这样的一个映射,从这个x1 y减去y1 y等于y乘上x减去y对吧,那其实就是你把这个这个原始的这个网格。

这个x比如这个地方是x就是y你把它映射到这边的x1 y y1 y来,那你在这个定义域里面,你希望它所有的三角形尽量是一个各项同性的话,但是这是主要是这个意思。

那么也就是说现在我们各项异性网格的生成的目的就变成了什么呢,就是,说你在这个five的这样的一个映射下,它其实所有的三角形最好是各项同性的啊,那么现在是为了去做这样的一个呃事情啊。

就是我们现在去目的是要去做这个非常性网格生成,目的也说明白了,我们是希望在这个范意下,它是保证最终的这个呃它所有的边长是尽量相等的,那么这个时候呢一般情况下一般情况下这个各项异性网格生成的呃。

做起来是比较难的对吧,那但是各项同性的网格生成是比较简单的,那么所以说这个时候我们就想能不能通过这样的参数字化或者映射的,方法把这个各项同性的网格生成的问题转成各项。

把各项异性网格生成问题转成各项同性的网格生成问题,那么这样的话我就能够减呃,简化这个各项往减减,减小这个各项网各项异性网格生成的这样的难度啊,那么所以说呢这个时候我们就要去考虑。

能不能去用这样的参数化或者这样的映射去做这个事情,把各项异性的网格生成问题转化成一个各项同性的网格生成,那这里面呢最常见的会有两类的映射啊,第一类的映射是这个confirm映射。

第二类映射是一个high dimension的as magic的embing,那,么我们首先来看一下这个cfo的映射,它基于的定义是什么呢,至于是这个基于的是这个conformer。

就是这个映射里面理论的这个这个这个一致化的定理啊,那么对于这样的一个一致化的定理而言,它其实是什么呢,它其实是任何一个曲面,然后给你输入一个黎曼度量啊,就是我们之前省的这个m。

那么我都可以把它转化成跟原来的那个输入的形状,它具有的那个度量是一样的啊,那么这是一个很丰富的这样的一个uniform的定理,那么第二个是一个high dimension。

的imagic bin是什么意思呢,就是他记得是那那是in bing的那个定理啊,就是任何一个黎曼黎曼流行,它都能够被等距地嵌入到一个某一个高维的欧式空间里面啊,这就是那个比如说你原来是个三维的。

那你可以把它嵌入到一个八维的这样的一个欧式空间里面,那么你原来你在这个三维的空间里面,其实是要考虑这个度量的,黎曼度量的,或者你要考虑这个度量的,但是你在这个八维空间里面。

你只需要去考虑它的各项同性的这个度量,那么你这样的话,你在这个高维的空间里面,你的所有,的这些不良的计算,就你所有的或者说你的这个形状的计算全部变成了这个各项同性,或者说各项的呃,各项同性。

或者说是一个uniform这样的一个方法,那么这样的话你这个问题就变得比较简单了,所以说最常见的是这样的一个conformal和这样的一个happy mation,embing的这样一个方法,嗯。

这个是也是接下来我要讲的两个方法,第一个是这个各项基于conformal的,那么原来是这样的这样的一个呃stretch,就是说它的这个地方的这个这地方可能写的不太清楚啊,就大家可以看一下。

这是最终的这样的一个各项异性,的网格对吧,这是一个最终的各项异性的网格,那么这个时候呢我是希望它这个各项异性的网格,它其实是在这个我其实是可以把它去做一个conformal的映射。

然后呢在这个2d平面上,它就是一个各项同性的网格啊,就是其实你可以认为是这样的一个映射,这是一个conformer的映射,然后呢他在这个cfo映射以后以后呢,它这个地方就是可以做一个各项同性的网格啊。

这部分具体理论后面的那个方谦老师再去进一步介绍吧,反正就是有一个定理存在,就可以去做这样的一个各项同呃做一个呃,保角的映射使得这个原来的各项异性的吻合,这样的生成问题转成各项同性网格生成问题吧。

这是基于的是那个呃conformer里面的那个练那个定理啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么接下来我要讲的另外一个事情是这个对于任意的一个给定的,任意的一个光滑的一个metric field,然后呢如果它是定义在这样的一个定义域上的。

那么它会存在一个高维的这样的一个就是high dimension的时候,原来比如说可能是这个这个地方的这个m是一个三维的对吧,原来你的这个比如这个地址你的定义是二位的,那么最后这个地方是一个,三位。

那么这个地方的l就是三个地方就是二,那么你在这个这个这个域里面,原来这个域里面是一个各项同性各项异性的网格,然后你在这个域里面你就变成了各项同性的这样的一个网格啊,那么这样的就是什么意思。

就是说你原来在这个各项异性的网格,你在这个高高阶的这个或者说这个高文这个网格里,就变成了一个呃各项同性的,那你就可以用这个欧式的距离去度量这个去做这个reaction啊,那么这样的话你在欧高额的保单里。

你做的所有的这些运算就会变得比较简单,所以,说这个这个呢就是可以去做一个高维的等距的嵌入啊,这是也是一个现成的这样的一个定理。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么你要去做这样的一个高维的等距的嵌入的话,你就需要去做,一般是需要去做优化,那么第一个就是你要去做嵌入的,或者说你要去做一个等距的呃变化对吧,就是你相当于什么呢,相当于你在这个2d的这个平面里面。

就是你在这个原来那个低维的空间里面,其实你是定义了这样的一个距离对吧,其实跟你这个低位下有这个magic度量定义,的这个距离是尽量是一样的,要跟你这个低维空间里面。

低维空间里面的那个呃各项疫情下的那个距离要是接近的,第二个能量是我希望这个高位嵌入的空间是比较光滑的啊,这样的话高考的话你在这个后面这个嵌入空间里面,你再去做这个重新重新玩的话。

或者说你再去做这个mc的时候就会变得比较简单,所以说这个地方呢它会有这样的两项能量,一项是这个bin ebin,能量一向是这个smooth的能量化,那比如说还是这个例子。

那么首先是这个首先是这个地方是一个输入的呃,定义域和这个各项异性的网格,然后呢他去做这样的一个变形,在这个变形过程中呢,它就是生成这样的呃,是生存去做一个嵌入啊,这是一个二维的,这是一个2d的。

你把它嵌入到一个3d的空间里面,最后就变成了一个等距的嵌入,然后你在这个3d的空间里面,你再去做这个各项同性的这个网格生成,做完各项同性的网格生成以后,再返回到这个2d平面上。

就得到了一个这样的各项异性的网格吧,啊这是一个呃整个的流程,呃接下来我们介绍一下这个四边形网格,那么对于这个四边形网格而言,这是一个record网格,就是所有的顶点的度都是四。

那这是一个sei berry的网格,就是它的这个它的这个大部分顶点的度都是四啊,它是把一个呃cost的这样的一个四边形网格,把它做细分,得到了一个session regular的一个网格。

就大部分的地方的顶点都是度都是4000分,就少部分点的度都是呃是非死的,这是一个呃提一点比较多的网课吧,对于这个四边形网格,我们一般会叫这些呃,如果它的度不是一个,四的话这些点我们会把它叫做齐一点。

那么这是一个起点比较多的网格啊,这个也是一个二三,那么我们的目的的话,一般是一般是去生成这样的一个space网格,就大部分地方的顶点的度都是四啊,那么这时候最常用最常用的这个方法是基于这样的一个呃。

参数化的方法,那么比如这个是拿一个2d的例子来举例啊,这是一个2d的平面上的一个箭头的例子,那么我把这个箭头,我把箭头在这个地方,这个红色的点你可以认为是一个奇异点。

我把这个奇异点呢连着这个绿色的线连到,这个边界上,比如连接到这个灰色的点上,我把它切开,切开以后呢,我把这这一段就切开了,切开切开以后呢,我再把它去参数化到这个2d的平面上,注意啊。

因为你是目的是要去做四边形化,所以你在做参数化的时候,你需要让这些点都是落在这个落在这个边界的格点上啊,落在这个边界的格点上,落在这样的一个格点上,然后呢,并且注意这条这条高缝呢。

它其实会变成这样的两份copy啊,会变成上面一份和下面这一份,那么注意在这个变成两份的时候,你会发现这条绿色的线,这道这,条绿色的线,它其实这个地方是一个垂直90度的关系啊。

我等会来讲为什么是90度关系啊,然后呢并且它这个转过去以后,他还要保证一定的,但在这个例子它直接转过去就可以了,但是在其他的例子里面,他这个地方还需要有一个这样的一个translate的。

意思就是他直接转过去啊,其实是不够的啊,那这个我们后面再讲,那么他其实为什么要去把它映射到这个格点上呢,对于这样的一个四边形网格生成而言,它其实是把这样的一个网格参数化到一个2d平面上。

然后呢在2d平面上,去做四边形化,那么在2d平面上去做四边情况最简单的方式是什么,自然的方式其实就是这样,那到底平面上我去放一个规律的去放一个这样的一个规律的网格对吧,那么规定网格的话。

每一个这样的其实就是一个规整的一个四边形化,然后呢我在这个2d上,我再把这些四边形网格在映射回到原始网格,就变成了这样的一个四边形,对不对,那么所以说呢我就需要把这个参数化的过程,我其实是要去做这样的。

把它映射到映射到这样的一个grad上,那没收到这个规则以上以后呢,我再去反应回到原始网格上,那它在这个地方就直接去生成了一个呃实验型化对吧,那所以说这里面的难难度就是什么呢。

就是我怎么去让这个去计算的这个参数化,它能够使得这个网格它最后都落在这样的一个格点上,那么这样的话我最后所有的识别情况就变得非常简,就后面的两红对吧,在在参数里面去做四边情况,在映射回去。

那这两步都变得比较简单的,那唯一的难点就是在这里的参数规划上,他跟书画上,我就是要让这些角点或者这些边啊,这些都在这些格点上,那么那,这样的话我这个映射回去就是一个很好的识别情况对吧。

那比如说这个地方为什么要这个地方要转90度呢,是这样的,你可以看到我们看一下,比如说这款我们来看看这一块区域和这一块区域,其实你会发现这对于这个四边形而言,对于这个四边形而言,对于这个四边形而言。

它这一块区域其实是缺掉的对吧,它这块缺掉的其实是由什么来补充呢,他其实对于这条边界而言,这条绿色的边界而言,它其实跟这条绿色的边界而言是一是对应的对吧,那也就是说它映射回到这个原始,的这个曲面上的时候。

它其实这这一段的边界和这段的边界应该是重合起来,那么重合之前来这地方缺掉的这个缺掉的这一块这个空白区域,它其实应该是由这一块区域,这一块小的这个黄色的区域给填充上去对吧。

那么这个时候你就需要让这个地方的这个角度是垂直是90度的,那么垂直九速了以后,你这个地方转过去以后,并且这一条正这两条边就是一个旋转的角度,那这样的话你转过去把它拼上。

把这块剩下的剩下的这个规律去填充上,那么这样的话它这个地方就会成,为一个完整的格子啊,所以这个地方这两条边界,它就是需要是一个呃90度的一个旋转的一个关系啊。

并且像这个保证这样参数化以后的这一段长度和这段长度,就是一个旋转90度关系,那这样的话它才能够把这块空白的区域给填上,那其他地方也是一样的,这样的话填上以后它才能够成为一个完整的格子。

那么这样的话他最终最终的这个思维情况才能够是这个地方全部填满,填满上,否则的话你这个地方是填不满的啊,啊当然还会有一些呃这个地方举一,个简单的例子,还会有一些其他的更复杂的情况,但基本质上就是这样。

那你要让他这个拽过去90度,然后这两个格子能够合上对吧,当然不一定是90度,也可能是180度对吧,这地方参数化出来可能是长这样的,就是说不一定是90度,但肯定是90度的倍数呃。

那么所以说呢对于这个四边形网格生成而言,他其实也是去做这样的一个参数,就是最直比较常见的一个方法,就是基于参数化的方法,最常见的就是这样,但是他需要去对这个参数化去做一些额外的约束,他希望这。

个参数化是能够映射到这些格点上,并且这个切割割缝的左右两侧,它是满足这样的一个旋转约束,当然其实后面还会有一个平移的约束啊,因为什么,因为在这个参数域里面。

比如说你在一个原始网格上切出一条歌颂最大个缝以后,他在这个平面做完参数化以后,它其实这两条沟缝有可能会隔得很远,就是它不一定是挨着的,你看这这个点是因为它这个起点的原因,它这个地方是挨着的。

但是在这个如果这个封闭网格上,可能两条参数与两条在原始网格上的同一条线,拆成两条参,数域上线,这两条线其实有可能是不挨着的,没有一个起点把它连起来,那这个时候呢你做完了这个旋转以后。

你还需要把它平移过去对吧,你为了不让他接受,你其实还是希望还要要让他平移过去,那这个时候平移过去的就平移过去的这两个量也要是整数,那这样的话它才能够那这个格子能够严严丝合缝的合上吧。

好那么这是整个的对于这样的基于参数化的方法,它一般情况下会有这样的一个pipeline啊,呃呃初始去做一个厂做了,做完长了以后去做一个参数化,参数化,大家可以看一下这个地方。

就是直接把这个参数化的这个等参线给画出来,其实这个这个绿色的线和这个蓝色的线和这个红色的线,就是我们这一页ppt里看到的,比如说这个就是这个蓝色的线,那这个这个这个方向的线就是一个红色的线啊。

就这个这个方向的线就是红色的线,这个方向就是一格这个格子的线,就是蓝色的线啊,那么所以说呢你会发现比如在参数化里面,他这个蓝色的线就是一个格子线,这个蓝色的线就是格子线,这个线就是一个红色的线。

那这个就是一个参数化的,你可以认看成就是一个texture map啊,就是一个纹理的映射啊,它其实不是一个四边形网格,它就是一个纹理映射,只不过是用这些greed是作为这样的一个纹理映射。

那么你会发现它其实就是完全的对上了对吧,那这样的话它其实最后很容易去生成这样的一个四边形网格啊,那么大家可以看一下这个,我们再来看一下这个地方的红色的线啊,你可以看到它其实是这个红色的线。

比如说你可以看到这一段红色的线,这是一段红色的线,这一段是蓝色的线,所以你会发现这个红色的线和这个蓝色的线会连起来啊,大家可以看啊,那大家可以仔细看一下,你可以看。

比如这一段是一个这这一条过来是一条蓝色的线对吧,但是其实你会在中间你会发现它其实会有一些啊,这个线不明显啊,那我们来看一下这条吧,就其实还是这条,你看到比如这条线他过来其实一开始是一条红色的线。

但是到这个地方就变成一条蓝色的线了是吧,那其实这个东西是怎么来的呢,就是我们就是我们这个地方来的,我们来看一下在这个例子啊,比如说你这个地方这一条是一条蓝色的线对吧等等等等,唉你到这了,你到这了以后。

其实你最后你这个再往下画,你就因为你空白了,你不会画嘛,所以你会其实你会转到这个地方的对吧,所以你会转到这地方来,对这个地方你会你会转到这来,所以你最后的线这一条是一条蓝色的线,然后到这地方转过来。

因为这两条要合起来嘛,你会转到这边了,那这个就是变成蓝色,变成blue,那么所以你就会发现你在这个里面也是一样的,比如这条是绿红色的线,做了做了可能就会变成蓝色的线,那其实就是因为这个地方存在一条割缝。

把它给切开了,那么这样的话你就会发现你的这个蓝色线会不会这样交点,那其实就是刚才说的那个样板主板图那个旋转的约束啊,他说这个就是那个参数化里面有,就是就是那个参数化的过程啊,所以这是这是材料主管啊。

好那这个地方最后是生成一个四边形四边形网格,那么其实你刚刚已经知道了,这里面最难的就是这个对吧,你怎么让它的这个参数化是满足这些格点的要求,并且它这个旋转的额外还会有一些约束,你怎么能让这个事情去做好。

那这个事情其实是相对比较困难的话,这个整个这个方法啊,整个这个流程去场是做餐桌啊,做这个网格化这个流程大概经过了呃,从比较成熟到现在差不多大概有十,大概过去了15年内吧,这个方法被研究的很透彻啊。

现在呢其实有一些有有一有一两个方法其实是鲁邦性非常好,就他基本上大部分例子都能跑就跑出来,效果说实话真的是挺好的对。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后至于这样的一个方法,我们可以看一下,再来看一下这个参数化这个这个结果啊,大家可以看到这个地方就是比如说像这个地方啊,我们来看一下这个就是什么呢,这,一段这一段和这一段,这段和这一段。

比如说或者说这一段和这一段其实就是什么呢,其实就是这个前面这个两个圈,这两个车灯的这个前面这个对齐的地方,其实你会发现这个和这个它其实差的什么呢,它这个地方旋转不差,他这两个旋转不差。

他其实差的是这个斜对面这个平移啊,平移就你你做grey的,你比如说你去画这个grey的线的话,你其实你比如说你在这个地方画grey的线对吧,那其实你要让这个grey线和这边的这个green的线给对上。

其实你需要把这个grade线整体往右边去平移一下,对吧,它其实最后可能那他这个参数化以后,它这个地方可能不在一起啊,比如说还是拿这个例子来说啊,他这个地方它这两个这个和这个他不在一起。

那么所以说你需要把这一段平移到这边来是吧,平移的时候你也需要有整数的定义,那才能让这个grade,比如你这个地方是一,你这个地方是四,那你这个地方一平移四,那你其实要平移的是三对吧。

平移过来以后你才能够整数格点对上,所以说这个地方还需要是一个整数的,整数格点的这样一个平移的,那这样的话才能够让这个线对齐,右边也是这样的,那么这样的话这种这个方法,比如这边也是,这边也是。

所以说这个地方其实真正去做这个参数化的时候,它其实有几个约束,第一个约束是这个要没有翻转,第二个约束是起点要在整数格点上,第三是歌颂的这个要是一个旋转,再加旋转,是一个90度的整数倍的旋转。

再加上一个呃90度的,这样呃就是一个整数的平移啊,就是这些约束,然后这些约束多满足的情况下,它就能导出来一个四边形网格了,但是这个四边形网格的话,它最后生成的这个。

其实你要满足这些四边形网格其实是挺难的啊,这些约束条件下的参数啊其实是挺难的,挺难做的啊,嗯然后今年去年今年吧,现在还是2022年,2022年就有篇西瓜文章,就把这个思想就说到另外一题网络上啊。

效果也很好啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以接下来我们要讲的是这个六面体网格生成,六面体网格生成的话就是所有的这个元素它都是一个六面体网格啊,那么这里面我们介绍一个也是基于参数化的。

但是这个地方的参数率其实是一个呃polp的这样的一个参数域啊,这个polo的参数域其实就是一个呃轴对齐的一个参数域,就是一个横平竖直的这样的一个啊结构啊,那么横平竖直的结构。

那么如果是一个横平竖直的结构,其实或者说它是一个gradm,它在这个上面就已经把这个一些格子都已经打好了,就是它其实就是一个你可以看成是一个有一些有一些这种呃立高,乐高的这种就是玩具。

或者说有一些立方体堆积而成的,这样提出化的一个一个定义啊,那么如果它是一个体系化的定义域,那么其实你在这个里面,你其实去做这个体式化,其实是比较相对比较容易的啊,像素和这个呃去做这个六面体的话。

就直接就是把这些体术堆在这边就行了,那这样的话你再把它映射回你的这个定义域的话,就会生成生成一个比较好的六面体网格啊,所以说你的这个这里面的这个核心就是怎么去做这个事情。

怎么去把一个比如说一个输入的一个四面体化,或者说输入输入的一个四面体网格,或者输入的一个三角形网格,把它变成一个在一个grade表面上啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么这时候你就要去做这样的一个呃四面体化,那么这时候你需要去有这样的啊,这是一个poly cue的这样的一个结构,那你的核心问题就是去算算这个,那他需要满足的什么条件呢。

第一个是它的这个算出来的这个边界的法向它其实是要跟轴对齐的,第二个是它的这个轴的话就只有两个,只有六个啊,正负x正正负x正负正负z啊,那么这个map的话,你也是希望它是扭曲比较低啊等等这样的这样的情况。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么这时候你需要去做这个事情啊。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当然这个事情做起来也不好做,说实话,但是呢呃近两晋也是大概12 10年左右吧,这从09年09年08年左右开始,大概也是经过了十几年的研究,其实也有一些这2年还每年大概前几年吧,每年大概还有1年。

每年大概还有一天到两天,每天比较重要的文章还是能出个比较好的文章,还是1年能出个1~2篇吧,但是出的也比较少,说实话这个题目做的人也不多,但是他确实是有一些模型,它的这个六面替换还是能做的比较好的。

基于这个poly cube,特别是这个前2年那个呃就是这个刘洋老师他们做了一篇文章对吧,最后这个他们对很多的cad模型都能够跑出值呃,全六面体的结果呢呃这个而且飞鞋对的也比较好,呃。

从效果上来看还是结果还是比较比较不错的啊,但是说实话这个整个的工作量是啊非常大,那个学生也是比较厉害啊,就是这个原来也是科大少年班出去的一些学生,确实是就是工作量很大,然后呢。

嗯对反正就是这个六面体网格生成也是比较重要的内容啊,啊这个这个我们就不讲了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具体就这个具体方法我们就不讲了,大概就跟大家讲一讲,介绍一下吧,那么接下来我们要给大家介绍一个东西叫做高阶网格,那么高阶网格什么意思呢,它其实是每一个每一个元素啊,它不是一个它这个每一个元素。

它不是一个传传统大家意意义上的一个呃四面体网格,或者说一个三角形网格,它不是每一条边不是直的了,它每一条边变成了每一个四面体呢,就变成了一个多项式表示的四面体啊,所以它是一个由北绕。

它是每个你可以看到他们内部的接线,其实都是一些弯的线啊,它不是直的线,那么这个时候呢你是所以说它这个地方的定义,它其实都是由这样的一个北泽尔的映射定义出来的啊,本来比如说我们去做这个三角形四面体的定义。

它其实就是这样的一个质变的四面体对吧,那比如这是一个正四面体,这是一个等腰直角三角形,这个意义上的这种等边的,那个就是垂直这种意义下的这样的一个四面体,但是呢在这样的一个高级网格里面而言。

它其实这个每个所有的这个四面体的定义,它其实都是有一个这样的额外的一个北大二mark定义出来的,就是它其实是一个多项式定义出来的这样的一个形状啊,那么要去做这样的一个网格的话,呃。

它其实最呃当然他这个好处是什么呢,就是它能够对这个边界的这个保值会更好,然后第二呢是它的有限元的时候,他的基呀,因为它是在这个网格现在变成了一个呃北大的map,所以说他在上面做这个有限元的时候。

他这个地方的鸡呢就会就g函数就会变成一个高阶的g高阶g的话,它的精度会更高啊,当然计算量也会更大,那么接下来,啊这个它的北大的这个map呢,他当然是希望它是所有的都是没有翻转的啊。

就是跟我们后面讲的这个,但是这句话的北大map它是一个什么呢,它是一个连续的map,它不是一个就是我们之前讲的,就是它定义在一个三角形网络上,定义在一个三角形上,或者说定义在一个四面体上。

它整个的map是一个连续的map,就是它是一个呃主点不相同的办法,就是它是一个连续的,就是呃不是连续,但是就是说呃它会有这样的,它不是一个constant,它是一个变化的啊。

那么这时候你需要在这个整个四面体上,保证主点的这个都是没有翻转的时候,他的那个条件判断条件都会不一样啊,那么也是这个明天的课程,我们会明天的课程,那个陈仁杰老师可能会带大家来呃,讲一些这种新的这种呃。

就不是在这种三角形网格,或者说四边形网格上,对于这样的一个四面体网格而言,最常用的,对于这样的高级网格生产而言,最常见的方法是首先生成一个粗糙的线性网格,然后把这个线性网格变形到变形以后呢。

跟这个原来的这个四面体网格呃,变把它变形成一,个高级网格最常用的方法,那么这时候的变形过程其实就是一个计算映射的过程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

或者是这个建设优化的过程,好今天的内容就到这里结束了啊,就是前面后面可能会比较的那个呃,刚才有个同学问的是这个流体碎裂成液滴,应该怎么解决网格撕裂的问题啊,这个说实话我不大熟这个事情啊。

就是我们这个流体的仿真,其实我没有很深入的研究,我只是知道就是说这个这个流体的仿真里面需要各项异性的话,但是说涉及到这种客户变化呃,说实话我现在还没有一些深入的炎症,可能后面我们看看能不能做一点吧。

特别是这个还会涉及到整体整个流体里面的一些变化什么的,但我感觉可能也能做,但是怎么做我可能需要去研究一下啊,说实话我现在不是很熟悉,说实话这个流体这个东西已经有点超出了我的目前的这个知识范围了。

这个问题不好意思,我现在回答不了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那那就那就这样好吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值