GAMES102:几何建模与处理 - P7:曲线光顺 离散曲线 三角网格 - GAMES-Webinar - BV1NA411E7Yr
好那个同学们,今天晚上我们的课开始了啊,啊今天我们继续会把曲线方面的内容讲完呃。
首先我们看一下那个好。
我们左右五的情况,昨天晚上昨夜我已经批改啊,这个地价完毕啊,今天我们啊昨天我那个批改了一下啊,这些任务呢主要是实现b进行和差字型细分啊,啊地交同学有29份啊,那个其中有十分啊,这个还有其他的一些语言好。
这个还有部分同学说延期延误交,这个也都可以的好,那我们看一下引擎递交的作业作业情况啊,这个我们挑选了部分吧,比较优秀的一些同学的例子和报告,就是那个蔡金细分的一个方法啊,这个事情非常简单。
这个在报告中也写的非常详细啊,这是三次啊,三次它的细分不一样是吧,那个如果后面的同学们有时间啊,就可以去阅读一些细分的一些更多的一些知识,所以二次跟三次呢要像上次那个呢这个叫proprimary。
就是叫主系分,二次那个叫duo细分啊,这个基础和偶数的细分可是稍微有点不一样啊,这个一个是刚好两个形式对有关系啊,我这里就由于这个是基础课程,我就没有详细展开。
但是这个嗯你们体验一下这个细分两个还是有点不一样啊,因为增加的点和线不一样,特别是对于曲面来讲,它那个嗯这个二次和三次的细分,这个啊方法还是有很大区别的啊,当然四点细分就是差值型的啊,就是实现也很简单。
那么中间有一个阿尔法值,阿法值就是那个向量的这个偏移是吧,这偏移是0~8分之一,这种中间啊取得不错的结果,那么王朝同学呢他把这个阿法值超过了1/8啊,零点你加我这个就发现它这个曲线就变得比较怪异是吧。
事实上呢它就变成了一个细分类的这个曲线啊,你可以调整阿尔法,阿尔法越大,可能细分这个会会会越杂乱一点啊,咱们呃这个证明了我们就不去讲啊,但大家可以可以试一试啊,你程序写好了,直线不难啊,程序写好了。
你就可以看到这个现象好。
那么这是王成同学的一个啊这个视频啊,可以可以看到它这个交互界面写的还是比较友好的,可以可以看到它呃输入点以后就马上可以生成不同类型的细分啊,这个四点的二次三次都可以啊,然后可以控制节点,可以显引调是吧。
只显示曲线,还可以显示这个细分的次数啊,啊所以它切换这些都是非常方便的,因为牺牲p粉本身它就是线性运算,所以啊你只要细分不是特别多啊,3~4次这个细分,反正这个速度还是人时跟得上啊。
这个总体上这个界面还是不错的,好我们来看另外的同学长金俊啊,这23次这个细分的这个形式开的和b的两种情况,他也做了那么4。7分啊。
这也也做了啊,这是他的一个demo啊,我们看一下啊,是这个绿色绿色多边形呢,就是它的输入的多边形啊,那么这个黄色的就是曲线,你看到他也能调这个阿帕兹啊,当然阿帕兹他固定在啊就小于1/8啊。
所以它没产生分型上飞行很容易把参数调下去了,然后这三种颜色就是三种不同的细分啊,那么其中两种逼近的一种是差值的啊,那么这个界面它就是两种积分,都产生了一种紫色的和一个绿色的封闭曲线。
你可以看一下它的这个曲线能够实时的被显示啊,后面后面应该还还有一些好没有好。
那么这是另外一个同学做的,也是相对比较好的啊,项羽啊,陈同学,然后那个他这个鼠标很有特色啊,点一下它会有一个像波浪一样的,可以让用让用户感觉就他输完了对吧,这是这个给用户一个比较实时反馈。
就是说你你你要告诉我这鼠标点的是产生作用了,产生产生效果了啊,就是一个响应啊,这也是一些很好的ui的一个啊,这种比较小的一个啊细节啊,这话让用户感觉到我输入鼠标点击了,确实是在系统响应了我的世界好。
那么从他的demo可以看到它呃,也也是一样,跟刚才两个同学一样,可以实时调节这个阿尔法值啊,还有不同的细分,还有还可以原始周边形啊,你可以看到阿帕值是0。477,就产生分支型啊。
分型的类型他也可以去实时控制啊,就改变这个初始的这个呃多边形曲线啊,然后就也可以实时得到这些曲线啊,啊这曲线它它它没有实时跟着动啊,上次也是完全可以跟着动。
跟着这个同时更新好啊,我们还选了另外一个小小同学的,他呢就实时性好一点啊,你可以看到我输的时候,曲线就跟着是在生成是吧啊,这是均匀三次的,刚才刚才那个是蔡京的啊,最近二次就是四点积分啊。
它也可以随时增加点啊,可以编辑点啊,拖动好像也也能够增加啊,唉好嘞好,我们就就不会看了,好嗯嗯嗯,这只要交交作业的同学做做,做的还是相当不错的啊,那么我们也会把这四位同学这几位同学吧的代码。
还有报告也分享给其他同学同学如果后面有同学啊还要做作业的话呢,可以参考一下啊,但最好是呃我们虽然公开了这些代码和报告,但这个只是参考,如果你们真要学学这些东西的话,最好最好自己做一遍以后呢。
就会啊掌握里面的原理以后会呢更更加啊能够很好的利用这些工具啊。
来做你的事情。
好吧好,就是叫光顺啊,这光顺呢一般在几乎大部分的课程里面嘛,或者教材里面都不会有啊,因为这东西是一个比较比较精细化的建模的一个啊,在很多软件里面,这个很多一些用户是不会用的啊,但是呢这个很重要啊。
我觉得所有今天还是抽点时间把这个东西讲一下。
那么光滑这个概念大家都清楚啊,就连续我们在大一的时候就知道连续连续概念啊,连续概念我们那个在前几周也讲过,它的这个定义是吧,就是它关于它的参数是这个连接导数啊,一样就是c0 是吧,就是就是接牢了一阶。
就就是这个切线连续啊,那么r j就是高阶连续,那么一般我们只二阶以上的连续呢就叫光滑啊,指指这个东西曲线非常非常光光滑smooth啊,那么连续的是continuous,就是连续啊。
所以说有的时候连续跟方法我们也是啊,这个这个这个通用教的啊,就是光滑知识连续性高一点啊,那么我们也学过那个我们也讲过啊,就是几何连续跟参数连续又不一样,九点去呢实际上更刻画了他的本质方法性。
因为结构连续是跟参数化无关的,这个这个上面的这个连续呢是跟参数化是有关的啊,大家还记得我们举这个例子是吧,就就一个线段是吧,你在在这里分参数化不一样啊,如果你刚好是胡桃穿的话呢。
这个这个连续性就是实质性无穷啊,如果呢这个这个这个是跟这个战争这个参数呢是一样的,那么就这连光滑性啊,这这个光光滑性就会降低对吧嗯,但是呢如果我们跟参考无关的九零性呢就是一样啊。
就这里能刻画它的一个本真的一个方形好,那么更适合于这种曲线设计啊,因为它不属于你的表达而改变,它是它的一个本真的一个啊性质啊,好那么什么是光顺曲线,光顺呢英文叫fell啊,就是公平的啊。
就是那个那个词一样啊,啊就是fell fell,那么这里用的动名词fing啊,就是呃叫曲线光顺啊,光顺是什么概念啊,光顺呢嗯就是说它可以是非常光滑的,cc无穷的,但是呢你可以看到这两个曲线。
但如果你把这部分放大后,发现诶它呢还是一个比较啊,顺等一个曲线,它这边一放大呢,里面的凹凸凸的歪歪扭扭的是吧,那么这种呢是在这个肉眼呢,可能这样也可以看看不出来,但是呢你可能用手去摸的时候呢。
能感觉到他这边是有一些凹凹凸凸啊,就是因为手我们手指是很很敏感的一个啊,这个传传感器就是你去摸的时候呢,所以有时候木匠师傅做完一个东西以后,会用手去摸一下,看看是不是有一些凹凹凸凸的地方是吧。
还有办法呢实际上是你在你在里面打个光啊,这个后面也会提到这个事情啊,就是在这里打光,看它的反射,如果它反射是连连续的,表示这个曲面还是比较好,如果反射呢是呃这个有间断。
那么就表示这个法你看这个凹凸出的这个法向发射距离变化是吧,但是还不够,还有什么,还有曲率也发生了变化啊,所以后面我们会过来解释这个光顺呢实际上是从宏观来讲,你可能看不清楚,但是在微观上来看。
从用它的曲率线来看,就知道这个曲线是不是光圈啊,那么要要讲这个曲率,那么我们啊会会那个呃也讲一讲这个积分几何学啊,就因为这边啊里面有些概念,像这个曲率啊,法向还是大家需要清楚的啊。
这些东西呢这些内容呢都不复杂啊,这些都复杂,都是你们大一学过的这个微积分里面都涉及到的,只不过呢呃微分几何学呢回来会讲的更多一点,会告诉大家怎么用这个呃,呃这个微分几何的一些符号啊运算啊。
来来研究曲线曲面的更多的性质,大一的内心呢只是啊比如说这个切线啊,我一个曲线,反正现在大家都很清楚啊,就一个曲线就是一个单参数到一个r的一个影子影射啊,就是就是曲线只要是r一啊。
这个这个是一一个一个说一个变量就就是曲线嘛好好,那么对它的切线呢就是它的每个分量的导数,因为你有两个分量,刚好是刚好是两个导数,那么过起来就是一个啊在这个平面上的一个一个切线切线啊。
这这个就是这个曲线在接近切线,那么这个切线的这个沿着逆是逆时针呢,呃这个垂直呢就可以得到它的法线好,但是从无名几何上的角度上来看,我们法线不是这样来用t的旋转啊,是用t跟另外一个这种啊。
这种叫做叫做乘法时去做叉积得到n啊,它还能t n b啊,嗯是构成一个friend标价啊,在这里我们就不展开,因为呃有很多同学不是数学类的啊,数学类帮你,这不不数学类的话,你去呃找一本微几何书。
稍微了解一下他这些符号就能搞明白啊,好那么这个界线法向呃还有一个曲率,曲率概念呢,取的概念就是事实上也是曲线的一个本身的量,曲线是重量什么呢,啊曲率数量是什么呢。
取率就度量了一个曲线在这一点的一个弯曲程度啊,如果这个曲线弯的弯的很厉害啊,我这里举个例子啊,啊这里应该号后面有个图对你看这个这个曲线,就是这个曲线的曲率在这一点取是什么呢。
是跟它的两阶密切圆的半径的倒数这个r,那么这个曲率k等于r t那么是什么意思呢,就是说呃那什么什么叫两线密切圆,就是这个圆在这一点跟着曲线有共同的接触点只有一个,而且有共同的切线,而且有共同的曲率啊。
所以这个这个这个半径的倒数就是这个曲率啊,你可以看到在这一点,但是取原大一点,在这一点的曲率圆形小一点,所以这个r就小对吧,r小r小的话1/2就大对吧,所以这一点呢就取率大,所以越平的话曲率越越小。
因为它这个半径就很大嘛,是吧好,所以大家可以看到好,那么这个这个密切圆越越小呢,表示这弯的厉害,因为他要弯成一个小圆的样子啊,所以曲率越大表示更弯,曲率越小,表示越平,好吧好。
那么大家马上可以想象一条直线段,这一点的取值是多多少啊,斜率越小越平是吧,所以一直线段处处斜率不等于零啊,也就是说它的密切圆半径是1/0嘛,就是无穷大啊,这个因为我们一般就是无穷大的一个圆。
就是跟这一点相相切啊,当然但不存在无穷大的圆了,我们自然理解好吧好,这里有个概念,就是曲率啊,它是一个啊呃首先是它是描述这个曲率曲线弯曲程度的一个量,其次呢它是跟什么跟参数化是无关的。
就跟我们刚才提到的那个几何连续性一样的,它跟差的化是没有关系,它是描述了曲线的一个本质的一个量啊,这个无论你这个里面的参数是怎么写,怎么变换,它这个这个曲率是不变的啊。
所以现在我们同学们就学到两个不不变量,就是参数化不变量啊,一个是几何连续性,一个是曲率啊,当然对于空间曲线呢是三维中的欧式三维空间的曲线,还有个概念叫老绿老绿,我们今天还是以二维。
我想我们把二维搞明白了,三维的东西只增加了一个空间的一个,就相当于是从平面把它拎起来这样一个度量啊,因为曲率是描述了啊这个切线的变化的速度啊,老绿呢是描述的在垂直方向的切线变化的速度啊。
这个我们就简单这样解释一下,好吧,我们不展开好,那我们我们啊回到我们光寸定义,这光的定义呢实际上是在那个在很多软件啊,是不是工业软件像kt啊啊就是打锁的法国打手公司的卡t啊。
还c d里面算是都都是有一些工具可以让大家来调这个,来设计这个这个啊叫光顺,所以我们现在当前学的这种啊北辙的曲线啊,这种曲线都是宏观的一些曲线的一些性质啊,所以我们前面所讲的都是宏观的。
那么对于这个光顺,它是一个微观的性质,并且在研究界虽然有些文章,但研究的非常少啊,这个因为比较难描述啊,我们后面会解释,因为它没有一个非常明确的一个定义,就是数学建议。
因为知识既然没有数学很明确的定义呢,你就不好去去去做数学建模,去研究它,对吧啊,但但这个不存在说啊,不是不是说就没人去研究,也有啊,只不过这个都是啊一些不同角度去定义这个光顺好。
那我们在直接直观来看方程是啥概念啊,好我一条曲线,我把每个点的曲率,刚才我们不解释了,这个曲率k啊,我们专业叫卡卡啊,在数学上它是个希腊字母教学经验卡普,但是工科学生可能大部分就念k啊,一样啊。
好那么这个曲率卡帕那个它的它的大小啊,那么因为呃呃这个嗯有些地方是ky,就是就是就是k等于零,我们还是用k吧哈那么这个k等于零的地方呢叫拐点和它的啊,那么就是有正有负啊,所以正负呢就是方向不一样好。
如果你把一条曲线的这个k把它垂直于法线与,沿着法线方向把它把它标出来,是不是每个顶点的这个曲率啊,哎就有个这样的图,反正你在学曲线上做采样产生蜜饯吗,你就画的这个多一点啊,你可以看到这种题。
这条曲线它取率呢时大时小时正十负对吧,好像曲率变化很多,有规律好,那我们再看这条啊,这个曲线你可以看到它那个曲率呢没有符号变化,全在一边,并且呢你可以看到这个这个这个长度啊,哎慢慢慢的增加增加呃。
在在在在这个减减少,它不会像这里一样的,一会儿增加一会减少啊,一会增加一会减少,还有变成负是吧,所以呢从宏观上来看,这两条曲线就是这个黑色的啊,这个这个黑色曲线你根本肉眼看不出来。
但它的曲率分布完全不一样,那么那么从从用户或者叫设计角度上来看,这条这条曲线比这个学校要要要要好,这个这个学生是不好的啊,就不够好,也不是说它不好就不够好啊,为什么不够好,我们后面会来解释它的原因好。
这左边这条曲线呢,你可以看到它取率有负有正是吧啊有负有正,那这边呢哎虽然有负有正,但它这个变化啊就变化一次啊,符号是它这里变化了两次,符号三次,这里还一次对吧,所以它它这个曲率老变符号是吧。
变符号什么符号一变,从正变到负去掉就发生一个拐点啊,所以在这个k等于零的地方叫拐点啊,所以拐点就不好管理,就像蛇一样的歪歪歪歪扭扭啊,弯扭扭会增加什么呢,啊我们马上就会解释好,所以这是哪一条船船的话。
像以前设计船是朝三个方向投影,这个方向正方向还有顶啊,还有侧啊,三方向,那么这个方向当然都有那个专有名词啊,就在一个船船型设计里面啊,就最有名词我们就不展开好,那么这个我们我们遗传。
那么特别是在船造船工业,造船工业也是国之重器啊,呃像我们上海有好多这个造船厂啊,华东啊,沪东造船厂,江南造船厂都是呃,他实际上是非常希望这个处这个曲面啊,这个线型啊要非常非常非常光顺,光是什么意思呢。
哎我在水里面去运行的时候呢,水啊对它的这个冲击或者阻力最小好,那我们这次就就就想起了光顺子号,刚才我打比喻,曲面上面歪歪扭扭,就是像蛇一样的这个凹凸凹凸,是不是会增加水的阻力是吧。
所以这个这个船型这个就不是好的船啊,所以至少在在这个这个物理上,很好的这个这个信任啊,所以这个啊无论是这种高精度的这种这种船啊哈还有像这个鞋啊,鞋如果我们这个鞋不不光顺的话呢,穿的就别叫啊。
还有这种齿轮啊,齿轮的话呢,呃如果你看像这里这里这是一个半径变化,就在这个凹的地方,如果这里面也是yy这个曲线绕来绕去,就是曲率变化很剧烈,那么对这个叫叫这个这个这个地方的尖角啊。
就磨损是非常非常大的啊,实际上是寿命就不长啊,还有很很多了,我刚才举了造船,还有汽车,汽车一个表面,你看有些好的汽车表面看起来非常非常漂亮是吧啊,这个大家应该有这感觉是吧。
你你在一个啊呃呃室外去看的时候呢,还有背景在上面的这个反光是反光也很好看对吧,就是不是歪歪扭扭的好好,那么那么光顺呢为什么在基本上教科书里面提的很少啊,那么这个一个是比较难度的啊。
这个叫做特殊的一个一个一个度量啊,就是在传统的话多次关注这种宏观的这种样条表达啊,光顺的就讨论比较少,再一个呢就光说的没有一个数学定义啊,所以它比较难啊,所以所以说你说你说可以用眼睛看吗,当然可以啊。
像以前木匠啊啊我不知道你们有没有见过木匠哈,我们小时候那我舅舅出的木匠,所以经常在呃能看到他工作的状态,他他没用用那个报纸报一下,磨以后就会用眼睛去看一下,从侧面去看看他是不是光光顺啊。
所以现在我才明白,这样用眼睛这样去侧面看呢,是看到光顺度啊,是不是啊,好那么在历史上呢也有不同的学者啊,这个书啊就是有赫赫有名的啊苏步青先生啊,所以苏不清先生是威名几何学家,所以我们这个学科啊。
图形学或或者叫计算几何,上次就是苏先生在推动,特别是在啊70年代到80年代左右啊,苏先生还那时候在世,然后对推动,因为里面用了大量的微分几何学,所以呢说不清对着我们这个学科的推动。
成为一个比较重要的一个呃小小学科,那就发挥重要作用啊,那么这个刘就是他的学生刘鼎元啊,他们当时也对这个光顺fl定义了啊,他认为什么呢,他认为曲线一定要c2 连续,而且它的曲率图啊。
知道什么是是嗯嗯没有多余的这种震动,variation就是没有摆动是吧,你如果摆的这个曲率啊,老是一大一小,一会大一会小,一会儿,一会儿负我一会儿正就摆弄很多嘛是吧。
而且比他这个意思什么曲率的分布啊啊尽量的啊均匀,就说不要老是变来变去是吧好所以我们刚才也解释了这个定义,它的描述,还有这个定义呢,a fireforeign farming。
也是我们c g d这个学科的啊,美国的一个比较资深的啊,也是前几年去世啊,那个他写了很多在关于我们这个学科的书,所以你们如果要去看这个啊,我们这个这个曲线设计的一些书啊,去看他的书比较好啊。
它是描述什么呢,他是说曲线是光滑啊,就是取图,这是参数,这是把把那个取点拿来看,就它的图呢就是单调性不要太多,一会儿正一会递增,一会递减,如果如果老是这个这个曲率图是这样的话,就不好啊,按它的定义是吧。
所以可以看到曲率变化呢不能够太过于啊,这个这个非删掉,你会增粉精选角啊,后来他过了十多年,他又自己提了另外一个概念啊,那曲地图只要是连续,这个跟它也有瑞士。
还有啊这个这个这个定义呢就就跟他们前三个不一样,这个定义呢它是用一种曲线的能量来定义,就是说我整条曲线的曲率的平方做积分,因为这个平方是大于零嘛,大于是吧,所以说你这个曲率呢就不能太大是吧。
因为它这个整体上是要积小,所以它是用一种曲线的整体的一个人能量的定义啊,也有人这样定义啊,这并且这种定义的方式啊,我这里练一下啊,好那么这个呢我们把它叫做全局定义法。
因为它是刻画了这个曲线的全局一个积分嘛,积分不是整整体全部累加的一个性质是吧,是曲率平方的积分啊,要要尽量小好,那么事实上呢那个呃我这里的十代呢是没有出现在任何教科书上的啊。
这是当时我们啊中国的一批这个学者啊,到实际工厂啊,就是下了工厂,就是70年代在一些像沈飞啊,西飞沈阳飞机场,西安飞机场,还有沪东江南厂啊,去工厂摸索出来的一套东西啊,所以后来我在浙大的时候。
就跟那些老先生啊,其中有一位还是呃这方面非常经验丰富的总方方先生啊,就是他们呢就摸索出一套就关于光顺的一些观察啊,就是说这个光束呢不是一个传奇问题,就不能用这个一个曲率的一个积分来描述它,不是这个。
因为曲率全区域描述的话,就像最小2x1样的,他每个地方可能都很小,但是呢但是对k啊的这个这个增长性它控制不住,就是说你这个k平方等于等于几角啊,你这个可能这个值确实很小,但k很不大,但是k老是不呃。
这个这个脑洞也不好是吧,它也不是局部问题,你不能光看一个点的k不行啊,一个点的可以只是描述它的在这一点是不是弯曲啊,所以他认为他是个大局部问题啊。
所以第一点第二点呢对cr就是就是当时苏不清先生给的这个结论,就是要cr上次不用cr啊,等一下我会给例子,就是可以比c2 要弱啊,不用这么高光滑啊,只要啊这个这个弱一点,还有一个就是这个这个分布啊。
分布就是我们要研究光顺,一定要从曲率触发,这也是对的是吧,你先因为曲率是这个曲线的这种啊弯曲程度的光速的一个放大器,所以我们去研究这个曲率好,那么他举例举个例子啊。
以及这个例子你可以看到这个y等于sin x sin x,大家知道是个周期函数,在x轴上下扭来扭去是吧,这个曲线是c无穷啊,那么那么这个曲线为什么不光是呢,是因为什么他有太多的拐点。
就是这个震动点就是震动数比比较高,一正一-1正一负是吧,就是从凸变凹,从凹变凸有一样的意思,就是正常数就是拐点数跟正常数是其实是差不多相等的啊,所以这种正能数太高的曲线不不不过光顺好,我们再看这个例子。
这个例子呢虽然它它的曲率图啊全是正了,没有穿越x轴就没有拐点了是吧,但是曲率图本身呢也是拐来拐去的是吧,就是递增递减递增递递减,因为这个是个抛物线,加了一个这个sin x。
所以就使得这个曲率啊也呈现这样的规律,所以说它虽然很光滑,是无穷,但是呢它怎么含有非常多的啊,这个这个递增递减的这个正正正正数是谁,不是yx本身本身是第一递增的啊,没有任何的震动。
但是这个他的两阶导数有很多的智能数,就是为了这个是两阶导导数图啊,啊只是一增一减,所以是这个这种曲线也不好,虽然宏观上看起来这个曲线都是递增函数啊,这是递增的啊,没有震动,但它的曲率图有震动,第三啊。
这个例子这个例子是在在这一点,显然连g2 啊都达不到,你看这个这个点的左边是一个这个小的圆弧,右边是这下一个是这个圆弧,所以两个圆弧半径不一样是吧,所以他们这个两边啊这个这个曲率是不一样的。
左曲率跟右曲率不一样,所以他一定不是c2 对吧,就还没还没还没达到cr,所以呢它它的这个连续性光环性就降低了,但它的曲率啊,它的这个这个这个变化呀不要太大,如果拆散的话呢,就是非常突兀。
就一个大圆到这里一下子过渡到一个非常小的圆,这时候呢也不光顺啊,所以这个呢什么不能发生太大的这个曲率的变化啊,在这个不连续点啊,不能发生这个,所以呢基本上他们呃这个在造船的过程中呢。
他们发现了这么呃几个啊那个现象吧,这个现几个现象呢,嗯从现有的呃那些以发表文章来看,所以呢在10年前吧,那我当时也参与了一些工作,就说院校学生是光顺的啊,第一它是c一加l一加l是表示那个就是l大于零。
但是还没达c啊啊就是叫叫变差cc连续好,那么首先拐点要少啊,这个跟以前有些结论是一样哈,第二个曲图的拐拐点较少,呃以前也有相对的这个呃就是发明这个定义也说了,他不能有太多的单调段嘛是吧,好也是一样。
那第四点呢呃没有太多的这个定义来说明,我们是加了第四点,第一点是光滑性减弱了,第四点什么曲率图的变化的振幅相对小,就是第三个例子,这个呢虽然他可能k不一样,就是两边的曲率不一样。
但是呢这个正负啊不能太大太大,就不光顺啊,小一点啊,这个差别不大,也是光顺的啊,所以这里面是这么这么四点是吧,所以知名人基本上从工程中,他们就放样啊,这个所发现的一些非光村的一些现象啊。
好实际是这里有个柱啊,就实际是跟以前的话就是啊这个描述是大部分机制,只不过呢我们这个比描述比比较比较全面好,那么这里有几个值,我我就用嗯,就这个叫正动数啊,那么这个是一阶正中数。
这是两阶正数验证正数呢就是函数本身的成本身的智能数,两件正常数呢是指这个曲率图的,就举例函数上就是这个近视以上的y y两撇,严格来讲应该是啊这个绝对的这个函数啊。
好那么我们后面后面会会会有用一用一个比较特殊的例子,就是y两撇呢约等于嗯啊我们在推导那个三次样条的时候,大家记不记得我们也用了这样一个假设,那个叫小脑洞啊,就是这个曲线的变化不是特别剧烈的时候呢。
这个实际上是近视y两撇就可以用来近视这个区域,好,那我们就快速讲一讲这个啊光算方法吧好吧,那么这个还记得当时在去找31条的时候,也有个假19 10度就是指什么呢,就是y一撇啊,远远小于一。
就是这个就是这个曲线的这个转角啊啊不会太大,那么这时候呢y两撇就等于k x啊,就是可以进食,我们在推到三次样条的时候不是发现了吗,如果如果这个它是三次,那么k呢就是线性是吧,就可以用三船角去推导好吧。
大家应该还印象有好,那么这个曲线光速方法呢,我我就快速过一下啊,因为只有做非常高精度,就是这种设计的时候,大家可能以后会用用得着啊,咱们大部分情况呢就是离散情况就没有这么细致的啊,好那我们就讲一下嗯。
第一个方就叫出光顺双生的,上是这这个几个步骤都是围绕刚才那四点来来做,好像这个就是什么,我就调整控控顶顶点,减少这个曲率的这个啊,定价第二个呢叫基本方式叫卡尺啊,也是调整,都是通过调整空空点点。
但是那是减少多余的拐点,就相当于一个尺把它压平啊,就是如果他拐的话,不让它拐,把那个词给给他,就这个哎呀,就是就是把它压平啊,这个目标目标呢是怎么减少第一类的这个啊。
正中数最后回弹回弹有点像物理一样的放放松啊,然后去看他的一些这个切变力的一些符号,然后去去减少,这不是减少了减少它的第二正中数就减少什么,减少曲率的这个这个正中数啊,具体我就不展开好吧对不。
这个我们呃毕竟是这个热门课的一个非常小的部分,我们讲讲它的结论啊,以及它的方法好,那么这个上面这个图呢是一个原始的一条曲线的一个曲子图啊,一个一个二阶导数求图啊,你可以看到它这里有正负变化对吧。
就这个地方还有这么多绕绕去的,那么通过刚才也首先要把它压压上去啊,啊第一步,第二步呢要把这些拐点啊啊来把减少这个往往下压这个往上提啊,这个往下压再往上提,就就让它有这样一个单调性啊,你可以看到没有。
就r上去了,是下来了,但是不要以呃在做这些操作过程中呢,一定要保证原始曲线不能发生很大变化啊,所以那边原始曲线的变化是有个界的,所以就是一般要保证在那个界上面这些曲率来调,就微调这些曲率啊。
所以可以看到他这个拐点还是有一个呃,有一个零的,这个是吧,但是这里有有123有三个拐点是吧,所以减少了两个,并且这个单调段啊就一就一段了啊,就这个就一下子就可以提升这个曲线的光程度了啊。
这是另外一个例子啊,也是你看到这个拐拐点被去除掉了啊,那么这里啊这这里的单单单调性提高了,以前是有啊,变高变低是吧,这样就变没有了是吧,好好那么这是第三个例子,也是一样。
你看这这个例子就是把把这部分的这个递增递递增递减把他干掉了,然后这个呢这个拐点把它去掉了,还有还有还有这部分这个智能数也减减少了,所以通过不在影响原始曲线的形状的情况下啊,当然不是说不是完全不影响。
在一定误差范围,是针对这个曲线稍微做一做一些变更变更,让这个曲率图发生很很好的一些调整,这是呃另外一个例子,这这两个例子如果抹掉右边的图,你们看路演根本发现不了左边两个图的区别是吧。
所以它们之间不是完全相同,但是误差非常非常小,但是它的曲率图你可以看到差别还是挺大的,像这个曲率图就非常好啊,你可以看到基本上这个曲率是个长子来,是个真正的圆,这不是一个真正的圆。
它取率再发生一些变化啊,只不过我们肉眼在这个空间上是看不出来,所以这个呢啊就是相当于把这个曲线啊,从原始空间变成了另外一个信号空间,就是叫做曲率空间啊,所以在有些时候呢我们处理问题的时候呢。
这也是一种方法论,在这个时原始数据上面啊,这个数据呢我们我们把它叫做观察空间是吧啊,就是这个这个这个数空间呢哎是一个特定空间啊,是个latent,reen space,唉,有的时候在这个空间去看呢。
它特征呢就很明显诶,因为曲率在我们这个问的问题来说,它策划的光程度哎,我们用曲率图这个这个特征来描述这个数据a就更好是吧,所以我们会去找很好的这个return space。
所以你要知道这个物理的这个叫做问题的背景是吧,那么我们人类发发明了好多这种sb space,像在这个问题里面是是这个曲率是吧,就在复利分析里面,从时域变到频率有些问题呢在食欲不好找不好不好不好。
那个研究我把它变变个变个空间到频域上去是吧,频率上去就能够看到频频率上的变化来使得这个问题,比如说去照啊,就说是那个一些这种相关的处理就更加容易是吧,所以所以我们要去找这种很好的这种特种空间是吧。
一来都不用去找了啊,反正你就构造好多颜色,反正让他可能是硬开,然后你你有你有一个input去去拟合它也行是吧,所以他们叫做呃非人为的这个特特征啊,这个映射啊,那么我们这种人为定义的话呢。
是这个这叫hand corpit啊,就是人工的特征啊,好我这里就顺带着解释一下啊,你们以后看那些文章也很容易看,只不过呢他把这个人类的知识都抛掉了,就直接用程序网络去拟合就行了,好那么这些是一些例子啊。
那个例子刚才也解释了好,那么刚才是解释了函数的,那么对于这个非函数类啊,它这个就不是有小脑洞的,这个假设刚才那个只是函数,但是这个我们一般曲线这种非非单词的这种曲线还是比较多的哈。
这个曲线显然就是非常非函数嘛,是参数型,那么呢我们在40年前吧,我一个硕士生王世伟哈,呃就我们就把这个方法推广到了这个曲线啊,是稀疏优化比较流行的时候啊,所以我们实际上是这个就是啊这个两阶差分量。
两级差分量就是曲率的导数的导数有两级导数,所以所以这个值不能太大,我们去描述一下曲线的这样一个量e一个一模一模的话,稀疏啊,就是一模具有稀疏性,近似等于临摹是吧啊,这个我也不展开啊。
就是就是当时一模临摹优化呀,一进一大堆,就是阴谋,什么意思呢,就是这个值啊,这个值不能够这个太多的非零啊,很多视频是吧,然后呢原来这个曲线呢不能变化太大是吧,这就是刻画原来曲线不要动是吧。
好那么这里我就直接讲讲一些结果啊,那么这个本方法就是我刚才提的用用稀稀疏优化来来做的这个呃,这个是原始曲线加上曲曲地图,这是这个这一行应该是取决在这个曲率曲率图。
可以看到原来这个曲线曲率变化非常剧烈是吧,被我们优化一下就减少到只有1l一降是吧,哦原来那些方法就是这是一种方法,就还没做得很好是吧,因为我们是一个全局的一个吸收优化系统。
所以系所以10年前的吸收优化还是比较强大的啊,现在研究吸收优化的人不多了,那么诶这是另外一个例子啊,你可以看到这是取地图,我们上次只要看看这一行啊,这这一行只要取地图发生了很很好的变化。
这个曲线光程度就达到了非常大的提升啊,好那么在曲面的光程光程呢就稍微难一点,因为刚才描述的都是曲线的y歪扭扭,曲面呢啊前面的微分几何可能我们下节课才能讲啊,就是因为曲面有两个方向,我们也前面解释过。
曲面叫张亮机,一个u方向,一个v方向,所以呢在这个那简单一点,在早年就是用三项啊,曲线方式就是把它分解成两个方向或者三个方向的曲线的光顺,然后再把它叠加,那样的话是有局限性的。
就是你没有把这个两个方向结合起来,一起考虑曲面在一个点有无穷多方方向是吧,而不是两个方向而已,所以你刻画的两个方向是不够的是吧,所以就后面就有人提出了一个能能量法啊,当然具体例来讲有两个。
一个呃这个呃最大的一个曲率,一个最小曲率,所以让这个积分啊,这个minimize啊,所以简单推广是这样,这样对话都都可以的啊,但是在工业界呢实际上是有一类曲面叫class a叫a曲面。
特别是在打索的这个卡特亚这个软件里面啊,后来很多cd软件都有这样一个全面类型,我和我们也有一些这个描述性的啊,就是他们有些说是g3 连连续的,比g2 还要考,你可以看到这个图g2 的话。
这个举例还有有增有降,g3 基本上达到一个比较稳定的这样一个变化是吧,那么还有一个检测检测曲率的一个非常啊,光速的一个非常好的方法是什么呢,就是画这种曲率曲图在一条条黑的白的啊,然后这个呢是反应等反应。
反应什么呢,反应呢光线打到曲面上,我们的这个它的变化,因为因为光线通过这个反向一反射上,就是变成了两阶微分量的一个属性的这个刻画了是吧,所以可以看到在一些软件里面可以画这种图。
你可以看到这个地方光只要只要介介绍线呢比较光滑,就表示比较好,如果如果如果这条黑白相间的线呢,弯弯弯弯扭扭,表示这里是很不光顺的,就这个局面必须改是吧,就是你只要把这个汽车放在放在室外有反光的地方。
就看到这里很不好看,外面扭扭是吧。
像像这个曲线就非常漂亮啊,你可以看到都是调的好好啊。
这是一辆汽车啊,大家应该认识这辆汽车吧是吧,就是你可以看到它的这个区域图啊,很漂亮是吧,出来的这个场景呢也不会呃,这里出现歪歪扭扭的地方啊,好当时呢我想就介绍到这儿啊。
我们也不是,我们可能也不是很多同学所关心的,如果有工业界从这个朋友啊在听的话呢。
这个产业界可能光顺还是要啊在你们的这个cd系统里面需要考虑的,好吧好,那我们啊继续啊,好我们我们基本上六节多课啊。
但是呢曲线曲面啊定义大家都非常清楚了哈,这个这个图我不知道以前有没有讲过的吧,这个图一拿来看,算是所有的影射,本质上都是一个我空间到另外空间的一个一个一个变换是吧,那么如果两两个都是实数。
就是一二函数啊,这个我们这个以这个重点讲得很清楚,如果是rm到r一是实数的多元是吧,好如果这个是变量是一维啊,这个是多维,实际上就是曲线,就是它的曲线是是个r n中的一个曲线,n等于二。
就是我们讲的平面曲线n。三,空间曲线n44 位中的曲线啊,只不过我们我们不行,无法想象这里就是m和n一样是吧,mmb变小就是从低位到高位,就是定义了高维的曲面是吧,你也可以把它叫超曲面啊。
我们r3 的情况我们已经讲过了是吧,如果是m大于n呢,这就是一种常态化啊,就是把把它相当于什么降维了对吧,参的话我们后面讲曲面差的话,就是把一个空间曲面啊,把它压平到二维啊,就是一个参数化。
所以这个降温影射一定可以把它认为是参数化,比如说你们做过的那个曲线拟合,你是不是一条曲线上的点,它本来就是一个二维的坐标是吧,你要把它变变成一个意味着意味着参数实际上就是说常态化对吧,是二维到一维。
对不对,好,所以你这些东西全理解与完整,学完这个课以后,这些函数都能看得懂啊,上次那个这个神经网络从不同维度降降温也好,升维也好,都在做这个事情啊,就是只不过他们的位数可以很高而已啊。
我们在实际生活中呢做一些设计呢只能在二维三维中可以看得到啊,好那么建模我这个课也是给大家一个非常重要的一个观点,就是呃我把这个虽然形式上看起来都是这样一个表达,实际上是有两种观点啊,一个叫叫啊。
就说我给定一些点啊,这个这个点呢是sj啊,这个这个点是采样的是什么啊,那么我希望用有表达能力的bi去拟合它,就像是求求解的另外一套pi对吧,然后去去拟合这样一个曲线啊,点啊注意这个是叫拟合啊。
以后又分为差值啊,毕竟啊等等啊,有的时候也要回归啊,在统计学里面叫回归啊,回归上就是拟合了,好好,还有另外一个呢就是说我们是什么,我们是把pi看成为为主用户,是去想去调pi。
那么这时候呢就需要一个非常好的基函数,这交互比较容易啊,像这个就是几何观点啊,所以计算数呢呃这个密集肯定不好嘛是吧,我们已经解释过,那么博士生产机非常好是吧,就是就是北朝曲线的这个基函数。
变压调节函数诶,它有局部性啊,它有什么很很好很好性质,所以呢从结婚年去研究这个design叫设计是吧,实际上很多早年的工作都在什么找好的基函数啊,一大堆文章啊,那么计函数上面再给一些参数啊。
让他可调等等好,所以你你们学完这课以后发现诶这个这里面两种观点上,有人用在两种不同的这样一个呃这个应用场景里面好,那么曲线的不同表达形式我们也讲完了哈,这个最简单就是我们高中就学过了。
那么要去画函数的话呢,要把它升一为是吧,要x跟fx放在一起,就是这个函数的曲线图我们已经没问题是吧,是有一个t一个二维的坐坐标啊,影视的我们也我们上节课讲了影视。
什么影视是一个z等于fx这样一个二元函数,就就这样,再一个就是二元的这样一个函数与z等于零,这个这个平面是z等于零的一个交线,这等于一的交线在这等2等1线在这是吧,所以这点二的什么f x y等于二嘛。
减2-2=0嘛,就是这个函数啊,这就是这个函数在这个二等值面,所以呢隐射函数什么是跟那个我们的高维曲面的一个零等值面啊,是这样定义的是吧啊,这个呢在在图像领域,他们叫level set水平集。
所以呢如果你们要去看一些图像处理的一些啊,这个这个呃方法的话呢,水平集经常会听到啊,就是就是隐私函数的这个一个应用,那么我们也刚刚接触过细分曲面啊,细分曲线,所以曲线有不同的形式表达啊。
这个除了这种稍微有点离,是离散的这个性质,它本身就是一段一段直线构成的啊,但你这个这个细分越多,这个片段越短就越光滑了嘛,所以就越逼近啊,就是k等于趋向无穷,它就变成一条光滑曲线,这个理论上都有保证啊。
除了这种心理本身天然就是一个线段表达了以后,这三个呢都是连续表达是吧,表达这个啊这个这个数学分表达性质都很都非常非常容容易啊,但是呢它的应用上面呢可能就有局限,因为很多情况下呢,我们我不去做拟合。
只有离散顶点怎么办是吧啊,那么我们在讲那个计算之前的话,我们先讲一个这个方法,大家可能脑袋中有有印象,这个方法呢在前几年也是我觉得也是比较比较方便来用的,就是我我们去呃,假设这个是用户这个形式点是吧。
想构造一下学生去拟合它是吧,那么我们要么就是反求控制,控制顶点是结构方程是吧,好那么呢这个方法呢很有意思,它通过一个在迭代,什么意思呢,我首先由它的构造体曲线好红的。
那么这个曲线这个每个点是不是有个参数啊,我我就度量这个点到它所对应的这个功能点,点一个一个一个误差,如果这个误差是存在的,那么怎么我就把这个q2 呢沿着这个方方向偏移一下,调一调,这个呢也调一调啊。
具体调多少就跟它等长就行了啊,啊这整整差,你说我能不能加个参数,加个比例,你可不可以啊,可以没问题,只不过呢你你你你后面的正面稍微要参数考虑进去而已,好好调完以后的话。
是不是就变成了c就这个q呢又变成那个紫色的,紫色的,紫色的,这个呢又可以定一条曲线,这个曲线是不是离绿越近了是吧,好不断的这样去度量这个误差,所以它是个迭代的构造方法啊,啊这个实现非常非常简单啊。
然后呢这里呢当然你要证明我无穷次迭代以后,我一定能够逼近或者差值原始给的那些控制顶点啊,那么这个方法就pia这个最早是我们这个啊齐齐老师,其中徐老师提出来,后面浙大利宏伟也做了很好的工作啊。
工作有很多学者啊,那么我们讲讲离散离散呢,因为这个从连续到离散呢,是我们这个后这个课的后半段啊,我们要重重点讲的啊,离散曲线去离线运算曲面啊,这个在计算机科学中实际上是所有东西都是计算的啊。
你可以看到计算机中012个位啊,表达一个beat是吧,我任何实数都是用有限位啊,比如说就是64位的这个实数,它也是离散表达,他不可能不可能表达所有实数是吧,它是实数的一个有量化对吧啊。
这个当然如果讲的细节的话,有部分的未表达指数,有部分位表示科学计算法,还有一位表示正正不好对吧,那你可以看到这样表达的话还是实数的一个离散,所以呢我们对对不能表达,不可能表达所有实数。
只是实数的一种想量化,所以呢就本身这个表达方面就带来了误差,尽量误差的话就会一定会带来计算它的一些精度误差的东西,所以为什么计算方法上面或者叫数学方法上面就有数值微分啊,积分啊,还有数值分析。
数值代数要去分析这些误差所带来的这个影响啊,所以在计算机学科吧,不仅是我们重新学科啊,这个采样啊,误差呀,离散的处处都这个无无所不在啊,所以这里面计算就非常重要啊,特别是有理论的保证的计算,那么就。
曲线零穿的是什么概念呢,就是我这个黑色曲线可能是一条画画曲线啊,上有啊,五五呃,这个非常连续的这个表达形式,任何一点我都可以算出它的值是吧,但是在我们计算机中呢不可能去啊。
呃这个这个用这种曲线去算东西是吧,所以我们必须把它呃采一些关于方向点,沿着这些点呢相顺序连成一些线,上就是多边形啊,那么我们用这个虚线呢来近似替代原来这个曲线,这个曲线呢就是多边形啊。
实际上它是本质上从数据上来讲,它是一个分段的一个线性,因为直线段都是线性函数,所以它是一段一段一段的线性是吧,只要我能控制住这个误差,比如比如这段这个曲线离这个线段还有啊,还有一段误差。
如果这个误差也不用不够小,诶,我就认为这个曲线能够带我这个原来的曲线,作为计算的这个这个元素啊,所以这个离散是是非常重要的啊,也是必要的必要性,在我这里从三个方面来来来讲啊,一个是渲染的必要性。
因为我们知道我们这个有没有学过同性,学101以后知道我们离散的时候呢,对直线段的离散是啊,就是填像素,大家都是吧,都有欧盟g2 的这个非常基本的这个这个你说我一条曲线给你,你要去做这个光栅化。
不可能专门为他去设计嘛是吧,除了一些呃这个非常特殊的圆,可以啊,少也有圆的这个方向画的非常高效的算法啊,那么除了圆的椭圆这种特殊的一般曲线都要把它变成线线段,一上线的去画就可以了,所以渲染的时候呢。
你必须把它就是你们现在呃前的作业也也也体验过了是吧,我虽然定义是一条光滑的北辙,你要去画它的话,你还是得人为去采样去变成一条条先转去画对吧,嗯还计算比较新,刚才我也提了。
你计算不可能用用这个连续的性质中去做,求更啊等等,都是把一条曲线离散成多条线段,然后用线段与线段的求交来算曲线与曲线的交点啊,因为只要他们那个线段你看来它足够的啊。
这个这个这个这个误差组合小就可以来代替这个曲线啊,因为本身在在呃中间这个应用中都是有误差的啊,所以误差是允许存在的,好制造必要性制造就是这个生态制造啊,可能啊以后会讲吧。
以后有时间我给大家讲一讲这个制造,制造就是拿一些刀轨去把一些这个比如说我我要加工一个语言,我就把这些东西把它把它把它有点像雕刻一样的,把它把它去掉,最后把那些无用的这个材料去掉以后呢。
就变成了我们这个弓箭一个圆啊,或者有一个我们北京定的曲线对吧,所以呢导轨在上面划的时候呢,切削切削的时候呢,由于机械限制,也只能走时先转变成圆弧所,在机械加工里面,工程师就只有直线段和圆弧。
所以你不管用什么表达一个方法,曲线最后还是给我离散成直线转和圆弧啊,所以这三个方法方面来讲都要去做第三法啊,无论是从应用渲染渲,你看嘛至少就用嘛计算计算就算算嘛,对吧啊,就是看算用都要去做计算,所以好。
那么一旦坐地上就是涉及到一个非常著名的采样定理了是吧,我的黑线就是原来原来信号好,我要采多少点呢,才是我能够从从这个红色点能够完全恢复出原来的信号呢是吧,这就是相同定理是吧。
像定义在上世纪新基处理里面就非常啊就证明了是吧,我采样的点也较多啊,为什么要比原来的这个频率啊,要要至少多一一倍的频率,就两倍频率的这个点才不会失真对吧,所以你看到什么想什么叫失真呢。
啊这个频率就是指那个复列这个变化以后的频率啊,好吧这个在101里面严厉旭老师好像解释过这个现象啊,那么北热曲线呃,在早年采样就是唉我每次曲线上就是用那个呃细分就是就是切切割啊。
比如说m之一我开始开始截1/2,就得了个点是吧,好那么我这里一个一半段跟这里半段就可以用这个这个多边形来表达,最终的话是要用这个弦跟这个用用用这个弦来替代这一段是吧,这个弦好。
那么你物质分一半的话就误差,当然大佬是吧,那么这里这个呃由于这个北京是比较好的性质,可以分析出来啊,我这个曲线你这个旋转距离啊,可以用这个控顶点与这个旋转距离啊来作为一个近视。
所以你你在做误差分析的时候呢,你只要算一下啊,这几个顶点,你这个弦的距离能够我的无法范围之内,你这个曲线我就认为就近视可以用这个弦来替代啊,所以呃我可以估计出离散离散层级,你什么性呢。
假设你希望我的精度达到十兆-6次方,马上算一下,我这样细分一般一般细分呢只要细分个八字就够了啊,所以他有很多定理来保证这个性质好吧,那么当然我们这里没有做的这么这么精致了啊,就是我们我高中同学讲。
你就反正沿着这个参数均匀才100份去画就行了啊,我们就不去研究这些性质了,那么嗯关于离散曲线的这个几何计算量,就是如果有联系表达,当然就就直接去算这个这个这个曲线的性质,比如说它的法向他的曲率。
因为因为因为你有表表达嘛是吧,所以你所以从冰箱调北侧的这个形式去比较好,最难的是什么,我们实际生活中就没有联系,表达好,我们只有一些离散点,我只知道这些离散点是从一条光滑曲线上采样出来的,这学生在哪。
我不知道,我只是怎么去去,你和他或者或者是,毕竟他我们认为是表达的这个采样点所表达的规律是吧,所以这时候呢就要用用用不同方法去去搞是吧,假设你已经拟合了一条一条曲线啊。
你就可以用这个拟合的曲线的微分量所定微分量啊,就叫拟合法啊,还有呢就是从计算方法来讲,就是说呃我我一个点的这个这个导数啊,是是相邻点的这个差分嘛,fx加d打t减去fx除以加个t是吧。
limit加到t趋向于零,就是定义了这这一点的导数是吧,所以呢我把这个东西呢看这是是个理想差分,用它的前前一点更厚一点的差除上这个季度,然后用这个弦的这个斜率来代替我的这个这个这个切线就叫差分法。
参法的是本体思想是什么,就是用连续型的这样一个函数,就它的一个离散形式来近视啊,事实上你可以把它看什么,看的是这个形式的一个一阶,再来打开数学上的东西,很多东西都是相通的。
你们只要把大一的数学微积分学学透了,这些东西都是这些知识啊,所以就是一些态度展开估计,那么你用一阶就是线性股b啊,估计用两阶就是抛物估计啊,抛物线啊,这就是精度高一点,我们去求最优化的时候。
你用这个梯度下降法就是一阶啊,叫梯度下降那个一阶方法,如果你用牛顿的话呢,就是它的两极性质对吧,好呃呃今天嗯那个呃还有一个知识呢,我想今天也还是讲讲调吧,他我他这里是虽然用的是一个北泽体,是三维的啊。
中间中的一个北泽就是用用了用了三个g函数,算是在平面上理解,就是这个这个理解,假设你有个图形啊,你你有个形状啊啊这个形状你想对它进行操作,再上上面呢就定义一个北北子二片是不是空空节点,就就这些。
你把空中空节点变一变,是不是这个这个区间就变了,变了以后这个图形也跟着变是吧,所以86年的思想就是这样,我用就北京一个非常简单的控制顶点,就是控制点不多嘛是吧啊,空间是在在这不多。
那么呢这些点呢顶多是n平方,n立马克里面的点呢是有无穷多个的话呢,那么我就通过控制它,通过这个组合就得到了是吧,好那么这个思想很很容易很容易懂,因为为我一个北泽的曲线,我以曲线为低是吧。
因为我通过这几个混合节点的新组合就能控制住这个点的位置是吧,所以我变它呢,自然这个曲线就跟我在变是吧,从我以前解释过,这里任何一个点就是这些控制顶点的一个线组合,组合的系数呢就是那个分散机所定义的。
所以呢他呢也就是用他的一些简单的来表示他好,我们这里就提一个词叫代理proxy,一个几何体或者形状可能很复杂,可能很多点,但是那我有一个比较简单的一个代理,只用四个控制顶点就可以来控制这个点的话呢。
诶我这个代理操作就比较简单啊,唉我我可以很好的操作这个代理,因为代理它的几何这个表达比较简单,可能只是有限的一些点我操作,那么通过这个代理呢再来控制这个曲线啊,就是啊一个一个一个关系,像这个是明白。
本质上就是一个注定坐标组合组合的系数好,我们下面来讲一讲,好比如说你要去做做变形对吧,我把这个区域变成这一区域,那么汽车变成这个形状啊,所以你这个两个函数你只要去控制这个曲线边界。
这个boundary啊,你去编辑完以后,里面就自然而然就跟着变,那这里就有个问题啊,我这个边界变成这个样子以后,我里面最后一点变变成啥了,变成哪个位置了,你要告诉我,如果这个告诉我以后呢。
就那么那么那么这个点呢跟他的关系就有这个关系来保持,就由这个点来把这个颜色拷过来就行了是吧,好或者这种编辑就是它啊,就是要把这个比赛斜塔把它纠正我,我把这个边界给它描述出来啊,我我去把它做一些调整。
把它调整,是不是我控制只要控制这么几个点就够了是吧,最后呢你要告告诉我啊,这里的1111个点啊,到哪去找这个点的颜色,把它把它填填填过来就行了啊,最后就可以编辑成这样子啊。
所以这个叫叫k就变base gk就容子啊,就就一个一个鸟笼一样的东西把它套牢,现在是他是跟北京的那个思想一样,就是我希望这个点啊是由兵线的,让那些点怎么一个关联,怎么和组合,是这这里假如有n个点。
有有n个组合系数告诉,那我在这里呢就是从同样用组合系数一样的这个点,就跟这个就对应关系就对应上了啊,就把相处拷过来就可以了啊,所以这个你要有一个方法告诉我一个封闭多边形内部的任何一个点。
跟我这个多边形的边界有什么关系,如果这关系给我找到了,那么我就可以去做这些这个应用啊,这个关系实际上就是这个这个本质问题,就这个问题啊,上次就是我刚才已经把这个问题解释清楚了啊,就是内部点。
你边界点边界点我们仍然用北泽的这个名词叫控制顶点,我是用这个边界线的少量点来控制我这个里面的像素啊,这关联关系啊,那么没关系呢,我们先一步步简单哈,假设这桌边形就三个点叫重心啊,就是三角形。
那问这个点啊,假设我这个点变变成在这了,变成这样一个三角形了,画的稍微不好,就别问这个点你到哪了,问题是吧,所以呢我只要有个办法,我里面的任何一个点就是三个点啊,这个p这个p能不能找到三个量。
阿尔法一和阿尔法贝塔伽马p3 能不能找到三个量,是我p是这三个量三个顶点组合,p组合呢减一是是一个是一个是一个two组合啊,因为阿巴贝塔干嘛都多带带带带精灵啊,就是作者哈。
这样的话呢我p1 p2 p3 都变了以后,我同样用这样一个同样系数去组合,那么这三个量的阿尔法贝塔伽马呢就是有个名词叫重心坐标啊,这周要去倒不难,难说是你首先要知道就是任何一点都能被这样表达。
这个这这证明很简单啊,这个表达就就就就不一定成唯一了啊,好如果三点不共线,你这个向量跟这个向量是不是就是线性无关,那么有关的话,那么任何一个向向量就能有两个线,有线性向量线有关向量给给它组合对吧。
所以就存在一个a和逼着一个系数把它带进去转一下啊,就就就就出来了啊,可能我不记得这个是一减a减b这是b,所以他们加起来就点一啊,所以很好证明啊,当然在三三角形的话,重心坐标这个几何意义也非常明显啊。
这个p关于p一的这个阿尔法等于等什么呢,等于这个三角形的面积比上大胆一些面积啊,贝塔呢是这个面积比上大弹性面积啊,这些性质都是非常好啊,就不详细展开啊,那大家以后要用的时候再去看一下。
那么四边形同样性质我是四个顶点的组,组合呢是唯一的呢就不存在了啊,因为在二维中三角形因为这个重用鼠标是表示啊,并且是唯一的,但四边形以上啊,及以上都不为一啊,所以我们要去寻找有没有比较好的性质的纵坐标。
因为它不唯一嘛啊,因为因为什么对这个向量由他们两个可以可以造成有他们俩也可以,这章程的表达有很多方式啊对吧,所以你在不同的这个这个向量表达上面,这个系数是不一样的,所以不可能唯一。
所以呢我们有没有一个比较统一的方式来定义,这样的话呢我也可以把重心坐标推广到多边形上面啊,再加看到我桌面形不删就行了,我这么多桌边形,我把这个顶点进行一些编辑,唉我这个形状就发生变化。
就就就就很好用了是吧,好那么在历史上呢,人们尝试找了好多好多各种类型的这个叫做重力坐标啊,那么重心坐标的这个英文叫barry sc啊,cos啊,那么用这个极坐标形式就可以去探讨这些性质啊。
我就我就不去讲这装备找到以后的话,就有很多很多应用了是吧,就是呃像这个就是三维中的这个笼子啊,以后我们还可能还会展开一点啊,还有2v现在终极坐标好,这个就是经常常常用的啊。
这个是早早年那个中心坐标定义它什么呢,它是这个这个点相对于这一圈中相对于这个点的作用坐标计算什么呢,是用它的cos品质加上这个角度cos的这个加起来以后,除以ri平方i就是这个距离。
min value叫叫平均值,这个作用坐标这个也是非常非常著名的啊,呃经常用的啊,就是用了这两两个角的这个tg i,那么还有一些用这种harmony调和的这个纵坐标是一。
是用了这两个角的一个口袋里这个值啊,那么不同的这个这个作用坐标啊,它都有一些几何背景啊,大家感兴趣啊,找到相关的这个书籍或者是文献去看啊,我们这里只是提一下啊,幸运这个是初级课啊,我们也不能展开太多好。
那么有了以后的话就做一个映射,做这个image wap变形就非常好就好做了,我用户呢只要关心它的这个几个导数也是一个点变一变。
那么你们的像素全部都可以映射过来是吧,好那么这真的是薛林薛林薛林是101里面讲过哈,就是呃gro雪顶,还有phone确定啊,还有用处极坐标啊,这个严林奇老师也提到过树林坐标这个概念啊,什么超限差值啊。
参差值就是为维持微笑曲线,我要20出一张曲面出来,像这种东西就是什么,就是隐函数的这个方法啊,只不过是用中心坐标来表达而已,因为本身就提供了一个这样的隐函数了啊,那么还有这也是一个差值。
差值实际上是把重心坐标的这个值给它可视化出来了啊,还有这个呃控制曲面控制局面我们没有讲啊,这个大家有兴趣可以继续看,只是差值四条空间曲线的影响,曲面好像在这里面本身就是构造了这个差值的一个准确。
这个系数好,那么我这里给一个链接,这个链接呢是啊瑞士的一个开后门教授啊,他他因为做这方面他做了很多年,所以他有个网站,只要每年出来的新文章,他都会挂在他的网站上面。
所以它这个网站上面有关于所有重点坐标的啊,我很老的文章到现在最新文章都有啊,如果同学们有兴趣,可以找到找到相关资料啊,所以这个我给你们个指针好。
今天我还想开个头啊。
我们下半这个学期就是这个课的下半啊,就在重点讲这个三角网格了。
就是啊曲面的计算对吧,我们曲线离散,我们讲了好多这个曲线的中心,像曲线理解好了以后,曲面也算一样一样啊,只不过多了个维度而已是吧,就多了个方向,就是如果通过从张机形式上来讲,就一个方向,另外方向。
但是呢到了流行上面呢,就是它很多顺序就没了,所以又造成他的一些困难啊,所以曲线曲线的离散大家大家明白了哈,曲线曲面的地上也一样,就是我们的离散也有必要性啊,因为渲染中我们只能渲染三三也行啊。
因为因为三角形的光光光光栅化在硬件中可以实现最简单的,所以我们要把一个右边这个光滑曲面上面采样好多点以后呢,把它连成三角片是吧,那么我们每个三角片呢是个平面,是不是一个线性函数啊。
所以我们也是分片线性逼近,分配现金啊,这个这个逼近啊,那么如果你要画上曲面,也是必须要这样采样去去画对吧,变成三角形,现在已经灌到这个gpu啊,gpu拿到那三角形就可以去做光栅化去做绘制啊。
所以啊你一个光滑曲面你也给我,必须给我计算成三角网格才能做绘制,当然另外一个计算求交也要啊,跟平面求教是最简单的啊,任何曲面去求交就转身平面跟平面求交啊,那么这个三角网格呢是个什么概念啊。
就是你可以看到一个二维流行流行曲面,上面一些点相互的连成一些三角形是吧,所以点跟点之间呢这个四条边相连,每个点周边呢有几条边呢,这个是不固定的,不像图像,图像的话就是个grade,它这里呢可能是五个。
可能六个可能是三个最可能,所以它是这个非规等结构是吧,所以从数据结构从角度上来看,他就是一个什么,我们在呃1年级还是无论什么语言哈,这个学数据结构都学过这个三个类型的数据结构是吧,一个叫线性结构啊。
向量啊,堆栈啊,队列啊等等啊,这个都是线性结构,它就是一个数组就可以存储啊,一种呢就是非线性一点,但是呢它也在某些情况下,它也可以变成线性结构,就是数是吧啊这个这个这个这个数不是数学的书啊。
是这个数啊啊就是呃大学里面每个大学里面都有一棵著名的树对吧,上面挂了好多人啊,高数好啊,那个这个这个数呢就是一种近似于现行,但是又是非限行是吧,所以如果他是个平衡数或者或者叫满速呢,就可以线性化。
这个叫非线性结构,就是图图什么呢,图的就是有一些节点v还有节点之间的,你这个编译相连,就构成一个这样的一个非规则结构啊,每个点的这个这个这个领域啊啊啊都可以不一样是吧,好那么这里就几个概念。
这个概念实际上是大家如果学和数据结构图一定都会学是吧,可能某些学校的老师为了为了简单,可能图就不讲了是吧,注意结构就不讲了,事实是你要做好后面这后半断的作业,或者叫网络处理图纸。
数据结构一定要非常熟啊啊就是这些概念啊,就是do什么意思呢,跟这个点啊,顶点相邻的这些边的个数叫叫叫do,中文叫do good deviance,还有什么面面就是呃一圈这样的啊。
这个相邻的边所构构成的一个面啊,这个面可以是多边形,也可以333角形,当然我们用的最多的是三角形了啊,我们这个其他的因为在欧美jo里面就虽然也可以绘制多边形式上,是到最后还是把它变成两个三角形绘制。
所以呢我们更多的后面是研究,以这个面都是三角形整形的这样一个形式叫三角网格啊,那么为什么纸图啊,还是连通图啊等等啊,这个我又不想展开了,这个图像本质上就是一个流程上的图。
本质上你把它拍平到平面上以后就是2d,这是3d,它就是一个平面图,把这个顶点啊,往往空间拎起来点印到了一个空间,这个点进的空间拓扑关系还是这个联系关系,所以说一个网格或者这个流行上的。
还有二维流形上的一个三线网格,本质上就是个平面图,只不过平面图的顶点就有三个像三个方位的坐标而已,我以前也解释过,我一个曲面,你放在我三维空间中,它本质上是一个二维的流行,所以它本质上就应该拍屏。
应该能够突破通一个平面的这样这样这样的结构,所以呢你可以把它看成是一个吗,是一个中的一个图,把它嵌入到r3 中,因为阿三是观察空间,它它这个正式的一个空间的一个啊,这就是参数曲线一样对吧,曲面好。
那么平面图这个也就这个概念,就是任何一个曲边图都可以突破突不同。
配一个呃这个直边的啊,这个平面图,还有这个我们后面讲啊。
那么match这里有个概念叫做流行,这里稍微解释一下流行什么意思呢,你可以看到这个图啊,右边它有这个三角形,是你这个这个三角形对吧,它这里又长出三角形来,就这边有有三个像三角形相邻,这就是非流形。
就这种这种形式化,就那这个边呢它这边有相邻的两个面,这里还有个面啊,就是非流行,那么什么叫流行,流行什么意思呢,就是我对任何一个点它的一个无穷小的领域,它突不同配一个二维的一个圆盘,是啊。
每个点如果都这样的话呢,它就是个二维二维流形好,那么这个点你可以看到它无限小领域,它不是有三半对吧,不可能跟这个圆盘一样的,只有就只有一半或两半,所以他就最流行啊。
所以非流形结构我们在我们这里后面都基本上都不处理,如果处非中性结构,我们把它去掉,干掉它啊,这个或者把它处理掉啊,还有另外这种非为零结合呢是这种啊,就差的一圈呢是变变成了两半了是吧,两半不相邻的啊。
所以它也是非洲行,就一个顶点,这边长,现在形象已经出来,这边这边又长一上线引出来啊,就是中间有两一块是空的啊,这也是非流行啊,这个叫非流行顶点,这个叫非流行边啊,基本上都是非轮结构。
都是这些结构的组合好,那么在我们后面就都假设这个是流行的曲面,因为流行里面好好那个啊,就相对会容易一点啊,我们这个平面图的概念,大家这个同学们都有了哈,有了以后呢,呃这个插的话呢就很好理解。
那三个本质上就是把空间的a2 维图映射到一个平面中是吧,这个后面会来展开。
还top呢是突破学的一个概念,就是简单理解就top这个一个环啊,就中间有个洞,就top是音,这是两个洞,top 12就亏格为二,叫奎格cas啊,我碰到的时候我再解释吧。
还有可定向,可定向在我们这里流行结构,基本上每个三角形的定定向要一样,比如说这三角形大家都是朝着顺来数,这是第一点,第二点,第三点,那每个相就是比如说呃法则的话都是大拇指是朝抄底的话。
那每个月每个三星都要这样统一的,这个叫可定向对吧,但是非常可肯定向呢就是指它有一个一致,这个朝向就反向,像莫比乌斯乌斯带就是非可定向的思维空间中,就是那个蓝屏啊,啊在这里有莫比乌斯带,这是蓝屏。
就是就是非镜像的啊,这些一般我们在呃做做问题过程中极少碰到啊,碰到的时候我再再再来解释吧,啊今天就不详细展开,还构图啊,这个下下节课来解释,下节课会讲delay跟文案图的关系好。
我们呃后面几分钟快速的过一下这个,因为这个东西你们要去做这个东西,必须要数据结构要非常非常熟啊,那么最结构啊就是一个问题,就是你给一个网格以后,你要这些东西呢,这些信息要尽快给我找到啊。
比如说你你要快点跟我找到,我给这个点给你,你要找到哪些边跟它相邻,哪些景点是它的一领域啊,哪哪些面是跟它相邻啊,还有我给一条边,你要快速找到哪两个面是我的李宁面等等,就是这种情信息有利以后。
你就可以做那些操作啊,不管是简化也好,还还是那个处理也好是吧好那么嗯嗯那个税税结构呢怎么存储呢,你有很很多方式啊,就是那么到一个好的数据结构呢,就是你时间和空间都要砸这个平衡啊。
这个在我们做算法的过程中呢,大家都很清楚,做算法过程中,你免费的午餐是吧,你空间和时间永远是一种矛盾啊,这是是一个是一个平衡去off啊,如果你存储量很多,如果你每个点的这个一领域或者叫淋浴的面。
淋浴的边全存下来了,就占了很多空间,我在运行的时候呢要找马上就可以找到索引一下是吧,但是那但那个是用空间换换时间,如果你不存,你要去临时去算啊,再去或者是搜索也可以,那个时候是什么用啊,换空间你存的少。
但是算的多啊,所以这里面什么叫一个好的数据结构啊,没有定义啊,就看你的应用啊,大家应该有这个体验是吧,你用项链好还是用链比较好,这两个都属于线性结构对吧,那么下是什么,是这个存储空间是一致的。
所以他找元素非常快,也就一个投地址骗一下就可以找到,但是它不是不善于什么,不善于删除一些元素,如果你像三这些原则主要移动是吧,所以列表的好处,所以说你说这两个数组好呢,还是向量那个列表好呢。
取决于你的应用,如果你应用里面大量的涉及到删除增加,那你用链表当然是首选是吧,如果不存在就用数组是吧,嗯好所以呢这也一样,所以一个好的数据数据结构啊,就看你这个应用是是面向什么操作为主啊。
那么你要定一个网格,首先要定义它的边啊,然后再定义它的边,或者或者或者面就可以定义好是吧,所以啊很多不同方法我这里这里找找找找几个啊,那么呃一个比较多的一个o o b g格式。
在历史上有好多不同软件就有不同的格式啊,那么o p g格式比较容易懂啊,所以它有一个v开头,这个我们讨论是一个txt格式的,当然也有二进制格式的啊,我们用txt来为例,它每一用一个v表示顶点。
那么后面加三个float就是表示xyz坐标,所以这里有四个点,那么来打头的是123,这个序号是从111开头啊,它不是从零开头,所以123什么什么表示这三个点连成一个面,12表示一表表示142连那个面啊。
所以大家应该能猜猜出来这是个什么东西是吧,有四个点,有四个面,就定义了一个四面体啊,啊因为四个点四个面是最简单的集合体啊,四面体啊,所以它它这个这个规则非常简单啊。
啊一个小程序就很容易把这个文件读成一个网格格式啊,当然我们不用啊重复的去写,我们这个框架里面都写好了,很多框架里面都写好了,所以啊读货币界也不是那么容易写的,因为还有好多材质group的信息。
你要去解析的话,还是要花不少时间,所以呢我们建议大家先用一些成熟的框架啊,去先对它做进行一些处理啊,具体涉及到什么读文件,什么怎么读啊,格式怎么定义啊,先不用管,因为如果管它的话呢。
你这这个这个这个焦点就错了啊,你先先把它用起来好吧,就是这些读文件是一个基本东西,就像有些同学学同样处理一个错误方法,就是怎么去写一个jpg jpc的一个这个解析器是吧,花很多时间没必要。
你先把它处理先做,做好以后有时间再去看看它的解析器好好,那么具体的这个我今天可能不一定想展开啊,那我想这个大家都能看得懂,就是你存这个几何一个网格啊啊有很多方式,有些是用矩阵来存啊。
像这个这个叫临界矩阵啊,就是我存了一些点,然后我在再存一些面,那么它用一个这样一个大的系数矩阵去存,如果那个点之间有有连接的,就是存一啊,先有没有连接去存零,所以它的存储空间是很浪费的。
但是它是系数表达啊,吸收存储可以也可以啊,有一些特殊方法,但它就是任何一种数据结构,注意它的利和弊啊,这个这种数据结构能做这个另外图结构可能就不好做对吧。
所以呢这个我就我不去讲。
好这个用的最多的是叫做双边处理结构,叫半半边,半边这里写错了,半边叫half edge,就是一条边呢,两个半边一去一回,那么每条半边里面呢它存在什么,从哪个点出发,到哪个点结束它,它插在一个面。
那这个半边呢从这个时候右边啊少点墨边,那么这个面好,那么一条边就有两个半边的,还另外和这两个半边呢也有索引,我通过这个半边马上就可以找到这个半边,所以你说我要找到这条边的两个三角形呢就非常非常快。
因为它里面到处都是我指针快速索引啊,那么我们这个呃这个我们助教啊自己写一个这个框架啊,有有特别有特别这个框架那个中文是无尽啊啊对,那么这这个这个这个这个这个框架呢,就是我们里面已经帮着你们写好了啊。
这个网格的数据结构啊,用的就是半面结构啊,这个在我们作业组织上面就会非常详细的文档,告诉大家怎么去读文件,怎么去去去里面拿着这些数据好吧,那么这个框架里面的算是里面有两套数据结构。
一直一个数据结构就是这个半面结构是为了做计算的,因为每个点你去找他的零点啊,信息啊,这个计算数据就是怎么找到这些相关数据来做计算,这个是要高效是吧,然后渲染的渲染实上就是把煤炭引擎换到gpu中是吧。
所以它会自动的帮你转成你要做渲染的时候呢,扣那个渲染的函数,它就会帮你去去去转成渲染数据就灌到gpu的这个流程中就可以了,好那么今天呢我呃我不布置作业,但是呢可以大家利用这一周啊去玩一玩。
这个有些同学已经玩的很熟了啊,这个这个前面几个作业都用它做,那么只不过以前是运用它的一个画板的一个二维的这个啊,i的一个这个界面没有用到,有toio本身的我们jo这个界面。
所以大家可以去读一个啊o o b g来你们看一看,玩一玩哈,里面反正光线的光照啊,纹理啊都可以去设,我建议大家先不要去关注这个纹理啊,就是我只想看那个几何啊,那么你不妨去去去做一个小的啊。
反正是试试看对吧,我对这个每个点呢,我对这个网网格的每一个点,做一个小小的脑洞啊,脑洞是吧,就这脑洞呢是沿着法向脑洞一个量啊,你试试看,反正就是那么为了做这个事情,你是不是要找到这个顶点的法向是吧啊。
你要算反向,反向可能没结婚给你,你是不是要找他的相邻的面,你用相邻的面的反向平均来进行这个反向就行了是吧,那么一种做多少呢,你是个参数啊,你你写个ui看看能不能调是吧,哎就一个阶段。
简单的这个这个先熟悉一下啊,我们我们不作为作业作业,下个星期我们在布置啊,所以这个星期呢是前后两部分的过渡,后面的先把这个框架玩玩起来,但玩框架的话你一定要有任务,这是我不明确把它作为作业的形式。
这个下节课我会把这个作业的详细情况给大家再介绍一下好吧,因为下节课我们会把这个啊网格的smooing的原理会会讲的更加细一点,这样的话现在你们会会更有利放肆啊,那么今天我想就这样开个头,好吧好。
那么今天时间哦已经已经超了两分钟,也差不多了,好那么今天就呃对三维的这个离散网格,就是三角网格做这个开场,那么后面我们就后面的大概67次吧,如果后面讲过,我们会增加到89次。
把这个几何处理就是网格处理的呃,大那个主要内容给大家介绍一下好吧,那以后以后你做这种离散的网格处理的话,就基本上就可以上手了,好那么今天就到这里为止。
GAMES102:几何建模与处理 - P8:离散微分几何 Utopia框架介绍 - GAMES-Webinar - BV1NA411E7Yr
好那个时间到了啊,同学们,我们现在今天晚上的课程开始,那么今天的主要内容是讲一下那个就是离散曲面,就是三教网格上面的一些微分几何量的一些计算啊,曲率的计算,这个在后面的一些处理啊,或者经常用到啊。
是非常重要的一些东西,所以今天会花一节课啊,先讲一下这个微分几何以及它的离散计算一些方面的东西,那么之后呢我们会啊布置作业,然后是基于我们自己的一个utopia这样一个框架啊。
会做一些介绍,好那么我们从上节课开始已经开始进入这个三角网格曲面好,我们这个课的前一半呢都是讲光滑曲面啊,有这个基函数啊,连续函数构成的一些曲面表达,曲线表达,那么在实际应用中。
现在特别是扫描仪的应用啊,这个广泛应用,那么我们更多的得到一些点名点的话,可以看到是曲面上的一些点的采样,那么这样点呢就构成了那个三角网格,那么这个三角网格呢你可以啊点比较多的话呢,就踩踩得比较密。
所以三角网格比较精细,那么那个呃如果点比较比较少好,那么就比较粗糙啊,就如这个兔子这个曲面,它本身这个曲面是存在的,但我们不知道它的方程啊,这个我指着它的采样啊,采样以后呢。
我就构成右边这些这些三小网格对吧,当然你也可以用我们上呃,对光滑函数这都没问题好,那我们现在就假设是这种商业网格。
那么这个社交网格怎么来理解啊,那么这里有两个观点啊,这个观点呢就是说这些点啊,就是左边右边这张曲面啊,就这些红点是从往这个曲面上采样的,然后呢我有办法把这个红点相邻的红点把它连成三角形。
就构成一张也没有缝啊,水运行的这样一个呃叫做呃分片线性的这样一个分线平面,这样一个表达,所以这种这个绿色绿色三角形啊啊都是一个个连起来的,所以他呢就是原来这张曲面的一个逼近,而每个三角形呢是一个平面。
所以我们也把它叫做分片线形啊,那就是分屏线性递进,所以呢你从曲面的逼近论来看,就是它是哪一个更简单的,第一次的这个曲曲面只不过是只有c0 连续啊,他cd都没有,因为它不可能光滑是吧,这个只是拼拼劳了。
所以它是一个分片线性逼近函数,去逼近一个那个光滑曲面,那么你从泰勒展开的角度上来看,你也可以看成这个这个平面片是在这这一点啊,某一点中的一个一阶展开,所以呢它是用这样一些局部的平面片去逼近了原来的曲面。
所以事实上去曲面是一个不进啊,所以它是一个低阶的啊,低次的就是一次的这样一个啊形式的逼近啊,所以你也把它叫做离散曲面好,那么另外一个观点呢,诶我可以也可以把这个曲面啊,它它是上本上是一些个这个图啊。
这个graph它只是有一些这个点和线和面构成一张graph,就像我们数据结构学的这个graph,那么在平面上d完这个graph以后呢,我把这个点啊再把它意识到空间用某一个点位置,想在这个点把它拎起来啊。
叫提升,提升到另外一个空间,这个在拓扑学里面叫叫叫提升,就是这个点啊,我这个拓扑结构点界面的联系关系是不不变的,我只是把顶点啊,把它把它变到三分钟,把它拉起来,就像这样话的这个网啊,就像一个渔网。
我把它拎起来以后呢,就变成一个下垂的,或者说这样一个曲面形式,当然我这里拎的时候是是比较简单,是一个抛物面,但是你可以想象一下这个一些点,只要只要有个函数去映射到空间,这个就形成一张复杂的曲面。
所以呢它本质上它这个这个曲面啊,就是这个二维图的一个空间映射,所以它本质上它是一个二维流形,因为它本身就是二维的嘛是吧,所以这个曲面也应该是二维的,那么因为它只是顶点位置发生变化,它的这个三角形啊。
这些边啊,假设都没有发生太大变化的话,所以他还是本质上是二维流形,所以它可以看到是一个拓扑学里面的一个啊,从低维到高维的这个这个嵌入啊,就提升,那么这个从另外一个观点来看的话。
就是这个是它的一个参数域是吧,因为我这里一个点对应的中间一个点是吧,这里x y z是这里的uv的又一个函数啊,所以它是一个参数化好,所以无论从哪个角度看呢,它反正就是筛网格。
就是二维流形或者叫空间曲面的一个离散表达,那么要去掌握这个三角网格的这样一个呃这个操作啊,所以这就涉及到我们的数据结构,这门课程我相信同学们在大学里面都学过啊。
我上节课也提了一下与数据结构主要三大数据结构,好线性结构啊,我们以前学的那个数组堆栈队列什么什么啊,这个这个呃呃这些呃就是说属于数线性结构,还有树树的话就是呃非线性了,但是呢如果树满足一定的这个关系。
它也可以表达成线性,所以它是介于非线性和线性之间,最复杂的就是这个图啊,所以一个图呢是什么一个顶点集合,就这个在数据结构里面叫叫顶点,叫node是吧,那么今天跟顶点之间呢就连一些边啊。
那么就是这样就构成一个图结构是吧,这个图结构很很有用处啊,你可以在生活中碰到好多图结构,比如说你可以啊将这个城市道路的十字路口和入口看成这个节点,那些那些路口跟入口之间的路变成一个边。
那么这个可以是一个城市地图的抽象好,那么那么你从一个点到另外另外一个点啊,这个找一条最早最早路径是吧,就要利用图里面的很多算法,叫最短路的算法啊。
这就是你们生活中啊天天要用到的这个导航是吧啊就这样就这样图啊,那么如果把这个图这个节点看成是一个人,人跟人之间这个边看作是一个关系,比如说是认识和不认识,那么这就是一个社交网络的一个图。
那么从这视频呢也可以去去挖掘很多社交网络的一些信息啊,也也也要要利用一张这个图的结构啊,当然从研究论文来讲,我这篇文章set了引用了一篇文章,那么这一页也可以建立一个图。
所以所有的论文都可以建立一个图啊等等好,所以对我们这里来讲呢,我们这个图呢这个顶这个漏着呢就是网络上的一点啊,那么这个所以顶点集合表达空间的一个点的坐标,那么边就是仅仅跟节点之间有连接关系,就一条边。
所以一条边的话基本上就是这个v i和v界的一个这样对啊,这个好,那么他们有顺序的话就叫流向边,没顺序的话就是无相边啊,你f呢就是面积的集合,那么在我们这里,我们这里面假设都是三角形,如果出现了多边形啊。
多边形这种结构我在在我们这里非常容易就把它多边形,可以把三角化一下啊,你可以看到左左边这个这个网格做四边形,那么只要中间偏下边就可以变成三角形,所以呢任何的多边形网格都可以转换成三角网格好。
所以我们这里呢就比较特殊,只讨论三角网格,所以多边形网格也一样的去处理啊,这个难度没什么太大,所以呢这里可以看一下顶点边和面是不是给一个网格都要给出来呢,大家可以想一下啊。
比如我上节课介绍的这样一个格式叫ob接格式啊,或者后来变成alex或在autodesk收购啊,但是他早年用这个o b j格式比较比较简单啊,就是v一开头就三个实数就表示了顶点啊,那么这里有四个顶点。
那么f开头表示表示face就是那个三角形好,12年连个面好,所以这个o p接口是非常容易啊,这个理解,那么这种格式呢就是它这个最早的时候就只有这两个信息,那大家就会问诶,鞭策马跑哪去了呢是吧。
你可以可以很容易想啊,就是这些呃同学们要慢慢慢的这个掌握起来啊,我给定顶点跟面,是不是我可以推出边,因为每个三角形的这个边一二肯定直角边,234条边,131分一边对吧好,对这个三角形来说,144条边。
424的边,所以由此这个face这个这个面一定能推出所有变,当然这里可能会有重复啊,因为可能会有两个面共享一条边,所以这里重复把重复的去掉就可以找到编辑和好,同样我们来推学啊。
假设我只给你给给定额这个顶点v和一能不能推推出f是吧,好我我我有有些有些文件可能是我只给出给定这个这个这个顶点坐标,再加上边的连接关系,比如这个图好,你可不可以推出面,当然可以了是吧,好我举例。
那这个从一个点开始叫边,你你可以可以可以找这个编的下一个跟他相相邻的边边在哪啊,同样这样一个找找到我找回来以后,这个面积面就出来了是吧,所以由边跟点可以可以找到面的信息啊。
好那么我们再反过来一和f能不能推出,这是v呢啊,所以这个因为他们两个都错过信息,v是顶点信息,所以v v必须要先给定啊,所以要要这个是不行的,好好那么那个多边形网格刚才我讲了,就我们这里挺好的。
三线网格,还有一点呢就这里叫做非流行非流行的流行上学和我讲讲一点点,就是就是一个曲一个呃,这个这个曲面任何一个点它的无穷小灵域,它要就是它呢就拓扑同胚于什么,那么这个叫非流行啊,比如这个点是吧。
要走一圈啊,它这里有个面,这里有个面,就就不连通,所以它就飞就行,还有还有这个点,它是两个圆锥的一个顶点是吧,你你你转一圈,空间中转一圈,发现它它有两个面啊,本质上这个两个是等价的。
还有这个呢这个边呢有有三个面,上次你这里这一点边上的任何优点,转一圈发现它有三个面,它它不是这个两个两个面,所以会流行,所以我们这种这种流行啊,非中性结构呢,我们在后面的课程里面,我们都不讨论。
因为这个是比较麻烦的事情,因为我们的微分几何也好,还是我们数学也好,都讨论的是流行结构会比较比较顺利一点啊,分分析结构怎么办呢,那么把它变成流行结构,所以你还有一些工作呢。
呃是把非洲性结构把它变成一张流行结构啊,就比如说这个把这一段就变成两张曲面,这一段也是变成两段是吧,还有这里呢把一一条一条边哎,这个面给它去掉,就变成一个流行啊等等好那么这里稍微提一下好。
或者所有后面未来更复杂的操作,这个这个啊进行运算啊,所以你必须要掌握这个这个图的数据结构,在数据结构那个课里面呢,我们讲图,反正也呃大部分的老师在大学里的课程都不会讲图啊,不会讲图。
所以呢我们必须要掌握,那么在图形学里面啊,这个上节课那ppt后面有好多这种不同的表达,都是不同的数据结构表达啊,所以这个哪种方面呢都没有完美的啊,那么我们这里呢呃介绍一种在大部分这个啊这个呃利用里面。
或者是我们在做项目过程中用到的一种比较通用的,或者叫比较常用的数据结构,叫半边结构,那半边结构它的思想呢是一条边啊,它变成两个半边啊,它虽然说它是以边为中心的一种存储啊,一条边变成两个半边。
那么那么这个半边存什么呢啊,所以一般会存一它的一个这个这个墨顶点,还有它的它的一个下一个半边,以及它它的一个面啊,那么这里啊网上可以找到很多很多这种非常详细的关于半边结构的,一个数据结构的介绍。
好我们的我们提供的框架也是以半边结构为主啊,大家看一下代码好,我们看一下下一页好,我来介绍一下好,这是一条半边的数据结构啊,你是用一个结构也好,还是个class啊,用class的话。
你这里可以可以封他的那个很多接口对吧好,那么我们这里讲暂时就是一个纯数据好,那么这个一个一个一个这个哈佛edge啊,就是存什么存了一条一个顶点是吧,它指向了一个顶点,还有他的一个另外一个半边。
就是它的一个pair,就是他的另外一个半边,还有他的一个face,还有他的下一个边,所以它只存了那就是远景点,还有另外一个半边啊,还有这个他所相邻的face,我们拿这个图来看的话。
比如说这个这样一个半半边和这个半边是两条半边啊,那么它存存了一个这样的一个face,就是假设啊我们人从这里往往这里走,假设是从左边那个面,所以左边那个面它有一个这个指针指过来是吧,还有另外一个半边。
还有下下一个边都会存好,那么它就存这么四种就就够了,那么对于顶点的话,首先当然是要坐坐标是吧,那么它呢这个顶点呢只要是存它所在的半边就行了,好关于面的话呢,只要从它的某一个半边啊就够了。
好如果信息存了这么多,大家就会问我们能不能很快找到我所需要的一些信息呢,我们来看一看啊,好我们来看一看下面这个就怎么来通过灵异关系来查询啊,好那么我们来看由一条半边找两个顶点,怎么这么早,对吧好。
你可以看到这个半边只成了一个顶点,它还还有另外一点点怎么找呢,很简单是吧,那就是这个一个顶点找找到了,还有什么,还有它的配料在顶点是吧,因为他的另外一个半边的手手顶点是就是这条半边的未定点对吧。
所以这么两个语句就找到了这条半边的两个顶点啊,所以这个要找非常容易找,就就就这个这个两个指针就可以找到好,另外我要找到这条边的两个邻面,同样是吧,这个边已经存了一个零里面。
那么它的pr里面就是它的另外一个里面是吧,一边一条边啊,只有两两个里面是吧,这个半边存存着这个这个半边存在这个是吧,所以两人通过他的配偶就可以找到别的星系好,那我们来再看由面一一个面找所有的半边怎么找。
好好这个这个这个半边在这是吧,这个这个找到一个这个面,找到一条一个半边,因为这个面只存了一个半半边好,那么由这个半边呢不断的去next,因为next就是它的下一下一条,所以这个next的那个edge呢。
如果不等于这个分子edge就循环啊,这里就可以把这个这个这个半边就可能把他所有找到,就通过这样一个循环就可以找到所有的这个edge,直直到回到了原来的这条边啊,就就不用找了。
所以一个循环就可以找到所有半边好,我们再看再看另外一个有顶点,找所有半点好,因为因为一个顶点可能有好好多条边是吧,我怎么找所谓半边呢,同样啊,我从一个一个边开始,从他的pair去找next。
就是他的一个pair是吧,找他的next,那么他他再去找下一个顶点,就想找下一个啊,这个edge pair next就找到下一个半边是吧,那么下一个半边以后,他就他就不断的去去找他的下一个顶点。
就可以找到好,那么这里呢是有一个链接,当然这个链接很多了,就会有不同的这个网页都会介绍这种犯病结构,那么有一些不同的这个库里面的半边呢可能会有些差异啊,会有差异啊,这个有些可能会多存几条信息啊。
但是基本上思路都是这样啊,这个是相对比较成熟的一个数据结构,那么那个现在这个时代,那个你们也非常幸运,不像我们当时读书的时候,什么库都没有啊,连互联网都没有。
所以很多几何处理或者网格处理都要自己写自己的库,他现在呢非常好,就是现在慢慢开源的一些东西啊,所以呢网上有很多很多这种啊这种开源的几何或者网络处理库啊。
那么c g a l是一个比较大最大的一个也是最有名,工业商业化用的比较多啊,那个i t o呢它不是用半边,它是用那种啊,应该是这个举证啊,就是点跟点之关系啊,但是他呢里面也就是无论怎么存储。
它有很多方法能够很快适应到别的地方,它就很容易操作,并且呢它也封装了这个python的接口,所以如果同学们那个对python更熟一点啊,对c加加是赵睿不是特别熟,那么用它可以去做很好的这个工作啊。
在上个月china graph上面,我们也请了这个lip l i d l的作者来做一个totorial教程,大家有兴趣可以去找一下这个视频啊。
那么还有match lab的open match都是一些非常好的一些开源的一些工具,还有pcl,pcl是处于点点音比较比较好一点啊,chematch是也是比较有名的一个啊。
这这几个都是只不过这个呃稍微小众一点,但他们都还是啊这个这个有不少的用户,所以同学们呢这个可以自己去尝试啊,可运用这些库,这些库房的代码都有,你可以看它的代码,从这个开源库里面也可以学到很多啊。
编程的技巧,算法的一些技巧啊,那么我们这个课程呢是用的是叫utopia啊,但我们中文是叫无尽框架啊,这个是由我们的助教张涛同学自己搭建的啊,自己也也这个相信做了大半年吧,将近1年的时间把它搭建起来。
也是希望这个给同学们在这个这个框架呢比别的框架稍微小一点,但是它这个有很灵活的,特别是类似于unity这个游戏引擎的一些机制啊,等下我们会有啊,张三同学来介绍这个框架,好,大家这个可以试着尝试用一下。
这也是我们这个科大在做的一个事情,就是希望自研的一些引擎啊,然后不仅是方便我们自己学生,而且也希望给的行业更多的一些这个工具好,那么这些库呢这里我都给了链接,大家有兴趣啊。
这个我们的作业我是我们是推荐这个小框架,这个小小小小巧啊,上手容易,一届助教会随时给你们回答问题,但是你们这个也可以用别的引擎啊,比别的这个库啊都没问题啊,我们左眼不限啊,是用什么库。
只要你们觉得上手或者是以前用过的都可以用,甚至用一些有游戏引擎来做作业都可以好,那么我们下面讲讲一下这个曲面的一些微集合啊,我会呃这些内容都不难啊,就因为难的地方呢,我就把它略掉了啊。
这个有些概念大家还是清晰啊,比如说一条曲线啊,上面有个点啊,这个曲线是光滑曲线啊,是个参考性曲线啊,这个p是一个参数型,u等于,当然这里面实际上是x坐标,有个u啊,y坐标有个u啊,三维中啊。
就是还有三分钟的话,还有机油是吧,单参数嘛就是意味着就是曲线嘛哈好,那么这个固定一个呃,这个取一个幽灵啊,就得到了这样一个p这个点好,那么这个点呢对这个u求导,又对这个这个这个参数求求导啊,就就得到了。
因为这个这个导数上是这个是个向量,相当于是x在对u求导,y对u求导对吧,所以它得到一个二维向量,如果空间中的话,就是一个三维向量是吧,这个我们一起讲啊,就是呃对这种向量值的函数,求积啊都是对分量分别求。
所以每个分量求导以后就变成一个向量是吧,所以这个cu那就是二个向量,所以a向量可以证明它呢是跟这个曲线在这一点是相相切,什么叫相切,就是这个这个气这个直线啊,跟这一点只有唯一的交点啊。
并且更具有公共的接线啊,那么它的那么在微分几何里面,我们还定义了就是呃这个呃这个c u的关于u的导数叫c的,关于u的两阶导数,我们叫c u u,这个可以证明这cu是跟cu是啊,这个啊方向是不一样的啊。
并且是在呃怎么说呢,是与这个n是同方向的啊,所以他们把两个做差几就得到另外一个方向啊,另外一个方向b这个b呢我们把这叫从法使好,那么这个从法使与这个u再做点子差乘就可以得到一个n,这个n呢就是叫法向。
然后呢,这三个b和这个t t,就是这个c u和m构成一个相互垂直的一个直角坐标架,并且是构成一个右手机tnb啊,这个在微分几何里面叫french标价啊,这个点如果非退化。
那么这个啊切线从法还有法向就构成了一个正交标价啊,那么这个呃数据上都是非常漂亮的,这个可以推导的可以证明啊,那如果这一点如果退化了,中间这个c t等于零,可能就这个不满足啊,这个是另外的情况好。
那么呢这里呃有一个呃这个法向概念大家都很清楚啊,就是如果是平面曲线的法线就是垂直于切线的方向啊,那么那么那么如果是平面曲线这个病呢就指向屏幕里面了哈,如果是空间曲线的话,它有一点翘的。
那么这个那个呃法向跟切切象构成的平面就跟这个曲线截出一个方向,这个方向的垂直线就是头发四好,那么还有一个概念叫曲率啊,卡帕卡卡取率呢实际上就是这个点的弯曲程度的度量啊,至少是它的一个两阶密切圆啊。
这个叫密切密切圆的半径的倒数啊,所以是它的取取率啊,所以这个曲率大唉表示这个圆比较小,半径小嘛去就大,所以才弯的很厉害啊,直线距离等零是吧,因为它是一个无穷大的圆,好这些都非常容易理解好这个图啊。
这几两章我们上节课都讲过,那么这个曲率怎么计算呢,反正可以通过一些啊这个推导就可以算出来,那么曲率记住它是与参数化是无关的啊,它是以上化无关,它是个本质量,所以在取微分几何里面。
曲线第一定理就就说曲线的形状由它的曲率所为决定,那么这个这个曲率只要给定啊,嗯这个每个点的曲率,这个曲率图给定这个曲线就形状是唯一确定的,但是相差一个刚性变换,就这个曲线可以这样摆,也可以亮摆。
可以放到这里,可以放,浪,差一个钢琴变化,所以这个曲率是刻画了这个曲线本身的一个本身几何不变量啊,好曲面的话就稍微复杂一点哈,我们这里也给给大家稍微过一下啊,这是张曲面啊。
那个可以看到这个这个部分是被这个部分给遮挡了是吧,是另外一个人叫好,我给这个曲面在上面一个点p啊,p曲面在三维中的曲面可能是二维流形是吧,所以它一定是双边双参数的是吧,呃曲线是单参数,曲面一定是双参数。
它是它是本认为都是二维吗,好好就给你一个u0 v0 就给你一个一个点好,那么这个点呢,那么它们因为它有三个参数是吧,那么它就可以对每个参数呢进行偏导啊。
这是双双变量嘛啊注意s u s u v本质上是一个三个分量的,x u v y u v z uv是吧,所以它有三三个变量,u v运到空间那个点嘛是吧,所以呢对这个呃偏导等价于x对u偏导。
y对u偏导和z对u频道啊,就是对这个翻翻翻个三个分量分别偏导,这个跟以前我们讲的多,这个向量值函数完全啊,所以说以前的课你们了解了这个这些表达以后,在这里面非常容易理解啊,好那么你既然对u能偏导。
那么对v也能偏导啊,那么那么在这两个方向呢就构成它,然后一定是啊互相不共建的啊,就是相互无关,所以他们就可以当成一张曲面,好漂平面,那么这两个向量造成平面,这个平面呢就叫做它它的切平面切面啊。
那么这里的切平面上的任何一条直线啊,都是都是跟这个曲面只有一个交点,就属于都属于它的切线,所以曲面的切线你不是说这个这个是某条线,它是这个平面里面所有线都是这个曲面的切线,所以我们一般叫做切平面。
那么这个切线什么时候才有意义呢,是不是你指定一个方向告告诉我啊,你是在这个方向的切线知是哪一条啊,那我知道了,就这一条是吧,所以整个平面的所有的这个直线都是这个全程切线啊,所以这个切线是带方向的。
你要说某条切线,你要告诉我是哪个方向的切线啊,就是要让这个平面的方向要给定,我好,那么这个切平面的法向就是这个su和suv的一个差距啊,就就就变成了另外一个方向啊,就是这个方向垂直这个切平面。
这就是曲面的法向,所以曲面法向非常好记啊,就是两个偏导的差距规规划啊,这下面除以一个模,就是把它变成这个规划规划的意思,就是这个法向的模第一了啊,好那么我们在这个图啊,我们在某个方向,我们取一个方向。
就假设是这个图火炮的方向啊,然后呢这个方向呢连我们这个平面呢,这个经过这个n是不是这个平面可以绕着n转了,n就相当于一个平面啊,以n为这个转轴可以转好,假设就是它可以在这个切平面是不是可以转360度。
假设我去取某个t方向就转到这里,那么这个平面与这个曲面呢就有一条交线,就是这个黑色的啊,就就就这个黑色的这个曲线,那么那么这个曲线呢与,哎同学们是不是有点卡了,好我们先看好像是有点卡号。
那么那么这个曲线呢呃就是一个平面曲线,是不是就可以啊,这个定义它的一些一些参数啊,所以对于这个曲线它是这个方向的一个切平面,可跟这个呃这个这个这个平面与这个曲面所相交的一条曲线,所以它也有它的一个区域。
所以所以这个曲率呢就是什么一个叫做方向曲率,那么对于这个圈向是方向的啊,这个曲率也是方向确定好,那么所以在空间中的曲面讨论它的切线啊,还有他的那些这个法呃,所以这个曲率呢我们都是叫做方向曲率啊。
就给定一个方向,我我告诉你这个方向这个方向取义是什么定义啊,就是这这个方向的这个切线与法向的构成的,平面与曲面的相交线的曲率,我们定义成这个方向的区域,所以它这个带方向的一个曲率啊,那么在方向曲率呢。
你可以想象一下这个平面绕着n去转,就可以交出无穷多条曲线,每交出一个方向好,每个方向都可以交出一条曲线,所以它是每个方向都有一个区域,因为每个方向都交出一条曲线,曲线就可以定义平面。
因为这个曲线是平面曲线嘛,就可以定义它的曲率,所以它是个方向曲率好,那么这番曲有什么特点吗,啊所以这个这个这个曲面啊性质非常非常非常非常漂亮啊,就是诶可以证明啊,这个我们就这里就不展开。
可以证明就是你一个曲面任何一个方向就是这里有360度啊,这个有无穷多多个方向,那么可以可以可以证明它其中有两个方向的曲率啊,这个距离值啊,一个是最大,一个最小,就是这个是p,那么每个方向都有个曲率。
他这里这个这个这个微分几何告诉大家啊,其中有一个方向曲率是最大的,有个方向距最小的,并且这两个方向一定是相互垂直的,这是卡法一直卡八呃,对好,先先这样画啊,这个p啊,这一定是相互垂直的。
所以说这东西是对任何局面都是成立的啊,所以它很急很漂亮的一个这个性质,就是这两个方向所对应的这个叫做啊,这里这两个就叫主取率啊,叫最大主曲率与最小主曲率,那么这个这个方向呢就叫主曲率啊,方向啊。
最大主体的方向,这个叫最小的主体的方向好,那么另外任何一条其他任何一个斜的方向,这个方向的k就是卡卡是等于什么呢,是这两个曲率的一个线性组合。
并且组合系数高考加起来零一是不是cos theta加sin x的平方等于一,啊对吧,那么这个车它是什么呢,这个车它就是以这个k一所构成的夹角啊,所以这个性质啊,这是两个主曲率。
因为这两个加强点一都大于零嘛啊,所以他们他们两个组合一定是小于这个最大值,大于最小值是吧,并且它是个信息组合,所以他们那个曲率呢是有这样一个性质啊,这个西塔就是这个这个与这个k一的夹角。
那么这个就叫做欧拉公司啊,是欧拉最先发现了这样一个性质,就是你无论这个这个曲率方向是是在哪里,这个曲率呢都可以有两个曲率所表达出来,并且以这个夹角成这么一个非常特殊的关系啊。
好那么这个这个是两个主曲率啊,最大主曲率最小的主曲率啊,记住每个点都有两个方向在玩方向相互正交啊,是是一个最大一个最小,其他的曲率呢是他们两个的线性组合出组合。
那么由这两个区域呢也可以定义其他的一些曲率啊,其中两个重要的区域啊,一个叫高斯曲率,高学历就是两个曲率的一个成绩,那么还有另外一个群里叫平均曲率,就是他们两个平均值就是一个简单的算数。
平均他们的和除以二啊,你是个这样的呃,呃提取好,那么这两个区域呢非常有用啊,那么高速曲率呢也用来度量啊,这个曲率的保护物,曲面的一些弯曲程度啊,那么在win几何里面。
我们这里不证明可以证明等距变换是它是高曲率,是不变量,什么叫等于变换,如果你这个曲面发生一些变形,只要这个没两点之间的距离不发生改变,它就叫等级变换,比如你拿拿张纸把它卷成一个圆柱或者圆锥。
是不是这个纸上面的这个度量距离都没变化啊,只是做一些弯曲嘛啊所以它是等于啊叫等级不变量,好一个平面的一个平面的高度距离,大家应该可以推推推出来吧,因为它任方向都是直直线嘛是吧。
所以高速距离都是k一和k2 ,它的所有所有的卡牌都等于零,对面来讲是吧,所以呢哎高速曲率,肯定等于等于零是吧好,那么圆柱和圆锥可以用平面所说卷卷起来并没有发生撕裂,也没发生挤压,那么就可以证明啊。
这个圆锥和圆柱的每一点上的这个高速曲率一定等于零,反过来这个定理也成立啊,什么意思呢,处处高斯曲率为零的曲面,它的这个就是等距变换,可以变成一个平面,那么既然它可以长等于变化等于变化。
就是把它展开来展成平面,那么这种曲面就叫做可展曲面,它可以展开,可以没有任何扭曲的展开,叫核弹曲面啊,所以客单曲面是什么,是一种曲面,这曲面呢可以展开成一张平面,没有发生任何的撕裂挤压变形啊。
好那么柱面跟锥面,我刚才形象的告诉大家,哎这它又可以平面可卷起来是吧啊,这个呃呃形成,所以他们一定是可能局面,事实上还有一种呢,就是你拿张纸啊,按照那个方向去去去卷啊,所以那种这种曲面的一般化啊。
这个叫切线面,第三类接下面是什么呢,切切面是不是有一个有一条曲线上是这种局面很好构造,你随便给你一张一条空间曲线,那么空间曲线的所有的切线所构成的面,它就是一张曲面,这个曲面可以证明它一定是可展的。
因为它是由切线组成,而切线是直线,直线高度学历都不等于零,而而而这个高度学历是整形变量不变量,所以可以证明切切面一定是扩散曲面,所以这种局面就是什么,拿张纸随意扭一下,就变成一个切切面啊,就随便扭一下。
还并且还有一个很好的性质,我可以找到一个切一条曲线,使得这个面呢是这些曲线上的每个点的切线所组成的啊,所以这些性质呢大家记住就行了啊,因为你们这个毕竟不是学物理几何那门课,要学那门课的话呢。
一些理道理啊,或者是背后的数学就能够非常清楚啊,那我们这个是一个基础课,我们就把这个结论讲一讲,大家清楚啊,好可能全面能够成一张或者展开成一张平面的曲面,它的特性是什么呢,特性是这个高斯曲率啊,这个。
啊零好,那么还有另外一个曲面呢是叫做平均曲率啊,平均曲率,那么也有一种特殊的性质啊,就是就比如说处处平行取率等于零的曲面,叫什么叫极小曲面啊,那么什么叫极小曲面,就是什么面积是达到最小啊。
这个后面我们会展开,比如说我们生活中遇到的这个你们小时候吹的那个肥皂泡,肥皂泡在他的那个表面张力情况下,它会缩成最小的面积啊,就是一张极小曲面啊,好这里有个图,那个这个图呢可以可视化啊。
比如这里每个点它的那个最小曲率的这个方向啊,这是最大区别方向,那么这两个方向呢对任何一个点它都是相互正正交的,如果把两个方向放在这,放在一块的话呢,就是右边这张图可以看到一个一个曲面,你拿来给我。
我都可以看到它的那个区域主曲率的一个方向是什么样子啊,这是一个呃可以通过计算方法可以把它可视化出来好,那么在未名集合里面还有一些别的一些特殊的啊,这个这个一些概念我这里就不展开啊,你像像叫椭球点啊。
抛物点,还有这个双曲点啊,这个双修点就是这种满面一样的,上次是极小曲面的,没有点,它怎么它也这个这个双击向我们举例,角这个呢就是说这两个曲率都大于零,叫做椭圆点。
其中有一个曲率小小的这个主体的等于零的话,就叫这个抛抛物点,有一大一小啊,这个就是叫满点,因为一个方向这样弯,一个方向这样玩是吧,所以如果是取平均等于零,一定是一正一负才能抵消。
所以绩效局面的所有点都是叫做双曲点,就是满点也要因为它形状看起来像个满面啊,满就是马马背上做的那个东西啊,就是马鞍面,这些是一些这个特殊情况好,那么嗯刚才讲的都是这个微分几何,微分几何是零,研究什么呢。
研究一个曲面的一个无穷小邻域的一个微分属性啊,偶数啊,曲率啊这些这些性质啊,有些学校可以甚至可以开两门课啊,一个叫局部微分几何,就是研究它的无穷小零的性质,还有个叫整体文明集合,就研究这个整体性质。
比如规格呀,它的那个四星数啊等等哈,那么后面你们如果做深入研究的时候,可能会遇到些概念啊,如果遇到概念时候再去找一找,看一下就能够懂啊,所以现在不用去读。
怎么说我一定要去上什么课才能来来做我们的作业没有必要啊,我们作业不会用到那么多的一些微分集合的性质好,在win几何呢,它是研究它的一个光滑曲面的一个微分性质好。
但是呢我们这对象现在我们开始接触的对象什么呢,是叫三角曲面啊,网格曲面可以看到在网格曲面市场什么它是一个分段的平面,叫分片平面,平面是不是无无穷接光滑,这个没问题吧,但是在边上或在顶点上面。
这些平面如果不共面啊,不可能所有平面就共面吧,要不然就是这个网格就是平面了对吧,所以他一定这些曲面不一定都会共面,所以呢这个点对于我一个曲面,来来来来来来来来来看的话,是不是这个曲面只有在这一点。
只有c点连续啊,连c都达不到对吧,它不可能这个这个光滑啊,所以它的学名呢在边上跟在顶点上面只有c0 好,你40p不光滑,就不可微,你不可微,怎么去讨论它的微分性质呢啊这是不是就有一个这样的一个一个矛盾。
就是你这取名不可微,那就没法去讨论这个微分属性,但是我们又知道这些点是从一个可能是一个光滑曲面上采样过来的点,对吧,那么这个如果是光学产生点,那么它的这个原来那个曲面一定有它的微分属性。
我能不能通过我所观察的这些采样点,去估计出那个他所那个光滑曲面上能接微分属性呢,这就是我们要要做的任务是吧,因为我们这个观察点只有这些采样点。
但是呢我们还是希望求着他的那个的那个一些微分属性向法向取率好,那那么这时候呢就是就有必要呢就把原来的这个微分几何啊,就变成一个离散文明集合的一个研究啊,这也是22 20年来吧。
这大概20年来那个呃这个怎么把微分几何离散化来去,针对这种离散的三项网格来做一些研究啊,这个一个啊一些内容好,我们来看一下,好我们看一下这个呃,来看看第一个法向,估计,好我们来看看这张图吧。
我们举一个例子,就就这个点,就这个点这个点那个如果我们那个要算这个点的法向应该怎么算是吧,你可以看到这个点有这么多个平面跟它相邻,是不是每个平面都有各自的法向,并且这些方向都不可能都可能不一样是吧。
都可能不一样,那么这个点的法向该该怎么定义呢是吧,这两个栏大家就想哎如果简单一点,是不是就可以作为这个点的法向来处理对吧,所以这个很容易就这样得到了是吧。
当然你也可以说哎我可不可以在这个这些相邻的相邻点啊,跟这个点一起,你可以将括号曲面用这个方法曲面的法向,因为我可以用以前说的那个这个多项式或者是其他的曲面来来,你和这个局部的这样一个形状。
那么用这个框框曲面在反向来禁止它,可不可以,当然也可以了啊,所以呢这里面就这个就导致了就会产生这样两种方法论啊,啊就是怎么来啊,估计这个微分属性,所以可以从两个角度或者是两个方法来这个,啊研究啊。
好那么第一个方法呢就是一个就是呃叫连续逼近的一个方法啊,这个方法呢是呃这方法很简单容易理解啊,就是用我们以前说的啊,就是如果你要估计这个点的一些微属性,那怎么办呢,我在这个点啊,这个附近的点把它找来啊。
就在这个领域附近啊,对对这个呃这些点呢就做一些拟合,用光滑曲面去做做拟合,比如说你用一个抛物面去去去做拟合啊,那么这时候呢就就变成了这个剖面的这些层系数的一些系数对吧,这就是我们以前讲的拟合啊。
只不过它是用用函数啊,还是用那个参数化参数选型拟合以后呢,这个曲面出来以后,用这个曲面的这个属性去去估计这个这些曲率啊,这些高速曲率这些这些东西就可以做了啊。
所以啊这个呢在早年还真有很多paper论文来做这些事情是吧,怎么样利用利用这个呃领域的性质啊,来估计这些微分属性,当然你用的好的话呢,它的逼近阶可能比较高,像这篇文章04年啊,16年前啊。
当然你说我能不能用别的像西门曲面或者叫影视曲面来逼近它,可不可以也可以啊,并它以后呢我用这个光滑曲面这个函数型的,还是细分曲面,还是这个一次曲面的属性来逼近啊,所以这些就我就不展开啊。
那么我们更关心的是能不能用离散方法去逼近它啊,那这个明算方法毕竟它的话呢就我刚才讲法向时候就讲过是吧,这个平均有没有道理呢,嗯这个当然也有道理了是吧,但是呢有没有更好的办法呢。
就是这这几个三角形围成一圈,难道就用他们的这个法向简单平均吗,嗯难道每个方向都会全都一样嘛是吧,我假设有一个三角形很小,是就是它的贡献就应该小一点。
所以就这就产生了人能不能用这个一些更精确的一些这个方法,比如说我用面积来加权啊,就是每个面积在面积作为全来组合它的那个法向进行加权,可不可以也可以,所以在这个历上也有好多好多这样的一些工作啊。
好那我们最关心的或者是关心他的一些曲率计算啊,我们这里就把主要结论给给给那个讲讲一讲吧,那么我上次有一个严格推导,就是从那个win几何的一个拉普拉斯本小米算子,就它这个定理啊来算,这个像是个微分。
这个叫平均区流定理,可以来一步步离散推导出它的这个计算公式,那我就把这个公式直接这个给大家解释一下啊,那么公式说说什么呢,就是接纳属于这个i这个顶点的一领域。
表示1010是什么意力跟这个点跟有直接边相邻的以后,这个这个概念会经常用到啊,叫一领域就跟它只有一条边相近的这一领域啊,那么一般用n n neighborhood这个来来表达,再用一表示一领域。
如果二是20120,就是再往外扩一层的扩一圈啊,这一领域的每个阶段,这里有有章程的若干条边,啊每个边的中间有个全,比如说比如说这这条边它就用这条边所对的两个角,一个阿尔法来接一个贝塔来接它的一个余切啊。
两个加起来作为一个加权,就构成了这样一个啊这个这个和这个和的话,除以它的这个这个面积的两两倍啊,这个面积应该是它的紊乱涂的一个面积在两倍,这时候就可以进制出这个啊减的这个平均曲率啊。
啊具体的推导我这里不去展开,那个等下会有一些paper给他链接给到大家,大家可以课后去看一下怎么推导的,同样高曲率也是由这个高斯分离者这个定理可以推导出来啊,就推导出来以后呢,可以可以看到啊。
高斯曲率这个一个一个近视一个点的高度,曲率就等于二派减去这一圈的这个三角形的,在这个角的和除以这个阴影面积啊,就是它就是一个这些角与二派的差就是高度距离,因为x等于零,就是高度就等于零嘛是吧。
就就就是个平面啊,所以它这个零三以后非常简单,就是它的那个一圈角的和与二派的差啊,再给他做个因子就就就可以了,好那么高速曲率,那么同学们可以看到我们这里那个把这些跟平均曲率啊,都可以把它可能画出来。
这种图大家也要学会啊,一般是有一个叫做卡拉巴,就是颜颜色棒啊,比如说最小值是blue中中间有green啊啊就绿色,还有有些时候是是是yellow黄色,那么就你把这个算上的值啊,把它规划到这个区间。
比如说你区间是做这个最大值,int到红,最小值映射到这个蓝,说呢就每个值呢在上面有个值,就可以这里找到一个颜色把它填上去啊,就可以形成这样,这一个叫做color map。
开了map是一个非常非常通用的常用的一个可视化手段啊,可以看曲面上的那些标量值啊,就这个这个曲面上每个点有一个值,在这可能是一个高速区域或者平均取率的值而已,好,那么这个呃这里是另外一些曲面可以看到啊。
很形象啊,你可以看到这个红色值比较高,表示这个就比较比较弯曲啊,就平取率三上面这张图也一样啊,你看在这些眼睛啊,嘴巴啊,这些腿这里的脚尖,这里高的水都很大啊,在这里的话就cos距离很小。
所以越平的地方高,我的曲率会越小,啊提取率也一样的这个性质啊,那么这里有一篇非常重要的文章,003年也十几年了啊,这个呃他就是这篇文章的开创了,可以说是一个比较早年的工作,开创了一个叫他这个名字。
就是这篇文章所起的叫离散微分几何算子,就这篇文章非常详细的推导了各种各样的一些刚才讲的微分量,平等等啊,所以他这里唉介绍的非常详细啊,呃这篇文章在网上都可以找得到,比较经典,大家有时间可以去看一下啊。
如果没时间,你就照着我的ppt的公式去算就行了,好未来如果如果遇到了这些微分属性的一些离散计算,你可以看这篇文章啊,就再仔细看一看好,那么这里有更多的一些这个references,就是那个参考文献啊。
都比较早年,因为啊但是最近微分几何,离散微分几何有发展吗,也有啊,就是考虑的比较多的一些微分集分集合,比如外微分啊,黎曼这个是曲面上的微分啊等等啊,那么这个呢呃呃像初学的这些领域可能接触都不大。
所以呃我们就不去展开啊,有有兴趣同学呢可以查一下他在几年前的crab,一个tutorial,一个course,它里面有一个专门的叫离散微分几何的一个教程,里面讲了非常深的一些微分几何的一些离散的方法啊。
那么呃我们后面最后花写时间介绍一下极小曲面啊,极曲面嗯。
平均曲率出度等于零是吧,从视觉上来看还是非常漂亮的,因为它每个点都是满点,所以这么点就有有有一点啊,一个方向看看到一个印,方向是这样弯,一方向是这样弯啊。
桌子满一点,每个点都是这样这样子啊,所以机械里面都比较漂亮,而我们这个实际生活中这种肥皂泡的表面就是机械局面,因为它自然就长成一个非常小的面,这个面积的一个t是吧。
像这个是网上一个什么仅仅是记录啊一个肥皂泡,那一个一个最大的肥皂泡的样子,算上里面它每个点都是啊类似以及要前面的一个艺术点啊,还有这些这些这是数学上有一些数学表达的曲面叫代数曲面。
也是一个天然的技巧曲面啊,你看到呃还是比较漂亮的哈,那么在实际应用中呢,我们也会经常用极小曲面来做什么呢,实际上是在建筑学里面用的比较多,像像这个屋顶为什么要用直角曲面呢,一它面积最小啊,这个省材料。
省制造成本,第二他每个点都是什么,都是难点,就是有一个方向是弯的,有方向是翘的,所以呢这个水啊或血啊或者一些物物物质啊,上面它是个不稳定平衡点,所以与下限来求,它一定会沿着这个凹的地方去流掉。
所以它上面的不大容易积水或者积雪,所以导致这个屋顶啊,这个非常就是不会被重血啊或雨啊这个这个积水所所压垮啊,所以可以看到在室外有好多这种键,就在顶都是这种绩效曲面所啊,这个章程的啊。
还有这些都是一些非常漂亮的啊屋顶啊,还有这样一个一些拿过奖的一些建筑都是用绩效水平来做型的啊,还有这些曲面都都是这个样子,好曲面平均to等于零。
那么我们这里呢刚才我们讲了一下这个需要全面的这个近似求解是吧,求解什么呢,求解就是这这个点跟它一领域啊,对这些方向的一个一个组合对吧,刚才是cos的222个两个值嘛,cos阿尔法和贝塔对吧。
只是更近更加好,实际上是从另外角度来来看的话呢是吧,你把这个v把它拎拎出来,实际上它也可以看成是什么呢,这样这样一个形式,它是个p啊,跟它的一领域的线性组合组合出一个点,最主要就是它的重心坐标啊。
作为这一点,那么咱们朝这个方方向呢去去运动,就这个这个这个方向就这个模式等于零是吧,所以呢我们就可以从一个任意曲面讲的是开局面出发,就可以来去找到它的极小曲面的形式啊,举例啊。
我们就把这个p啊沿着101这个一圈的重心去移动,当一般不建议直接把它移过来,什么我们一步步移啊,每每次呢一个10%啊,这个这个有个兰姆达比例啊,那么这样的话呢这个曲面就被光光滑了一点,然后不断迭代呢。
诶最后这个点呢就会无限靠近,这个每个点都能靠近它的一零域的这个中心,就变成加绩效全面的这个性质了啊,所以这也是那个离散平均曲率流的一个做法啊,可以看到啊,我们再解释一下,这是原来的顶点。
我们算出它的一个这个这个叫做离散平均曲率啊,然后这个是法向上,这两个方向呢就是刚才说的方向,这个点朝它的一领域的中心的一个方向,那么这个移动多少呢,多少移动的蓝兰达就可以了啊,这个这个蓝板呢不要太大。
如果等于一的话,就一下子移过去了,他反而会导致它不收敛,所以拉姆达小一点,但我可以多做一下啊,那么呃这个圈我建议大家是用用用这个权啊,这个圈非常这个点组合的系数就用这个系数去去去组合就行了啊。
cos cos的阿尔法i跟cos贝塔i好,那么这样的话就我们得到了一个极小曲面求解的一个局部迭代法啊,嗯我们这里当然是要一个封闭的曲面啊,讲的是是一个开局面。
那么这里每个点呢这个边界呢首先找到边界点不动,因为我们想模你一个这样边界的一个肥肥皂泡嘛,所以边界是用铁丝,假设这个铁丝所造成的,它不变,那里面的曲面,我想我想啊一进行一些变换,那怎么变换呢。
每个点每个点每个点都做同样操作,怎么操作呢,找找点点的一领域它的坐标,它移动的这个量呢是一个比例啊,好每个点都这样一种啊,所有点种完以后作为一一次迭代啊,那么你再做一遍啊。
那这个曲面就慢慢慢慢就会就会收缩成一个非常光滑的曲面啊,这这个所以这个非常非常非常容易实现啊,那么这里几个注意点啊,一般是这种操作就非封闭的啊,就带一条边界的,就是你算这个算这个点的更新的时候呢。
一定要用老的顶点啊,所以你要把老的顶点存起来,更新完以后再把它覆盖掉啊,啊第三个呢这个参数呢呃建议去小一点啊,那你取0。2可不可以啊,也可以,但不要取太大,太大的话呢,他有可能不收敛啊。
因为一下子这样敲,一下子那样敲啊,所以呢你这个迭代次数可以多一点啊,那么从理论上可以证明,当这个迭代次数趋向于趋向于无穷的时候呢,这张曲面就趋向了一个极小曲面。
这这是个人脸,这个看这个人脸,这鼻子是凸出来的,这是它的边界,那么你如果通过刚才迭代,每个点都朝它的中心移动,每个点都朝到中心移动,迭代以后,你可以看到这些点都分布在一个非常光滑的这样一个局面上面。
就是边界是不动的,边界不动。
那么封闭曲面会怎么办呢,啊我刚才讲了,实际上它会收缩嘛是吧,所以对于封闭曲面的话呢,可以证明不固定任何点,每个点都按照刚才的操作,它呢这个曲面会收缩到一个点了啊,不管是愧疚自己啊,作为搜索到没没有了。
这是这是啊,这个迭代很多次以后就没了这局面是吧。
这是这个这个迭代算法的一个特性,好我布置一下这个卓越六啊,作业呢就是实现刚才我讲的这个呃绩效全面局局破法啊,非常简单,所以你要找到非封闭这个网格的边界,会提供几个这个带边界的。
当然你们呢首先要找到它的边界啊,那个那个框架里面可能有也可能没有啊,那如果有的话,那我们把它删掉啊,你们去首先要找到这一圈边界啊,这些简单就不动,对于里面的任何一个点,你要找他的,找找找到他的一零域。
找到101以后,这些点就找到了是吧,那么它的它的这个平均就加强平均就算算出来了是吧,然后把把这个点往往往往那个平听这个点呢移动个10%啊,每个点都这样操作,就做完一次更新。
所以呢你们这个作业你只要去用半边结构去找边界点,找它一领域,还有最后更新一下坐标就可以了啊,所以非常简单啊,如果你们对这个数据结构稍微摸索一下的话,可能几天就可以做完啊,所以目的主要是让大家了解一下。
怎么通过半面结构去找一个点的一领域,怎么去找这个整个的边界啊,那么这个边界边有什么特性呢,边界边可能就是什么,它的领域只有一个是吧,里面因为内部的边都有两个领域,都有两两个三角形相邻好。
那么我们会推荐大家还是用我们推荐的这个,或者我们给给的那个有拖把啊,有托比啊,这个这个这个框架啊,这个作业因为比较简单啊,你这这个迭代次数你稍微多一点,你要是可以自己认为是一一百1000啊。
你就可以设一下,然后就可以看到这个前面的最终形式,或者你就让它不断迭代,如果迭代过程中计算的这个新的点跟老的点,误差小于一定的程度的时候,你就你就停止迭代也可以啊,嗯然后你就用这个这个好。
那么对于有些同学可能做的比较快呃,过于简单,那么你可以怎么呢,可以去把曲率跟平均曲率做一做,就用刚才的语言可视化方法看一看它的颜色分布好吧,这作业就给你大家一周啊,后面呢就如果有同学还就稍微走的快一点。
能力更更强一点的话,你们可以自己去构造空间曲线啊,这个然后呢自己购购购购网啊,比如说你会各个平面平面的网,就网站你可以用这个全狗啊,这个全国是一个二维购网的一个这种库,挺好用的啊,那么你可以啊。
那个二维割完了以后呢,你就把它映射到这个空间的一个曲线,然后这个网网格不就是top有了吗。
然后你再用机交曲面去去去带就可以做啊。
这个呃这个教学面生成好了,那么这次作业啊我们就布置完了哈,那个在在明天我同学们在网上就能找到这个作业好,下面我们请那个助教啊,张涛同学会来把这个有托比尔这个框架给大家介绍啊。
好,方韬在打哈嗯,哎,哎抓到啊好了,那个。
你就开始介绍这个有托比尔这个框架吧。
好我这边直播出去,好好的对。
啊哦我现在开始开始,开始吧啊大家好啊,我是庄,我叫张涛,我们这个课程第六次作业之后呢,就要有一些关于网格上的一些操作,所以呢我在这里呢先跟大家介绍一下,这是我们课程推荐用的框架啊,是一个怎样的架构。
以及如何使用并完成作业。
好啊,我们首先呢先看一下啊,我们的这个引擎是怎样子的。
运行这个框架之后呢,我们可以看到呃这左边是个游戏窗口,然后中最右边的是一个场景窗口,然后还有一些像呃,还有rocky,还要inspector这些,还有这个log啊,还有这个项目管理。
对于很多都是窗口很多很多功能,然后我们这里呢就是可以在场景窗口这边去啊移动,然后呃我们可以在这个海报里,体力这个窗口里面的去管理一下这个场景中的物体,比如说我们选中这个啊。
比如我们这里场景中有三个呃四边形,那我们可以选中这个路子,就是这这个四边形,然后我们打开inspector,然后可以看到最右边的它有很多很多很多呃选项啊,其实就是他的一些这个路子,这个对象的一些组件。
就比如说我们找到找到这个translation,就是它的位置位移,比如说我们把它往上移动,就是把它的y坐标加一加,这三个东西呢它都会往上走,因为这出来的是它的子节点。
就是这一套东西呢就是来帮助大家完成作业的好。
我们再来仔细讲这个框架呃。
我们主要分两个部分,第一个是架构啊,接着再讲使用的方法,用来讲架构,就我这里就简单的把它分成四块,最最底层的就是一个基础,就提供了很多这个框架需要使用到的一些基础功能,往上走的就是分两个两大块。
第一个是渲染啊,另一个和编辑啊,是逻辑,就是这样子跑我们的我们的呃,我们的代码就是我们用户的代码,然后再往上呢就是呃一个编辑器,就是可以就是刚才我们看到那个界面就是编辑器好,我们基础部分啊。
这基础部分呢哦我就讲一些大家呃就是写作业比较涉及相关的,首先呢就是c ma我们构建项目要用到的工具啊,接下来就是我们组我们整个框架主要用的呃,库都是这个c加加的一些标准库。
好在网上的话大家比较喜要知道的是,一个是反射啊,一另一个是我们图形数学库,就是一些点向量。
然后变换的这东西好,然后大家讲这个c mac mac,就是呃我呢就是给封装了很多c mac上的一些功能啊,最终呢就是可以通过写一点点的呃代码,就可以得到一个呃很多就是呃就得到一个怎么说呢。
就是里面做了很多事情的一个一个功能好。
我们就看一下我们作业里面的c mac就可以在这里看到,简单就这里吧,就我们这里核心的就在这一部分就是添加了一个项目,这个项目呢是然后它引入了两个库,第一个是呃它底层的无头皮这个框架。
其次是我们的这个呃结构的一个库,好就引入了这两个库,然后他就能通过写这些代码就可以得到这一整个项目,项目可以呃这些源码的它都会自自动的添加进来。
然后我们也可以就是说在你的本地目录下去创建那些那些呃头文件啊,或者cpp文件。
它也是能够加进来的,好就加进到这个项目里好。
接下来是我们的图形数据库,因为数据库呢就是这样子设计的,就是呃我们会这些数学上的一些概念就写成不同的类,就是比如说点,然后向量法向啊,从而呢我们可以比如说啊这还有个变换啊。
就将变换作用与这些不同的对象的时候呢,就可以调用,就可以通过重载的方式是调用不同的函数嘛,比如说你看这右边呃,是他们的结果是大家都是不一样的,就是说呃可以大家都是就是说有x y z这三个坐标。
但是它是对应的概念是不一样的,就情况下啊就是写成了这样子的一个数据库啊。
我们再来仔细分析的话,就我们就比如说挑出三个东西,就一个是点,一个是向量,一个是法,向我们发现呢就是这些不同我对象它能够是支持不同的操作,比如说点他画它可以做呃,度量就是两个可以算两个点之间的距离。
然后可以做一个仿射变换,就是说这个加上一个向量之后,可以得到另一个点吧啊可以做这样的操作,那我们再看现在这个向量的话,可以做加法,可以做速成,也可以做啊,这个数量范数还有内积。
就是点乘吗啊然后我们再看一下这个法向,它也可以做很多操作啊,发现这些操作呢是有共同的部分的,所以呢我们可以呃将它们组织成这样子的形式啊,组织成这样子的形式,比如说这个向量呢就由这五个构成。
然后法向呢也是由这个内积泛式度量加成速成构成,这样是可以减少什么的,就是冗余是吧啊,就我们你们在用这个框架的时候呢,会用到这个数学库和看到这个数据库,就是我们怎么看这个库的代码。
其实就是看这个每个对象它有哪些呃,这些你可以当做是组件或者是功能有哪些功能组成,那么你在确定好它们有哪些功能组成的时候呢,你就能知道就是这一个对象,这个类它能够做哪些操作,你说可不可以做加法。
可不可以做乘法或换,或者可不可以做点乘这些好啊,这刚才是举的是三个三个例子,然后这里再举多一点例子的话,你可以看到它其实是确实是有很多可以公用的部分的,好我们这里再举,具体看每一个小组件它啊有哪些功能。
比如说这个内积就是in the fa,它呢有实现了这些这些接口,比如说可以可以点乘,可以求范数的平方,可以求距离的平方啊,当然也可以求距离,求放数,然后可以求余弦,余弦值。
就两个向量夹角的余弦值也可以解,实际上余切值也可以计算它关于某个方向上的投影,或者是它的那个垂直部分好啊,这就是数学库,我们在讲另一个一个技术组件,就是反射啊,很多语言的它都是有反射的功能的。
但是那个c加加呢它没有,就是本来说c加加在2020标,这个c加20,这个时候他就要加入反射,但是它是没加,他现在有的呢就是这种就是type rs这个库,它可以是对类型的去判断它的一些属性。
比如说是不是为的这些啊,这不介绍,然后就是说它的反射功能是比较局限的,所以啊我们在c加加上写东西的时候呢,就很有必要呢,就是说添加一些呃反射就是添加一些反射库啊。
就是我们自己写的反射库啊,我们后面讲一下反射,就车库的话我们使用的是这个静态反射库,静态版好,我们看一下它最终就这些这个反射到底最终有什么功能,比如说哈我们有一个有个结构,这个或者是类啊。
它是denoise data,就是我们这里啊这个数据结构嗯呢,呃我们比如说我们想把这些这些结构啊。
在我们的这个编辑器中去显示出来,那比如说在这里这里我们就把它显示出来了。
我们显示出来的我们需要说把他所有的所有的呃的成员给显示出来,并且呢可能说添加一些额外的信息,比如说我们这里这个london scale这个变量它有一个属性,就是说这个名就是最小值是零,就是它不能是负数。
然后有个工具two ti就告诉他这是一个随机啊。
就learning sc自己来看的话,它就呃能够在这里显示出来啊,比如说我们这里只能拉到零,就不能再往负的负的拉啊,好。
这这就是它的呃我们的结构哈,就是这些框框框起来就是它的属性,就是我们的想要实现的功能,就是把它显示在ui上,但是我们要实现这个功能的话,加加语言就他没有提供一个支持。
就是我们不能说便利他的所有的所有的那怎么办呢,就是说我们可以自己写一个静态反射,其实静态反射就是说把类的各种各样的信息啊全都保存起来,然后使得我们可以去便利啊,夫妻查找这些啊,这保存起来的方式呢。
就看这个右边是其实就是把他所有信息给列出来就可以了,比如说这里有个name,就是把他名字列出来,然后它有那些那些玉啊,比如说这里有好几个月,然后每个月呢它有一些属性。
有哪些属性好,这就是我们反射的功能啊。
我们再看我们的框架里的话,我们能看到我们这里有四个月嘛,我们再跟大家演示一下,比如说我们这里添加了一个域,比如说是第就是我们其实就我们在做作业的时候,就需要你们自己去,就说你们需要什么数据。
就是这里往里加啊,加完之后呢,呃我们要更新一下这个静态反射的内容,就是可以这个找到这边有个入编译一下,你看这里它就会生成一个新的文件,那生产好了,那我们就能看到这里就多了一个d。
好好读了个d之后,你再运行一遍的时候。
它就能够在你的那个刚才那个编辑器的窗口能看到这个d,就这样可以方便我们的编辑,就我们之前作业写作业的时候,大家的就是这个写了很多数据之后,是在系统里面去自己写了ui,然后去调去改那些数据,这样子就麻烦。
就是这里呢就是说我们可以通过用静态方式的方式啊。
直接在那个窗呃,就是那个编辑器窗口里面,就就就就那个inspect这个窗口里面就可以去调它了。
比如说这里你在inspector窗口可以看到这里就多了个d,这ui都已经写好了,就可以,大家可以直接在这边调以前作业,camer就那个画板的那个作业,大家就会在这边去调它的数据嘛。
就是呃其实其实右边是有的,就不用在左边这里自己写对吧。
好好这个反射内容就讲完了,好我们来讲这个嗯是这个渲染这个这一块,我们渲染的我把它最主要是说分成这么多层,从底层来看的就叫无层哈啊,最低就是一个图形接口,就是我们用的是地下室啊。
所以呢其实就是我们这个框架只能在windows上跑,这个以后再说,就是说添加一些,比如说啊welcome这些使得它可以在,就跨平台性能更多一些吧,现在先现在目前就是地下室,就只能在windows上好。
然后这个图形接口在网上看的话,就是有一些c的,c的,就是我们渲染应用的一个编程语言啊,然后还有它的纹理纹理,然后buff啊,纹理就是图片嘛,但是我们这里呢放在这里就主要是说它的。
比如说顶点的顶点的属性的buff,或者是它的索引的buff啊,往上走的就是一个叫其实较高级的一点的对象啊,这个谁的,他其实是在往上走,可以有一个呃就是这个西德的一个一个语言,就是谁的了。
他可以去给谁的添加一些声明的信息,然后添加一些声明的信息,然后还有material的材质,材质就是我们渲染的时候不是要需要图片嘛,就是比如说他需要好几张,然后这个但是就是c的里面要求要几张图片。
但是你没有具体说明是哪哪些图片,那么这mtl呢它其实就规定了,就是他就是在里面就告诉你就是需要哪几张图片,然后比如说这个还有呃网格,网格的话其实就是顶点数组啊,啊顶点的那些位置法向啊。
这些都是呃一个buff,还有它的索引,就是三角形的三角形索引的一个buff好,然后再往上呢就是我们要去组织这些对象,然后生成也就是得到一些你啊,就是你你的渲染的主要部分。
其实就是就是就是我们在网上写的那些东西,然后再呃怎么说呢,我们宣扬部分的代码,然后该怎么组织呢,就是我们其实d差12呢,其实是告诉我们我们应该啊并行的去执行那些渲染的代码。
然后这个并行执行这些生产代码的一个很好的架构呢,就是这个framework,你看后面再回再说一下这个fraground,然后再往上就是呃,具体你使用的是哪种管线。
我们现在就一条一条管线,就是这个叫标准管线,这一条好好具体的讲,那你在右边看就是就是这个c的代码是一个很简单的,就是它是一个顶点的rtc的,一个是pc的。
然后我们再往下看叫test,就是这图片,然后我们在引擎里面呢。
其实可以在这个s下的test可以找到一些图片,比如说这里啊有一些图片。
然后buffer就是这些有这些顶点数据加了,然后它的法向,然后它的纹理坐标,还有另一个是它的索引。
就是每个三角形有哪些哪些点好,往下是谁的live,谁的life就是我们底层是c的嘛,然后是你要在网上,你要告诉他一些信息,比如说有哪些也是有哪些图片,比如这些呃lb度,然后emission这些图片好。
还有那些变量就告诉他说的这些声明信息好。
再往下是材质,材质呢就是说我们一个一个谁的谁的谁的life的一个东西。
它它会有图片嘛。
但是他没有具体说要哪哪些图片,那么ero呢他就是说具体的把那些那些图片给确定好,就是呃或者说是这其实就像是一个类型,就这样一个对象嘛,然后说我们这个material是就是铁锈。
这个材质呢它就它有它有它的漫反射贴图,比如说这个黄色的,然后这个呃金属度贴图啊,这它总共有四张贴图嘛,好嗯材质的话我们的框架里呢就是在这里material这里有好几种。
待会我们再演示它的材质,接下来是网格,网格的话呃,就是右边这个部分就是他们三角网格,然后它在引擎里面的就是这model下。
这里我们就预提供了,有其实你能看到的其实三个,这是我自己外边放进来的,大概写作业的时候会在额外提供呃。
就提供几个网格放在这啊,好接下来是逻辑的部分,我们逻辑呢整个整个框架用的是这个ecs架构,什么是ecs呢,就我这里简单的介绍一下,就是好整个事件就是整个世界,整个世界里面呢会有很多实体。
比如说实体a实体b实体c实体就是相当于一个对象,好像每个实体呢它会有它的一些功能部分,就是说比如说这个实体a它会有一个位置,就translation,它有个旋转,它还有这个变换。
local to work,它还有个random,所以说它是可渲染的啊,就是这个实体a它就四个组件,然后这b呢它也是四个组件,然后他们因为是他们拥有的组件是一样的,所以它们存在同一个框内。
存在同一种类型,它们是同种类型的东西,然后看再看这个实体系是体系,它是有三个组件,它有位置,它有旋转,它有个local to wor,这是实体与组件,其实就是我们的类型。
您的一种其实就是一种动态类型的系统,就是它有哪些组件,就决定了它是什么样的类型啊,我们再看这个sister,sister呢就是一个逻辑的部分,我们之前说的只是一个数据,那逻辑是怎么执行,它。
其实就是说他其实是把这个数据和逻辑给分割开了,以前我们写类就是有数据有方法吗,只有结构和系统结构,就然后系统的话就是它是剥离于这个剥离于剥离于这个类的,就是剥离于数据的,就是他啊。
他不会你的这个对象耦合起来,好好我们再看这个系统,就是它其实就是一个简单的这个local突破这个system system干嘛呢,就是就是你的位置变换和这个旋转变换相乘,得到一个logo突破这个变换。
它这个系统呢它就是一个规则,这世界的一种规则,就是它会对所有的有这些城市的,有rotation,有logo to work的那些尸体都会做这样的操操作,实体实体实体c它都会,它都有这三个组件。
所以他们都会做这个操作,然后从而就就这个系统会读取读取这个rotation,然后写入logo啊,这然后我们就解释完这个ecs啊,具体看这个代码,其实就刚才这个简单翻译一下,就不是简单翻译。
就是另外一个例子,就是我们就看这个例子,就是啊我们来看就代码中对应那些概念是怎样,是怎样子的,好我们来看啊,我们有两个组件,一个是位置,position i呃,速度velocity嗯。
然后我们的系统呢就是一个运动系统,就是他,这个运动系统是这样的,就是它会根据你的速度去更新你的位置嘛,然后我们就看这个这个这个拉达函数,可以看到它有两个参数,一个是速度,一个是位置,那个位啊。
就是能够加上速度,这里没有时间啊,所以就直接加了啊,这是这个系统叫move,然后我们来看这下面这个就是首先我们有个word,然后这个word呢就添加上这个,然后接着能不能创建一个实体。
我们把这个世界规定好之后呢,就可以去更新它,就是啊对啊,对的时候它就会执行这整个世界理论,就是和世界里的所有的系统,比如说就就有这个move系统,它就会把这个世界里的所有的组件,所有的实体。
它就会执行这个这个好,那我们这个框这里呢其实也是这样子的哈。
那我们来看这个hierarchy窗口里面的每一个每一条项目啊。
它每一条东西它都是一个实体,这都一个实体,然后这个实体右边呢就是这个inspector窗口看到的就是它的组件组件,就是一堆数据,就是它没有逻辑,它就是一堆数据啊。
在system control这里呢可以看到整个框架里有哪些系统,比如呃哪些系统,比如说我们现在运行听着的就有这些系统嘛,然后我们这里找一下,比如说这个dense system,就是你们。
作业里面要写的这个system,你它是运行着的,你勾掉的话,诶你看这右边这个窗就没了,就是它不运行了啊,就是我们的系统呢它就有多个状态,所以首先是呃这个是激活状态,这个是未激活状态。
你还可以把它就销毁掉,或者是把它添加上好,那时候它是未激活的,然后再打激活,ok好,我们再看这个各个实体,我们可以通过右在这里右键可以创建一个新的实体,创建好了,在这我们可以给它添加组件。
在这里比如添加组件,这里有很多嘛,比如说啊我们给它添加,我就随便点了,就缩放啊,旋转啊,然后logo图rotation欧拉旋转,然后translation logo to work。
这个match future就是网格,网格render就是渲染器,就当它有网格渲染器的时候,它就它就可以渲染啊,但是我们现在什么都没有复制,所以没有我们继续添加嗯,好再添加一个一个名字。
这名字可以调调一些,就这样,这里a就调成这样了,我们这个网格实体网格这里我们可以附上一些网格,比如说这个兔子帮你这样附上来,然后因为我们没有给他材质,所以看不到这材质加一个。
然后我们这些材质这个窗口呢去,如果这个这个材质wilfriend,这个材质好,我们就能看到东西了,然后这个兔子呢它很大,所以我们把它这个缩放是吧,小一点,然后其实我们这个相机位置不太对。
我们把这个相机位置移移啊,就一队了,然后这个有点挡啊,算了无所谓。
就这样,我再回回到这里来看好。
我们整个刚才看到了吗,这里有很多系统,这这这样子看的不知道他们之间有什么关系呢,然后这引擎提供这样的。
就把这个所有的系统给绘制出来,我们可以看到这里有很多很多系统,然后就这橙色的框就是系统,然后这个这圈呢它就是组件啊,具体不解释啊,就是只要看一下,就是他们这个系统啊,它其实会读取,会有写入。
它构成很多啊,用这这些读取和写入关系,它构成一种依赖,就是顺序依赖关系啊。
我们就在这逻辑就讲完了啊。
我们看一下我们作业里的事,情况是这样子,就是我们有组件叫dennis data,然后我们有个系统叫doris sim,dal sim,然后我们我们写代码就这么写,就是数据和逻辑拆开来拆开来好啊。
我们这里呢the nose stal,它是一个单例,就是它是一个单例,就是我们不需要说挂在某个组件上,其实挂在某个组件上,但是这个见底,整个世界里只有这么一个组件,所以它叫丹利好,我们就你看这个系统嘛。
首先获取了一个单例,就是这个获取到这个数据,然后这个数据,然后就是执行一些这些逻辑。
执行一些逻辑,然后这些逻辑是就是这些这个就它创建了一个窗口。
然后增加了几个按钮好。
编辑器比其实也不用仔细讲,反正就是我们哦需要讲一讲,就是什么是编辑器。
就是三个,就我们刚才说的那个ecs,它是他是呃,就他其实上下文的概念就是一个是就上下文,然后每个实体它有一堆组件,然后这个世界里面有一些系统。
一个世界它就是一个上下文,我们可以在这个hierarchy在窗口里面可以看到这是一个世界,这个世界里面呢它也可以做一些编辑的功能,因为我给他上了这些系统,就是你可以看到它有一些一些东西。
比如说比如说我们在这里有个有摄像,你可以动这个摄像机,它为什么可以动,因为我们这里有一个rom组件,比如说我们可以这个有个运动速度有调成二,那它就可以运动的就更快一点,更快一点就调成十啊。
他可能就更快一些了啊,更快一些啊,这信这个世界里面的这些编辑是编辑性的编辑,这个信这个世界的,然后这个世界是什么,就是整个这个外面的这editor这个世界,这个世界里面也有一些系统。
有一些系统就这些可以尝试着把这些系统给全部display掉,会发生什么,看一下,哦其实不对,我们这边控制的是这个game的世界的系统,所以其实没什么,就是不影响这个editor。
好这就是edit,就三个字好,接下来我们讲一下这个引擎跟作业相关的一些使用方式哦。
我们这次作业呢我们这次作业是是极小曲面嘛。
极小曲面哦,我们用的是局部方法这样一个极小曲面,它其实在你它是一个迭代的过程嘛,就是你迭代的过程中,其实呃会把持这个网格变得光滑啊,最光滑的时候就变成了一个技巧曲面了,就是带边界的时候是这样。
然后这个操作呢就可以看作是去造一种所有这些取名叫去噪。
去掉系统啊,啊我们来演示一下啊,就是我们现在提供了一部分的代码啊,我们来先演示一下这已有的这些代码是这样子的,好比如说我们就取到这个这个兔子,这个兔子它是由帮你这个这个兔子这个网格的,我们要做操作的话。
我们首先先找到这个dis data这个实体,它有个这个组件嘛,嗯它这里有个可以放是的一个一个一个玉一个变量,然后我们把这个八点呢拖过来拖过来,好过来之后呢,我们在这个系统这个窗口里啊去操作它。
首先呢这第一个按钮就是说把这个三网格转到这个半边网格啊,转过去了,接着呢我们对这个半边网格做一个操作,给它添加噪声,我们就调成20啊,这个加上赵老师,你们看到这个logo里面会有消息啊。
接着呢我们再把这个半网格里面的外面结构里面的那些数据啊,就传回给我们这个三这个渲染用的三角网格传回来,你看这个三角网格就发生了变化,我们把这个扩的删掉啊,啊这三角网格发生变化。
它我们这里还提供的功能就是恢复恢复,然后你可以再看一下他们的之间的区别好。
作业呢就是要对这个半边网格进行一个操作,我们这里其实提供了很多代码,你可以去模仿一下啊,比如说这里这个添加噪声,我其实就是说对对这个半边网格去便利它的顶点,然后对每一个顶点它的位置做。
做了一些加上随机噪声好。
然后我们还有个可选的作业,就是呃着色,我们着色的话就是我们这里就演示了吧,法相就是传当做颜色,就法相当颜色,我们作业是将它的高斯曲率啊,或者其他曲啊作为颜色嘛,我们现在这里是也是法向对比用再传过去啊。
这个东西就有颜色了,好,这样的颜色就我们还提供多其他材质啊,我们看一下是网格嘛,就还有比如说你们会用到的,可以用这个color这个材质他就是一个不是动的,不是带动的啊。
就这两个材质比较比较需要用到了哈,一起再看啊,这个半屏网格这个结构是怎样长什么样的啊,这半边网格呢是就是我们这个啊啊edge mesh这个库,这个库啊是一个比较偏模板的一个库,但还好不是很呃。
首先就是我们看这里吧,首先就是预声明,这四个就是我们整个库会设计四种,对应一项,一个是啊顶点应该是边,应该是三角形,还有个半边这四个对象,你首先就是你自己用的这四个对象啊,先生你好,声明之后呢。
就是得到一个叫trace这样的东西,接着就可以去定义你的对象了,这个之前声明了,现在定义定义这个对象啊,比如说还有个位置啊,它的位置你也可以不要位置啊,反正就是你你可以添加任意的信息,随便你啊。
如果你不添加,就这个网格啊,其实它其实就这个它只处理一个拓扑关系,就是它没有位置,这些什么都没有,它只有一个连接关系,但就看你的任务需要需要什么属性的添加上,比如说你需要一个位置,你就给它添加上位置啊。
比如说你这个边的结构,你可以添加一些函数,比如说添加终点,就是终点怎么算,就是啊就两个端点的啊,那个端点的位置的平均码求平均大于0。5相乘,得到一个位置,终点位置,然后就是比如三角形。
你可以添加一个属性叫面积啊,或者其实我们整个半边结结构它不是只局限于三角形,它就可以是多边形的,所以我这里用的是polyg,我们这里这里的作业呢是三角形,所以啊现在你要判断一下这个三角形。
就这个多边形是不是这个三角形,就是判断这个中立是不是三啊,比如说这样,是不是三,就是它这是我们底层提供的函数叫degree,你可以看到是不是三来判断它是不是三角形,还有比如说这更新。
就比如说你要算面积的话,比如说而且你把这个面积存在这个三角形里面的话,你首先可以来一个这个变量,这是面积,然后你接着就啊来写一个函数,比如说阿they are the area,就可以算一个面积。
那其他的你可以在这个半边这里就随便加自己加,然后我们怎么用呢,就是怎么用,比如说我们这次需要需要是不是边边界对吧,是不是边界,那我们这个网格其实这个嗯我看一下我们的半边网格单元网格。
你可以通过这里啊用这个箭头就可以得到它的很多函数嘛,比如说你要知道它的,你要便利它的所有顶点,那就可以这个那个便利它的话就这样,然后比如说你要知道它的位置,你就可以这样得到它的位置。
然后你判断它是不是是不是边界点,就是比如说这个it’s on boundary,他就告诉你它是不是在边界上,是在边界,说明这个点边界点,还有比如说你想获取它的一领域。
就可以a d j d j是adjacent的意思,ada adj vertex,adjacent vertex,因为它连接域也比如说你要算它连接域的一个。
比如说平均的一个他们连监狱的各个位置的一个军军军事点啊,你觉得你可以讲啊,就是就比如说啊,一个均值点的位置啊,稍微演示一下,哈哈,嗯,我们这里呢我发现可以可以这样,ok那就可以这样。
那就这样就可以算出一个均值点的位置,当然你还要除一下它的,除下它的啊,do啊degree啊,就这样就可以得到它的均值点,我们这里用的类型是呃三他写这个我们刚才说的那个数据库,它有点线面这些啊。
别说是点向量法向这些啊,他们支持的操作是不一样的,但是有时候你不想关心他是什么操作的话,你就可以直接用这个wei这个类,这个类就是支持所有操作,随便你随便你怎么做都可以。
就如果是point point的话,它就不能加,你看他顺利的告诉你错了就点是不能加点的,好这个是可以的,好呃,半边结构就有颜色,二三我们再再说说明几下,就是你怎么知道这个半圆结构它有哪些函数呢。
比如说我们这里有点线面,其实它是继承关系的,就这个它的积累,这个积累里面有一些操作你可以看啊,比如你用可以点到他他的那个源码,你可以看到这这些有一些操作吗,我有一些注释啊,都反正这些操作都挺简单的。
我下面有注释可以看一下,就点会有,然后这个边有些操作,可以让我们再看它有可以取到这个边的邻接的顶点,还有链接的这个半边,还有判断它是不是在边界上,反正就是它有很多函数,这是编的,然后这里有个多边形的。
然后还有这整个网格的,它也有一些函数,啊大家可以仔细看一下,然后其次呢就是看这里这边我是怎么用的啊,怎么将一个渲染应用的三角网格转成转成半边网格,怎么转的。
比如说这里有mesh to have a mesh,这怎么转,然后还有怎么加噪声的啊,怎么调它颜色,就你们有个可选作业,就是调颜色,这里可以调,然后是网格转成文三角网格啊,这这边是这么转的。
就是其实是把他的那些位置啊,然后它的法向啊更新一下就可以好,然后我们你们调试的话,如果要输入信息,用这个啊,s p d log,这个它可以输出到我们有个log窗口好,那你基本就讲到这就好了嗯。
啊刚才是演示部分好,我讲完了,谢谢大家,那个谢谢张涛同学哈。
场内,然后我们回到课程好。
那么这样,那今天的课程呢基本上啊也就结束了啊,今天呃刚才看到平台上面同学们说可能会天天不知道什么原因,有点卡顿啊,那哦没关系,那个我们等一下检查一下录屏,如果这个屏幕录屏是好的。
好吧,刚才张同学把那个由托比尔这个框架给他讲的比较详细啊,同学们那个可能一下子不一定完全能理解,没关系,反正这个视频可以重复看啊,另外呢啊他刚才我看到了它里面已经写了,写了非常多的一些函数。
所以这个作业呢就更简单了,因为刚才他把那个一领域也找到了是吧,boundary to帮你找到了嗯,嗯因为即使你们提供函数,你们可以看看函数的逻辑,基本上你也会操作这个这个一些点一下,没关系好吧。
最好是自己实际操作一下,因为后面的作业量可能会越来越大,你们前面这个数据结构一定要掌握好吧,然后这个这个委托点毕竟是我们呃这这1年不到的时间里面,开发出来的啊,还不带在完完善,那中间难免有一些错误。
也欢迎大家及时在我们的作业,好吧,我们这个创造同学,还有反馈这些如何解决,好吧好,那么今天是呃这个课程时。
今天就到这里好,同学们再见好。
GAMES102:几何建模与处理 - P9:微分坐标 - GAMES-Webinar - BV1NA411E7Yr
啊嗯同学们晚上好,那个啊,今天我们课程开始啊,那么今天的内容主要是讲那个微分坐标哦,哦对我们先把上一次的作业情况给大家分析分析一下啊。
啊不知不觉我们这个课已经做到卓越六啊,本来计划这次课程的作业也就5~6个作业,但后来啊看同学们还是很多呃,能够跟上来,所以我们后面加了几个作业哈,那么希望这个有兴趣的同学能跟上,同学能够继续坚持。
那么还有的同学呢是进来比较晚的话,可以参照以前的作业的优秀代码,还有一些汇报啊,在慢慢后面跟好好,那我们今天呢就把这个作业六的情况给大家讲一下啊。
这次作业呢主要是呃第一个啊对三角网格来进行编程的一个作业啊,用啊utopia有sk 10个同学啊,还有其他两个同学用live i jo啊,挺好,还有有一个用unreal好,其他的啊。
那么具体情况我们后面看一下。
那么这个总体上作业交的情况,只要呃那个完成所有情况都还不错啊,那么能够正确掌握这个网格的点线面的关系的呃索引啊,以及它的处理,这次作业上很简单,你只要把这个点进行一个这个它的坐标进行修改。
修改方向呢就是朝他的那个啊拉普拉斯这个方向去修。
这个移动一点点是吧,然后不断的去迭代啊,可以看到啊,这里有一个动画啊,这个很多同学都做到这个样子对吧,就网格一步一步啊在不断的演化好,那么那么每次做的过程中呢,呃往往歌都是在点点都在修改是吧。
都是按照那个啊平均曲率这个反向按照那个方向去不断的去演化啊,那么这个同学这个可以看到它的边界是不动的,那么曲面越来越光滑,最后呃因为这个电电力可以保证它无穷情况下呢。
极限情况下呢是毕竟以这个边界所形成的极小曲面啊,当然这个这个网格顶点不是太多啊,所以它的光滑性边界上面稍微有一点点啊,看得出不光不是特别连续,这是因为边界采样不足所导致的啊,但是里面还是非常光滑好。
那么这是另外一个同学啊,呃这个呢同学做的呃稍微多一点,他可以他也我们来看看它它的它也可以可视化这个曲率啊,一个一个这个技巧嗯,平均曲率加上高速曲率,可以看到刚才演化过程中,它那个顶点演化的还是比较快的。
到最后一颗光滑曲面,啊这是那个兔子头,兔子头的话只有脖子那个地方边界是有的,然后可以看到它这个你可以看到这个耳朵的地方的收敛是慢一点啊,因为这边提点是点点多,上次同学们做这作业,今天会会展开解释一下啊。
那个耳朵那边因为它电线比较密,所以他的那个收敛速度跟那个其他地方就慢一点啊,因为它那个拉布拉向量比较比较短,比较少啊,所以他要经过很多次迭代这个这个尖角啊,才才会那个消失到最后变成绩效曲面。
但是你只要迭代次数足够多,这个理论上是可以保证啊,它是毕竟那个机要全面,只不过这这一块的地方,耳朵这一块地方呢,它那个顶点比较密一点而已。
好那么这是另外一个同学啊。
这个同学是用啊虚幻unreal引擎做的啊,这个同学一直是用虚幻来做呃,非常不错啊,可以看到它它这个演化过程好,我们就跳一下,中间一些伞是在叠叠带啊,因为迭代过程中呢法相会在不断的更新啊。
所以到最后还是会受点过去呃,上次这里他也看到有一些这个自交现象啊,这自交现象呢就是顶点发生了,就是面片发生翻转,在翻转主要是这个顶点啊,它有些收两块,有收的慢,就有可能导致这样的一些现象啊。
这这个是有可能是可以避免的啊,这个以后我们再讲,就局部方法有可能会导致这个现象啊,那在今天我稍后课程中,我们介绍另外一方法就能解决这个问题啊。
这个是另外一个同学啊,用utopia做的,还有一个演示。
它它已经掌握了这个框架啊,那这次作业也非常非常感谢有个同学对这个框架的一些bug指出来啊,那么能够让助教进一步在完善啊,所以你们发现任何问题都可以及时啊,这个通过左眼也行,通过啊,跟我们的助教联系。
这是三个那个那个球的一个例子啊,我们中间过程就跳掉吧,节约一些时间,因为整个整个演化过程都是类似的啊,就顶点不断不断在在在收缩,好嘞好,那么这些ui呢呃它可以随时调这个参数,还有调整这种啊。
所以这个框架还是提供了很多这种交互方式,能够让大家呃实时查看以及更新你的算法数据啊,参数等等,好了,我们同样我们也会把优秀代码和优秀报告啊啊放在网上分享给大家,相互参考啊,这个毕竟每个你的一个特色啊。
当然并不完美啊,他们也不是完美的,但是相对来说是值得相同,也可以参考的啊,好嘞好那么呃具体的那个一些代码报告啊。
同学们就课后再好好仔细再看一看啊。
还有特别是有些同学呃经常问这,所以能不能缓缓交,或者是再过一周交,这个都没问题,反正我们那个啊网站所有网站都会开放的,但是呢最好是因为我们已经公开了这些代码跟那个报告,所以你们可以自己批改好吧。
那如果需要助教给你们再认真看一遍,给你们一些建议啊,你们也可以单独联系他们,好吧,就我们可能这个课得继续,往往前赶好这课也大半的课程也结束了,所以后面还有一些节课,我们想多给大家讲点内容。
因为这个关于离散网格方面的东西还蛮多的哈,我们才刚刚开始好了,今天我们继续啊讲一下在离散上次无论是连续也好,离散这个曲面也好啊,这个微分属性是非常重要,刻画这个三维空间中的二维流星的一种啊。
这个几何量啊,叫我们上节课讲了一些微分几何的一些基本概念啊,那么在这个网络上面,同样这个概念很重要啊。
那么今天我们介绍一个微分坐标好,我们先回顾一下啊,我们这个已经通过一个作业,大家能够感受到这个网格曲面本质上就是个曲面啊,只不过它是一个离散表达啊,我们上节课也讲到有两种观点。
一种观点呢就是呃就是二维到三维的一个影射啊,就像这个啊,那么在二维中呢呃是一个二二维图是吧,像上面这个是个规整图啊,这个那么每个每个点呢有一个三维坐标啊,像这种地形啊,地形图这种曲面就是一个高高度图啊。
就非常就是一个函数,那么对于一个一般的就是下面这个啊,它它不一定是这么规整的结构,它可能是任意任意结构啊,就任意的这个这个这个这个拓扑啊,就像这样啊,那么他从二维到三维也也也是个影射啊。
啊那么另外一个观点呢就是把它看成是一个二维图在空间的这个嵌入,只不过顶点是在r3 维中呈现是吧,它本质上是一个r2 维图,只不过你这个顶点呢有一个三维坐标而已,如果这个顶点是一个n维坐标。
就是想着n维空间中的一张r b流行啊,因为它本质上是一个uv这样平面,二维平面的一个图的上面的影子是吧,我们以前讲讲这个影视区别大家都清楚了,一个一个曲面的这个本质为主,是是这个呃x到y好用。
x的维度所决定的是吧,那么如果y的维度比它小的话,就是降维啊,如果维度比较高的话,就是参参数曲面,那么所以它也是一种参数型的区别。
只不过它是分片线性函数,有了这个概念呢,这个很多东西就很好理解,因为呃不不就是这个不光滑性差一点吧,因为光滑性差一点,但它本质上也是个也是个连续函数,连续连续曲面,那么我们通常用顶点坐标加这个面片啊。
当然这里改改成边,有些文件用边来那个表达也可以,所以用面片也可以转换成边的表达,用边也可以转换面面表达顶点坐标,这个是公共的,这个是必须给定的是吧好,那么要掌握这个呃离散几何实际上是呃编程。
这不是编程上面啊,最重要要掌握那个数据结构里面的图graph啊,就在这一节课的啊,第三部分的这个数据结构就是非线性数据结构,就是讲图啊,所以呃在那个课程里面,你们所了解的电影边面这些关系啊。
都都要在这里用得上,所以啊同性学这个离散几何的处理上也不难,就是数据结构啊,你把数据结构掌握,再加上对这个曲面本身上的一些几何关系,把它理解透啊,就是上手并不难啊,所以大家同学们心理上面不要有剧本啊。
这个这个压力好盯着我们的测,我会心一步步把那大家这个这方面的技巧,还有知识给它带起来好,那么你是一个有图的话,数据结构有非常多啊,呃这个没有最好的数据结构,只有适合于你应用的数据结构啊。
这个大家也也经过这样一个描述对吧,你现在甚至当然你说我我这个任何算法对于他一定道理对吧,就像那么多啊文章啊都有写出不同算法啊,只有报的数据,没有不好的算法,我算法只能找到时候他的数据是吧。
能拉他的算法最好同样最结构一样,就像线性线性数据结构一样的队列,就是线性表跟那个呃链表啊,这个各有它的优点和缺点是吧,没有呃,呃什么情况都通用的,所以呢啊我们在做应用过程中呢。
选一种你自己觉得适合的这个数据结构来用啊,把它掌握住就够了啊,因为它有它的优势呃,比如这次呃昨夜五啊,有人用utaia啊,就是我们的框,我们提供框架啊,是半边结构啊,这个是大部分框架都提供的啊。
也有两个同学是用那个lib i g啊,就是另外一个这个这个框架啊,那个框架呢是用的这个这个边表啊,这个矩阵的方式去去去存储,同样它有它的这个优势,所以也能做同样的处理,只不过呢某些应用过程中。
某某些应用呢可能这个数据结构会效率高一点,另外一个应用呢那个小那个数据结构会效率高一点,好就取决于你看看你,你说这个这个软件也好,还是应用好,你看这种操作哪个呃,数据结构对它优势大一点,那么采用它的话。
总体效率会不会提升好吧,所以这个不追求多,只要追求你自己的这个应用,作为初学者的话呢,我建议大家先用一种把它把它用熟了,别的数据结构呢是同样的一个用用法,只不过可能逻辑上点线面存的关系不一样啊。
那么关于数据结构还有这个观点,大家呃这个还有个认识,就是啊这个做编程或者叫算法啊,空间和时间永远是一对矛盾啊,你空间什么意思呢,就是你存储啊,你存储量多,假设你数据结构里面存储的点线面信息很多。
你把每个点的领域都存下来了啊,当你用的时候呢啊就时间就非常快,你很快就找到他的一些关系,就不用去找,也不用去算对吧,所以这个存的多,就就当时online的时候呢算的就快啊,就是你这你这算法性能就会好。
那你消耗对很多对吧,这是一种策略,还有呢诶你存的少,我我我想节省一节省一下内存啊,或者我的我的这个存储,但是呢很多关系呢你要实时去找,就像半边结构一样的,你找一一领域都要去根据半边一个可以去找。
这至少你要你要按照指针遍历一遍,你才找得到对吧,所以你没存起来,但是你要找早的话呢,就要消耗online的时候呢,你的cpu时间啊,所以你存的少计算量就就会多。
是你的选择是这个程序的性能可能就会慢一点哦,所以你是存的多算得快还是还是存的少,算的慢啊,这个就看你这个呃就是呃存储有内存跟着你的计算cpu啊,这这个中间打了个平衡啊。
这个去嗯在算法层面上你要综合考虑啊,这里我给大家稍微提醒一下啊,没有最完美的数据结构也是在这个道理上面好了,那么我们看一个网格,一个网格就是这样一个图是吧,只不过每个面的是三角面啊,比较特殊一点啊。
所以他他的那个那么这里有个概念,我们经常要提,就是我要考察一个点,比如说这个点啊,我要考察在这样一个点,这个点呢它的信息呢就是由他周围的这些顶点和面片所来决定的,对它的性质就是说这个点到底是弯的怎么样。
是不是要考察它的一些领域是吧,我们啊局部微分几何的任务就是在研究这个点无穷小领域的性质,在这里的话呢,因为无穷小就是这个面片所组成的这样一个局部领域啊,这就这个这个性质,所以呢我们用一领域啊。
就一零什么意思呢,直接跟这个点有边相连的这些点的集合就叫它的一领域,这么那么用这一领域性质来刻画这个点,因为我们所知道的信息也就这么呃,一领域跟它相邻的这个三角片的信息,所以用啊研究这个点的性质啊。
啊无论是算法向还是取率,大部分情况下都会用它的这个应领域信息,当然你说我可不可以再扩展范围大一点,用什么二零域,三零域可不可以,当然可以好,我们来看一下,你如果是二零的话呢。
就跟他这个点呢有有两条边相邻的这个点,这这三个点也算阿里云啊,好把它101的所有点这样一个一个一个一个这样便利好,便利完就是它的一零的所有经点的一零域就是变成了201啊。
所以所以这个啊这个阴影部分呢就是这个顶点的201,所以呢这个领域越大,你这考虑的这个几何信息啊,可能会去会越多是吧,嗯在微分几何里面,当然我们都是在一个这个点的无穷小领域来考虑,但是在遴选情况下。
无穷小不可能是吧,所以我们用英领域来建设它的无穷小,只要这个网格足够密,这些这些边足够短是吧,如果你想考虑更大范围,因为一领域毕竟有些时候会有脑动噪声的影响,所以考虑大面积啊,有案例从以此类推。
你三领域就是201101的所有的点的集合也可以找,所以说你每个点都可以用它的局部的一些呃这个数据来进行刻画啊,那么那么上节课我们也讲了唉,策划这个点的一些局部信息,你可以用用离散方法啊。
可以用它一领域的这些面片的一些性质来逼近它阅读法线,我用一零的这个面片的法向的平均来禁止这个点的法向,可不可以没问题啊,这是一个离散观点,还有一种连续关键的是什么,我取这个点的一个一领域或者二领域。
那么我我就利用这些点呢,然后在这个点上面,怎么你和一个光滑曲面啊,你可以在这里建立局部坐标系,比如说你查法向为z轴,然后再取啊,以法向垂直的一个平面,就是它的切平面啊。
取x和y就建立一个x y z这样一个取这个这个坐标轴,然后呢你用这些点呢啊,就作为这个这个这个标签下面的一些点,那么就拟合一个二次函数啊,或者三次函数,当然是指两个方向都是啊,双23 三式中项式。
你合出来以后呢,或者差值,那么这个点在所在点的这个曲面的性质,我就用它来作为这个点的微分属性,曲率啊,法相等等啊,咱们用局部拟合的方法也可以做好吧,所以拟合方法大家都很熟了啊。
我们前面前这个课的钱一大半都在讲这个拟合方法啊,那么具体用什么函数,你自己去挑是吧,还是用8b f都没问题啊,所以这些paper呢一看都能看得懂了啊,这个图册函数空间不一样啊,好了好有,有些领域的话呢。
其实上节课我们也引进了这个概念,好我们我们把这个红点是某个顶点,它这个蓝色点呢是它的一定域啊,我把它这样下象征性的刻画出来哈,那么这个这个这个城市点呢就是这一领域的平均,就是这些点的坐标啊,加权平均。
但这个圈子如果是均匀权,就是它的重心啊,就是这些蓝色点的重心,当然啊我们也可以可以推出其他形式的啊,就像中心坐标那一次课讲的,就是你可以从不同的意义上可以推出这个口腔品的权啊。
就是这个与它们的几何相关啊,它们加起来相关,所以这个这个点呢你可以把它看成是一个平均,这平均可以是个v t的啊,就是加权的平均啊,这个圈你可以等等全啊,就是等重的,也可以是这个跟他们几个相关的好。
这个点的跟这个这个点本身可能不会重合啊,那么那么如果这个蓝色点是假设共面啊,这个这个层次点可能在这个共面平面里面,这个红色点是呃,就是就是呃应该是偏离这个平面的,所以呢它们之间有个距离啊。
这这个距离啊就是这个向量这个距离呢还是上数量的这个红点啊,偏离它的一领域所在的假设是平面所在的平面的远近啊,这个向量是不是越长,这个点是不是越越越尖锐啊,所以呢能不能发现这样一个向量啊。
可以刻画这个某个点啊,像像一个伞一样的啊,这个闪电它的尖锐程度,这个项链越长,这个这个现在这个地方就越尖啊,这个这个向量等于零,表示这个红红的就跟橙色重合,那表示这个地方很平,对啊。
你们昨夜5月六就是什么不断让这个红的朝这个橙色的去移动嘛,直到极限的时候,他们重合不就是非常非常光滑的嘛是吧,但是他又不认识平面,因为边界是非平面,所以就呈现极小曲面的状态啊,所以这个向量很重要。
这个项链呢实际上是我们就给他一个一个非常酷的名字啊,马上出来了就叫拉普拉斯算子啊,这为什么这个东西就像一个向量叫拉普拉斯算子啊,拉帕斯同学们在那个呃别的课也不一定是微分几何啊,拉姆拉姆双子是什么呢。
呃就是就是如果你你看你们学过多元的话,就是最底下的这个形式啊,就是一个函数二元函数啊,他拉不拉算子呢,就是它的两阶微分算子啊,所以是个椭圆形的微分算子啊,这个就是这个形式f关于x的两阶。
加上y y上加上y的两阶这个偏导啊,这和叫拉普拉斯啊,他说对于一般的这个多元就这种形式对每个每个变量啊,就是三元四元啊,就是多变量多一点啊,其实是一样的啊,这这是二元啊。
好那么说这个这个从几何的角度上来看的话,它是什么大不算子是一个梯度的散度,散度的话呢是什么,散度就是这个向量的,因为梯度是个向量,向量的三个分量的和啊,叫散度啊,所以算顺子这样啊。
就是啊嗓子是这样这样一个记号,所以所以t度的散度就是两层,就相当于是调查的一平方,这是数学符号,用就用这种方式去定去定义的话呢,就可以定义推广到一般的流行空间,像这种定义的是什么,是取有坐标系了。
所以我们经常看得到的,像特别是工科学生来看的微分算子,就是阿巴斯只是这种形式,因为它怎么有坐标系,有具体坐标系,所以它的表达式样,但对于没有,就是一般的欧式空间啊,这个这个真正的流行上面啊。
用这个符号就可以推广到别的形式啊,我们看一下啊,对我这里就提了一下,如果是定义在一般的流行,甚至这种非欧几何上面流行,可以用这种形式,当然这些符号大家也不用看啊。
看的话呢呃可能有些同学一看这个符号就头大了啊,你就不用关心,反正就是你们所理解的这个如果有具体坐标系x y,那么这个行程就这样好,这是啊同学们经常在很多地方能看到的拉拉扇子好。
但因为问在哪个村子是这个形式是吧,为什么呃,在流离散上面的话,刚才那个算子在这一点的这个拉布拉算子是这样一个形式呢,对吧好,那那个我们呃怎么来理解啊,那么具体为推导嗯,可能要严格,那那个需要花的时间。
但是可以怎么来理解这个事儿啊,我们来我们来看一下这个算字形式是什么啊,我们我们把这个算字写在这,就是关于x的两阶,加上关于y的两阶,如果我们是用这个差分的形式来看啊,我们在意味着差分很好理解是吧啊。
我们要去算以这个点的导数啊,导数就是f关于x的一导数就可以进时乘什么啊,我们用y i加一减去y i,来进行这个导数啊,这个呢叫向后差分,因为是用后一个点减去前一个点啊,这个叫向后差分。
那么当然你也可以用向前差分,用x,嚯y减y减一,就是用它的一阶是吧,好对于二元二元的话呢,是是是一个,xy z是吧,好那么这里就有两个方向,一个x一个y是吧。
所以他这边的这个两阶的一个差分是等于一阶差分的差分是吧啊,我们这里距离呢就假设都都是一样的,就等于一好,那么就是这个进制好,那么那么这个值呢是不是等于x就是上面来y i加一减去y i是吧。
那个下面如果是等距的话,减去y减去y还减1÷1是吧,转换一下,换一下就等于两倍的y i加上负负得正yi减一,可以看到他x在x方向上,就在某方向上,它的值啊是x方向上的三个值啊,就是中间那个值是-2。
就是一和-21这个形式同样在y方向上面,就是另外一方向上面也是这个值,我这里可能符号有点乱了啊,这这里的z y都应该是变成z啊,那么那么另外啊在另外方向上的y22 间呢也是一样好。
用z好把它加起来以后呢,你发现整个的这个形式呢是什么,就是就是用这个点,我假设这是规整点,这个点用它的这个点加这个点,加这个点,加这个点减去四倍的,因为这是两倍嘛啊,减去四倍的。
所以说你看就是用它的左上下左右的这个点的和,减去中间这个点的四倍啊,那么你看刚好是这个最易领域的加起来平均啊,减去它是吧,所以我们就类比对于一般的这种多数v5 啊,16啊。
哎我们也用它的101的平均减去它,就作为它的拉普拉斯算子的近视好,所以这是一个比较直观的理解,拉到算式,为什么我们啊这个用它的一领域啊,这个符号ni就表示它的一零域。
因为这一领域这些点的和但是可以加权啊,然后呢作为啊这个红点啊,然后然后这个点vi到这个点的距离,这个德尔塔i向量就是这个箭头,就作为这个拉普拉斯算子的一三近视啊,我刚才是只是从差分角度上告诉大家。
这样这样近视是是合理的,因为这个从形式上来类比啊,这个一般这种great的规则,这个定义上的差分算子,这个呃两阶的微分算子,当然你这个这个进程是不是真正的,毕竟原来的这个呃理想的这个问题拉不算子呢。
那么就要证明当这些这些网格顶点无穷趋向它的时候,这个算子是不是极限能够趋向于金,金真的拉达转子啊,这个是数学上可以证明的啊,当然这个证明呢呃也是非频繁,需要满足一定的分布啊,这我就不展开好。
大家去中间记住啊,好我用这个点跟它1。16平均这个差这个差那是一个向量,这个向量呢我们把它叫做一个拉巴拉斯算子,也叫做拉普拉斯坐标好,那么这个因为它刻画了这个点的一定域的性质。
所以我们也把它叫做微分坐标好,如果不思上下文的歧义情况下,我们指微分坐标就是指这个拉普拉斯坐标啊,明明这个拉拉坐标呢在某些地方也叫散形算子啊,散金啊,坐标啊,好这里个算子啊。
大家听起来好像挺挺高大上是吧,算是事实上就是一个操作啊,这个这个是数学家发明的一个东西,of operator啊,就是操作,只不过它定义不是在定义在我们欧式空间,它可以定义在内空间。
定义在流行空间甚至黎曼空间啊,只不过啊这个为了区别于一般空间中的一个计算啊,我们把它美其名曰算子好,所以算子你就把它理解成是一种运算就行了,好拉帕斯啊,这个算算子好好了。
那么在win几何里面有一个平均曲率流定理,这个定理非常精妙啊,我把它解释一下啊,这个定理是说什么呢,是假设这个点不动啊,这个点我我来考察它的这个领域的一个性质好。
我在这个点周围取一个非常小的一个封闭区域,这个区域的边界呢我把它记成这个符号叫闸马,就就就进入这个符号伽马,那么那么这个伽马呢,那这个上的每个点就是边上的每个点跟这个点之间,我看是不是要退出好。
就就就这里任何一个点,这里任何一个点,那么跟他的这个连接,就这里形成一个向量,就是这个是吧,假设这个是v,这是v v i好,就是v i减去v,这个就是就是这样一个向量啊,我方向一反应没关系啊。
这个向量呢沿着这个伽马做一个线积分,看到没有,这个v在嘎巴上动对吧,然后沿着弧长做这个这个线积分啊,现积分就是你们微积分里面学的那个呃先积分面积分啊,好这是这是这是注意啊,是沿着曲线做积分啊。
这个积分定义大家还有印象,这里取一个无穷小是吧,然后算这个啊,这个东西跟切线的一个一个一个点击是吧,好你就可以做积分,这个积分值呢四是一个值是吧,好那这个针呢除以规划除以这个伽马的弧长,这伽马弧长。
那么那么这个值啊,所以伽马是不是可以随便取,不管怎么怎么取,但呢我越缩越小,越缩越小,说到它无穷小的时候啊,什么意思呢,就是当我这个伽马的弧长趋向于零哦,注意哦。
始终要呃这个vi要在这个伽马这个封闭区域里面好好,那么这个词啊,只要伽马这个无无那个无穷的缩小,无穷缩小趋向于零的时候,这个值啊,极限是一个长值,这个场子呢只跟这个点的微分属性相关,是个什么值呢。
这里两两部分,一部分呢是n i,另外就是这个点的法向,还有一部分的这个h vi就是这个点的平均曲率啊,所以很奇很奇妙的一个这样定理啊,就是这样一个值的极限是是什么,是一个向量。
就是个向量呢啊啊这个这个最终的极限是一个向量,在向量呢这个方向呢是法向方向长度呢是它的平均曲率的大小,这叫平均曲率流大小啊,那么这个这个这里的这个这个值啊,我们一离散是不是就这个形式是吧。
哎作为点跟vi的这个相差性玩一下,因为积分就是西格玛的离散对吧,这个nice就是这里点的个数不会画,所以呢我们拉帕斯啊,哎几何意义上还挺有道理是吧,就是这个平均曲率留这样一个定理的这样一部分的离散啊。
所以唉我们用用这样一个形式呢来呃,从这个观点来看诶,也是一个比较好的一个离散的啊,这个微分属性好,所以啊拉拉算子我们后面经常要用啊,这个大家呃我们慢一点发展时间来理解它啊,实际上是这个算子啊。
这个或者叫拉普拉斯坐标形式上非常简单,就是这个点跟它的一领域之间的差啊,然后这一个下一平均啊,如果如果你把这个v同时移出来,就是就是等于v i减去西格玛啊啊v啊,v属于这个民权啊。
地方往这来是不是v跟它作为一领域的一个平均嘛对吧,因为这里西格玛vi加了n次d选d i一比,就这就是一,所以从这个你你你这样看,这样看是一样的啊,就是vi减去它的一零平,这个平均就也是这个拉布拉德尔塔。
或者是看到这种形式都一样啊,所以所以啊我们这两个形式在不同的时候有有不同的这个这个表达好,所以呢我们几个亿啊,拉普拉斯拉普拉斯这个坐标呢也刻画了,刻画了这个点局部的一个什么性质,它的平均曲率性质。
因为因为它的极限是平均曲率长度啊,方向是n i是吧,所以哎这个拉普拉斯坐标应该也是刻画了他的一个平曲率的一个大小,当你这个领域越来越小的时候呢,它这个长度越来越极限逼近它的这个啊这个平均曲率是吧。
当然要足够小啊,这当然是个极限的性质,你你不是说我我这个随便取一圈就是一定一样,不不是这样,道理是极限情况要逼近它,至少它可以作为啊平均曲率的一个近视啊,但是这个这里面这个权呢就就有讲究。
那么我们中学上可以推导,我们是用这种cos电圈是最好的啊,是用平行区域这个流所推导出来的啊,对于我们中心加权,所以你们可以看到你们在左右左右六的时候呢,你们你们这个圈去取经行权。
往往它的收敛性自交性会很严重啊,嗯如果你们取成这种圈,这个圈就是这个几何相关啊,那么这个自交性不是那么严重,不是说它没有啊,但也可能会会有,但是它性质会比啊要好,因为它刻画了他的几何性质。
因为它考虑到这些角度和边长的关系,因为他们他这个这个圈就是从平均曲率以上推导出来的一种权啊,叫cos圈经常用的,所以你们以后做做这个后面的这个应用啊。
后面编程你们所有所有的这个拉布拉斯加以下选项全都取成这种,全好吧好,我这里说一下,因为这种权呢就是是严格的从啊这个平行垂直流这里推导出来的,好好了,那我们来看一下那个坐标有啥用啊,有啥用上用处。
你们左右六已经体会过了,左右五已经体会过了,因为这个向量呢刻画了这个点,远离作为这个呃呃平面的距离是吧,所以你这个向量越短就表示这里就有月光滑是吧,所以哎我们上上节课上上次作业就把这个点往往这里偏移。
偏移一次不够就偏移两次是吧,所以呢这个呃这个向量呢就体现了这个平均曲率的一个性质上,是我我也可以把它看成这个点的监督,这个这个项链越长越尖越尖锐,这个向量越短就越平滑是吧。
所以你也可以把它看成是一个几何细节的一个度量啊,这个这个地方几何,如果这个向量等于零啊,就很小,这个这个地方非常光滑,就没有细节是吧,细节什么细节就是那些尖锐的地方所呈现的性质对吧好好。
那么这就是我们这个啊上节课所做的事情啊,就是这个拉巴斯给他加一个拉姆达,然后对这个顶点进行一个变换,新的点,那么那么这个点的监督啊,因为这个点就变变从旧的变到这里来是吧,像这个闪就是没有那么尖了是吧。
那么这种操作呢啊把这个顶点进行变更操作呢,哎我们就把它叫做拉巴拉斯光滑啊,或者叫拉普拉斯啊,这个光顺这个什么时呃,呃叫光华光顺,有的时候不同的书都翻译成中文,就一个意思啊,就是叫叫光滑,有点像什么呢。
下面我们前面讲这个这个曲面造型的时候,叫叫叫割脚,就把就把你看这个点跌到这里来,是不是相当于是把用用这些面片啊,把这个割掉了,用这个面片把它割掉了是吧,就做了这个假设淋浴是五就割做了五次的割角啊。
把这个角给他削平啊,啊这个削平了这个点动一下啊,它实际上是你也可以把它认为是用了五个面片啊,15个的话呢把它消掉了,就把它削的更光滑一点啊,把这个尖尖角啊就变得没有那么尖啊。
所以你们上次昨夜所做的就是在做拉普拉斯光光滑啊,做了无穷多次,让它变成非常光滑是吧,那么无穷光滑非常光滑以后就是直角曲面,因为你边界给我定死了吗,边界不让我动嘛,所以所以就是变成一个无穷方法的一个曲面。
就是极小曲面啊,所以你们上节课就已经把这个光环已经已经体会了啊,没问题啊,因为每次作业呢都是有他的目的啊,所以你们只要跟着做啊,这个作业就让你们能够理解啊。
非常一步步把那理解这样一这样一些操作的这个本质好好,所以拉普拉斯光光滑就是可以看作是什么一种对这个信号,对这个几何信号进行一种啊不断处理的过程啊,这个处理呢啊我再从另外一个观点来跟大家解释。
你可以看看这个这个形式就是这样,拉巴斯坐标加上一个偏移量啊,这个这个更新这个顶点就可以了,那不动不能做是吧,to这个所有顶点是吧,然后你如果无,如果你repeat啊。
infinity times就是那个无穷次数,它一定是收敛到一个集交集交前面是吧,但是呢平时我们不会啊,去光环,我们只是去点点啊,就去点点的话,实际上就是我们我们后面下节课就会讲去造。
你想象一下一个一个网格顶点上面,由于这个采样或者是我们测量仪,或者是我们计算的时候会会发生一些误差,产生一些噪噪声噪声,我想把它把它把它去掉,怎么样,我就用周围把它平均,把它把它不吃掉啊。
那么这个观点呢你也可以把它看成是一种什么,就用周围的一些点的平均来进行对它进行操作啊,这也是一种滤波,叫filter,如果同学们学过这个信号处理,信号处理什么信号处理就是用周围的值啊。
把我这个值啊稍微平均一把啊,滤波滤波就是那个卷积啊,那么今天我不去讲这个卷积概念啊,下节课会讲啊,那么我们先先理解啊,它就是一个什么,把这个顶点往下压啊,你可以用我们以前细分曲面也好。
那个那个北京什么样,它这里呢就是我和平面割角,把这个角给割掉,割掉了以后呢,就让它变成光滑是吧,我们还记得把上基本曲面,我们通过割角不断让它光滑,变成一个机无用方法,不过这里隔墙呢比较特殊啊。
这个这个101点都不动是吧,只是把这个角给周围的一些东西多进过那个割掉啊,割掉以后把它变得不那么尖了,好那么这个真正的这个数据上映就是它是一种滤波滤波算子滤波操作,那为什么是滤波,我们啊这个课再讲啊。
好我们再看一下,就你们作业做完以后,你就这个过程就清楚了啊,一个一个战局面,你你对这个每个点点做几次就拉不拉,smooth,这个这个局面就会变得光滑一点,你看到这这里这里一些啊。
你可以看到打光以后就会发现这些细节啊,在这在这里面就没有了,变成光溜溜的是吧,你再一步一步操作它,好多这种细节就全部没有了啊,咱们同学们也知道你无穷次操作那个兔子,可能就说说说说的一个点了吗。
好那么我们一般在做去造啊,在做呃这个噪声去除的时候呢,我们不会啊,apply无穷多次,我们稍微稍微apply几次,把这个表面的细节以及造成把它去掉,干掉就可以了啊,好那么如果真正是用做去造啊。
比如左边这个物质顶点有有一些这种误差扰动啊,那么你可以看到如果你你去的比较多的时候呢,像在最右边啊,就是这个兔子太光滑了,丢掉了很多细节,你可以看到这个眼眼珠子都没了对吧,诶像中间有有一个过程呢。
唉有这个这个细节呢,眼珠子还保留的挺好,所以说诶你是你要做去做的时候呢,你是到了太光滑了,也不好啊,这个叫over smoothing,就跟我以前讲你和一样的overfitting,什么叫过拟合了。
那么这个叫过光华,那么这里就有个度啊,一个do呢是这个兰姆达怎么去,还有一个呢是这个迭代次数怎怎么取,就做多少次啊,你这兰姆达太大,很容易造成过过拟合啊,不过光滑啊,就是那个兰姆达怎么取。
是是是一个是一个是一个很重要的一个度量,还一个呢你你是迭代还是叠在1000次,还是我永远坚持下去是吧,你不可能用永远连降下去的话,就一定这个兔子变成一个点了,收缩掉了,那么啊这个是不是几次对吧。
所以这里面就有个度啊,这个具体的有没有方法研究呢,我们后面再展开啊,我这里提一下这个先把这个问题给他埋在这里啊,那要思考一下好,那么我们回顾一下这个也就是平均曲率流。
我们同学群里就开始来理解java算子,所以这ab算子呢也是多两了这个点局部的微分屏曲率啊,所以一般呢你可以把如果你有办法知道这个点的平行取率,你可以把这个平行取率啊放到这里来。
然后再再去给他拉姆达来这样一做啊,这个平曲率加上这个不就是拉不拉拉布拉斯嘛是吧,那这个n如果你有更准确的信息un的替代,所以用这种来做迭代也是可以的,好这就是把拉拉斯直接写成平行取率。
乘上这个罗某的这个法向的一样形式啊,这个叫平均几率流好,那么平行旋律流呢,这个啊我刚才刚才也提了一下,就是它它的全呢是这样一种特殊权,这是可以从像从外面几何离散化可以导出来,就是他的圈是什么呢。
就是跟他的这条边所对的两个角,阿尔法一贝塔,这cott啊除以二,这样拿到外面去就是4a嗯,因为这个这个这个局面肯定是ra吗,这里是四好,所以大家以后做一些几何相关的圈子,尽量用用用这样一个圈好吧。
那么平行这个性质比较好,就是我这里稍微提一下,就是刚才在做作业时给大家演示所的时候,我埋埋那个问题,就是那个兔子耳朵是不是很密啊,他名字说的时候是不是就说的慢,是因为那个地方就很密了。
好我们这里就来解释一下这样一个曲面,就是左边这张这张图啊,你看这里面是这部分是顶点很密,这部分顶点稀疏一点对吧好,那这就是你可以看到,如果你是按照同样的这个呃拉普拉斯这个这个做了是吧。
你可以看到诶这个地方呢它啊应该还还有rank图,这个图呢就这个地方呢收缩的非常快,它这个顶点c它的拉巴是向量长,所以先点点马上就就变矮了,但是如果你用了这个名举例这个数量呢,哎这个收敛性呢就就就一一致。
就不会一边说的那么厉害,这个说的很慢,这个这个顶点密码,所以拉拉向量很短啊,就收的慢,这个长,那么你如何采用名,就是什么就能保持这个几何也是密还是稀,它的几何不会跟着变得太多啊,我这里提一下。
可能下节课也会还提到这个问题啊,好,好那么刚才那个局部的拉巴斯,这个大家都清楚了哈,我们讲的慢一点好,那我们后面快一点,那今天那个还有后面还有一些拉巴斯好,那么现在大家讲讲一个叫global啊。
全局的拉普拉斯是什么,那么什么叫全局好,我们从这个极小曲面定义出发,知道如果每个点的平均曲率都等于零,那么它就是什么等于零的话,它就是一个极小曲面是吧。
所以我们上节课呢就是进那每个每个每个点不断的去修改修改修改啊,迭代迭代迭代迭代无穷多次,就趋向于这样一这样一个结论是吧,唉那我从另外一个角度上,我们能能不能这个啊来发现一些他这个方法的一些不足呢是吧。
我们卓越六已经发现了嘛是吧,呃是求上次做作业就是诶但是有些地方慢,有些地方快,还有呢容易产生自交啊等等这些问题啊,有没有好的方法来解决呢,啊我们这里来看一下啊。
好我们的目标是希望呃做一周就生成一张绩效体面是吧,希望每个点都跟它一领域啊,啊这个这个中心不吻合是吧,所以呢上次每个点最低,最后这点最后的这个曲面就是假设我那个已经得到这个极小曲面了。
是不是每个点都要满足这样一个关系,关系是不是关于vi的所有,如果你把这个vi全部把它作为未知数的话,是不是每个点的v i都满足一个方程,这里全就去cos 0的啊,就是确实cos的好,我们怎么来看的。
是这里的网格有好多顶点,我们把这个顶点呢就就就比编个号,这个号呢没关系,v1 vr意识到有n个顶点,有vn好,那么这里一个这样一个方程表示什么,表示这个vi可能是在中间的某某一点是吧。
跟它的一零与vj vj的可能是这里一个这里一个这里可没关系,好这个矩阵来看的话,就表达成这一行只有若干个是非零,其他的都是等于负-1或负ω个i j,这一行啊本来是所有顶点都要去相乘是吧。
但是呢这一行呢只有这一领域之间这几个点所在的这个像是非零,你看这是我们i解是吧,所以所以这一行呢是一个非常稀疏的一个一个一个行,只有假设这个点只有六个领域,那么这一行的只有七个字是非零顶点数。
vn点点可可能是1万 100万啊,所以所以这是一个1万的一个向量,但是只有七个是非零,因为这多数是六啊,如果多数是五的话,就是六个非零好,那么这样的话呢。
这个矩阵a是不是对每个顶点都可以构造出这个方程来啊,就是这样一个行行行向量是吧,vr也有一个v3 ,也一个在在平均曲率的那个情况下,这个边界上的点啊,如果这个是不是不动的话。
我把变量上点呢就把它移植到啊右边去也可以是吧,或者说我就一起表达,只不过呢这些点呢是是不动的好,这样的话呢我把这个a把这个矩阵呢就把它变成一个a,那么这些v呢啊x啊,就等于零好变成降一式好,什么意思。
要求得一个理想的这个网络曲面呢,事实上所有顶点的需要满足一个方程,这个方程什么意思,每一行主要就是这个拉布拉斯这个向量等于零,大家能理解吧。
啊这是我们不是通过logo一步步做来来逼近这个这个这个值等于零,是什么,是满足我们我们就这个理想曲面,这个曲面在哪里,我不知道,但是我知道他要满足这些式子,这是我1年里就变成这样一个式子。
这个式子呢这个a刚才解释了一下哦,它是个什么n乘n的一个矩阵,但是它非常稀疏,1万 10000x10000的一个矩阵,但是呢每一行只有七个啊,或者若干个是菲林,大部分是四零啊。
所以所以这个矩阵呢是一个这样的一个l啊,这个l l就这样一个结构啊,每个这个食指我这边是平均曲率等于零啊,就把它逼成等于零,但是这个值是delta,所以我把delta放在右边啊,每个地方delta好。
那么对于x分量,y分量和z分量是这个举这个食指l这个矩阵呢是是是是是同样的,所以呢分量xyz就分别分别具有这样一个方程,就是a a就是l这是看看这里用了l哈,l x等于调查xl y等于调查y z。
这叫做z啊,如果你如果你把它看变变变成向量形式,就是l ov是吧,等于交叉,就是加上x加上加上y加上这三个分量v就是v x y z的分量啊,所以分量表达就是就是具体实施的时候,大概是解三个方程。
但是呢实际上是本质上是一个向量方程,向量这样一个方程,前面只要大家数学上面都理解了,实际上你只要是向量的一些操作,基本上都做非分量操作就行了,就是哦不来一三次而已,好好哎好。
所以这个拉普拉斯矩阵呢就这样概念,我们把这个网格的这个拉普拉斯l啊,就l v x v y v z啊,就是有三个,那么这三个l是共用的啊,所以你把这个变成一个向量,把这个变成向量是吧。
就是继承了有的时候有时候就集成lv这一交叉,表示它是一个向量值,实际上就是三个分量,那么同样如果我一个图我知道了每个点的调查,我们通过这个方式一解,是不是就可以还原出,还原出原来网格。
假设l我就把它记下来了啊,这个关系l就是表达他们的邻居关系,我也记下来了,是不是通过解方程就可以求出v2 ,所以如果我有办法记住交叉,或者是这个这个把调查这个存放在哪里是吧。
或者我把它调查进行一个变换啊啊比如说把它缩短个10%,诶我这这个v是不是可以重建,这不就是你们上次作业六的一个作业吗,哎我把delta每个delta都缩短10%吗,哎这个da是不是就变成了da一撇。
这个l是不不变的,诶我是不是可以缓缓解,哎,就这样的话呢,我通过整体来求出你们上期作业一次迭代的新的顶点,而不是每次都是apply local的性质,如果我在这个想求它的极小曲面,是不是in加到等于零。
是不是就得到这方程就lv等于零,求出这个v可以得到技巧曲面,所以这是另外一种全局,把零点做一做一个这个这个这个约束啊,然后得到一个方程啊,这个方程当然这里是一个非常好的,这个是个线性方程。
但这个线性方程呢又是一个非常特殊的线性方程是吧,叫稀疏它的元素啊,这里可看到大部分元素14=0是吧啊,这这个就举得越大,这个吸收性会越好啊,所以这个拉普拉斯啊,这个矩阵我们就定义好了啊。
咱们矩阵实际上是指它的它是字啊,它非满字的,它是n减一,如果是就是一个那个connect match,就是一个mac的话,如果是有多和mac分离的话,就是n减c啊。
反正这个这我们基本上就一个个连通的完麦序来考虑啊,n减一,所以它是非满制的,非满一定一定一定要加条件是吧,就是约束一个点,或者是把边界点约数组啊,这个方程就可就可解了是吧,当然多了以后呢。
它这个可能有有这个这个这个没有唯一解,就要给大家最小二乘。
我等下再来再来再来讲好,那么这里就得到了主页六的改进啊,也是希望我们这周让大家做的啊,好同样我要我要生成这个网格的交界面,我不是每个点迭代做,我怎么做呢,同样检测边界功能偏见是吧。
好我每个内部点是不是都可以构造方程组in da等于零,就是刚才a为x等于零对吧好这个da变成零了好,然后去求解这个方程组边界固定了,里面每个点都有一个方程,所以n个点就按照内部点有n个方程。
就所以就差是个这个这个比如说里面的点是n,那么n乘n的一个这个这个这个方程你去求解它啊,那么就等于零,就把这个新的坐标给它求出来,求来以后把它更新,把它画出来啊,就得到了计要曲面。
所以它呢不是通过啊每个点局部操作不断迭代啊,他是直接就得到解,但是他要这个这个代价什么需要求解一个整体的一个方程组啊,这个方程组的l那是一个吸收方程组,那么那么你们再想想你们在作业上课。
作业室求那个三次样条的时候,是不是构造过一个方程组啊,就是三对角啊,就是叫叫三湾区是吧,所以你们已经啊体验过怎么去求解方程组了是吧,当然那个三湾区是一个非常特殊的。
才可以用追赶法求这里的这l呢也是很特殊,它对稀疏在数学上,在计算数学里面求这种系数方程组啊,是有很好的方法,就是迭代法啊,这种题算法啊就是非常有有有高效的啊,如果你们去学会计算数学。
就知道当主有好多这种迭代法去求解啊,当然你们如果为了练手,你们自己去实现一遍也也不难,但我建议大家呢,现在呢就是你们这个很多数据库啊啊都有啊,很成熟的这样一些这个接口。
去直接去求这种啊这个超大型的这个方程组,因为这个l越大啊,像这个点乘100,100x100,可能你自己写一写也能搞定,但是我1万 1万100000x100000,甚至是百万,成百万级别的这样一个方程组。
你们写的效率就就不一定高啊,而这些数据库里面是经过大量的这种数据学,会计算的一些这种研究工作者啊,研究出很好的解答方法,并且也保持很稳定啊,数学库有很多啦,你早年的intel的mk l。
还有我推荐大家用用这个这个梗啊,他的名字就是a根啊,在网上我们在我们作业期,助教会把这个ion库的资源给大家呃分享出来啊,这个这个icon呢就是那个叫特征值,i跟value是吧。
就是特特征值i跟vector叫特征向量啊,就是取了这样一个词作为那个酷酷的名字啊,i跟库,所以你们只要学会怎么去构造这个方程组啊,方程组呢你要你们也要去什么,知道怎么这方程组怎么表达。
它是一个它是一个系数表达啊,它这个系数方程组,所以如果里面有n n个顶点,所以你们要存n平方的点啊,这是最最最原始的存储,而一应该是变成了1万哇,这个存储量根本吃不消是吧,所以我们其中或者叫稀疏矩阵。
我们不是这样存n平方的点好吧,n平方的元素是什么,是用索引,你还记不记得数据结构里面存储这种稀疏结构用了什么双向链表啊,叫叫十字链表是吧,列有个指针列表,行有个指针列表啊啊我非常印象非常深刻。
当时学那个时候正面极其复杂是吧啊,这个大家也不用担心,我们也没必要让你们重写,你们只要去看i跟库里面这个这个这个稀疏矩阵是怎么存,你把它看懂啊,然后你就通过一个数据。
你去学会怎么把这个领域的这个这个系数啊,变问的数据结构好,你就扔给它,它求出来,你把它顶点坐标拿来更新就出来了好吧,所以这次你们要来体验一下这个这个非常重要。
因为很多这个后面处理都要用到拉普拉斯这个方程组啊,大家在一点点练,注意这时候呢你一定要看懂它的说明啊,他有些方程啊,矩阵矩阵呢是以行为主,有些是以列为主啊,你不要搞错,搞错的话,你求出来就不对了。
好好这里提一下。
好进去继续喝口水啊,然后那个,我们下面再讲这个参数化啊,时间哇就一小时了,好我们快点参数化一个很重要的内容啊啊啊,这个这个图我们以前也看到过啊,就是一个二倍就行。
就是一个围着一个参数域到它的一个隐私对吧,所以这也是r2 到r3 ,我们我们多次强调是吧,这个你是看它的位数这个高这个维度低,五差猥琐,是本质上是二维是吧,所以说诶这个曲面来讲,实际上它本身为都是二维。
因为它是从2~3的二维到三维,已知这个曲面是一个二维流形,如果它的三维中给我给我看,我看到他的一个三维空间曲面,它本身是一个二维对吧,所以我可以把它降维成一个二维,把它拍平,如果从几何上来看。
我把我把这个曲面啊,把它以这个每个点都把它拍到平面上去,如果前面是一个非常特殊的,是个高度长,就往这个x y平面把它投影,是不是就可以变成一个二维是吧,所以我们把一个曲面,把一个二维流形曲面。
把它把它变成一个二维上的一个图,把一个三维的这个空间中的二维的图变成一个二倍中的图啊,这个过程叫做参数化,因为哎你把它拍平以后呢,每个点的参数,它的uv的参数是不是我就找找找到了。
那么这个点呢我可以可以定一个影射,那是是一个f uv是吧,f只不过是x x y z3 个分量嘛,x等于x u v,y等于y u v接近于j u v好吧,他的话就是找这个面二倍锥形曲面的。
它的二维的对应啊叫参数化,你所以在呃不同的地方,有些叫promise promiration啊,叫商业化,有些叫frightening,叫展开啊,做做做做手指这个过程好。
那那参的话呢就定义我就定义清楚了啊,对一个曲面我每个点找到它的平面的一个对应啊,每个点找到对应以后呢,这个三角形对应就有了是吧,你看这个黄色三角形就走,就对应这个三角形啊,因为每个点p一对。
这里u1 p2 对,这里的u r p3 对,这点p u3 是吧,那么如果每个点都是是有个对应关系,这个牛讲的这个中间我我隔了一个缝,把它把它把它摊开来啊,就想把那个牛给的皮给它展开啊。
就变成右边这个这个图啊,那么那当然这里有好多性质可以值得讨论,我们今天先不讨论啊,比如说诶我这里三角形是方向,我这样一点也不能发生翻转,翻转翻转这个这个顶点就搞在一块了,就不好看是吧。
现在我希望这个扭曲保持的很好等等哦,我还希望边界呢不要自交是吧,就这个性质是不是会更好对吧啊,这个呢高级的刚才的话呢我们过一两周再讲,今天我只把这个概念性讲讲,好好插的话,就是只把它展开这个任务啊。
是非常重要,在很多应用里面都要用早餐的话啊,我们后面作为一节课来专门讲,今天只是把概念给大家那个讲一讲好,他有什么什么什么用的是吧,最直接啊,你要给一个曲面上面贴图贴纹理,你你是不是要把这个图呃。
我们图是一张纹理存储好讲,假设你这个图是在这啊,就上面有有有有一个图片,那么图片上面这个点是不是就这个顶点就对应这个这个图片的,一个一个一个这个颜色,这个颜色就把它引过来啊,就变成颜色。
所以这样的曲面上的颜色就得到了我们三维曲面的,这个下面的颜色是通过它的参数化所对应的纹理啊,怎么这个我们给它一个特殊的名字叫纹理啊,那么纹理uv坐标啊,那么这里每个点就有uv uv值,每个点就有uv值。
这个uv值它的参数化平面说这个所对应的这个uv坐标好,那么在很多软软件里面,这个也叫uv图展开呃,呃在对美美工来讲,它有的时候叫uv啊,什么什么什么什么啊,展开呀,uv图啊等等是一个道理啊。
啊就像做uv的话,美工需要花很多很多时间的啊,那么历史很长了啊,这个插画你可以看到这个啊地球在地图就要把地球给它展开啊,啊那个地球是客场曲面吗,应该是不可展吧是吧。
因为你这个只有可转曲面才会每个点展开来是没有扭曲是吧,所以一般曲面一定是用扭曲,就这那是每个有善心的挤压的厉害以及挤压的比较少,同样就对地球仪来讲啊,地图来讲也一样,因为地球是单曲面。
它展开一定是有扭曲是吧啊,这就是我们经常看到的地图啊,是这样子,大家都很熟是吧,实际上是你可以看到啊,我们的地图呢实际上是从金线开始切一条缝,就切一条缝啊,哎呀这个不好画啊,缝然后把它展开。
你可以看到越靠近赤道扭曲实际上是越小啊,你可以看一下赤道上面摆一个圆啊,这个圆的大小是一样,这里那基本上吃早人保持很好,越早到南北极啊,这个这个扭矩越大啊,就这个这个一个圆同样大小的圆啊。
在迟早是出大小啊,在求面上是一样大,但是展开以后呢,这次被拉伸成一个椭圆了啊,就一定是可展,一定会有形变啊,具体怎么控制形变,我们以后以后再来讲,今天只把这个概念讲一讲啊。
好那么但是虽然这个这个可以展开,但是它一定发发发生形变和扭曲,所以这里的度量事实上是不可靠的,是什么,是要是要是要考虑这里的扭曲以后的度量才才可靠,所以你在基础上测是测不准的。
越靠近赤道的地方测这种距离是还可以的,越靠就南北极是是完全错不准的啊,不知道不知道是放大多少倍是吧啊,比如啊你你去算啊,这个我们北京这是纽约啊,啊已经差不多隔了半个地球。
它的距离你用地图上去这样算算得准吗,来思考一下啊,如果有去过去过美国的经历啊,飞机它一定不是沿着这条线是飞吧啊因为你把它看这个球的话,中国北京在这,美国是在背面是吧,也也是在北半球。
所以他是老这条尾位这条小小圆飞的是吧,所以飞机呢会会走到北冰洋啊,绕绕回来飞,因为因为在球面上这是最短的啊,这条线是沿着这条线走的,这个比他比他长长多了啊,所以这是这是这是很不准的啊。
你可以看到我可以沿经线这样割啊,展开来就很像也可以这样隔一招纵向是吧,引言北纬啊,但是这个是为什么是北纬的,就是我们中国呃,把中国放到中心啊,这个我就简单讲讲啊,讲讲如果沿纵向就是就是我们传统地图啊。
是就是那个隔离位置啊,这个这个这个这个这个啊00号天线啊,能不能把它纵向格啊,正常开,就是这样啊,这样看的话你可以看到我们在这在这在这哈,那个纽约应该是跑到这了,就这个距离更更精确啊。
你可以可以可以看到,如果你在这里测的话,有11。9万在这里测的话,1。1万像它的8000km相当于一半了啊,这也是不存在是吧,好那么这种地图我不知道图啊,大家有没有看看到过右边的地图啊,很少啊。
这个在市场在军事上是用右边这个地图的啊,对在军事上面,因为军事上面这个地图你要你要真的打,打到美国的纽约是右边这个地图,这个是跟准确的啊,所以大家懂这个道理啊,我就有这个说说明一下。
那么参的话呢是一个非常基本的一个问题啊,提供了一个本真维度的参数,因为组合一种降维,并且很多三维曲面之间关系啊。
可以通过参数空间来处理啊,所以我们啊啊这个是非常重要的啊。
我们今天呢就讲一个简单的方法。
方法非常简单啊,你们做完了刚才说绩效曲面就会做好,我们机械曲面是不是把边界固定了,然后通过每个点的拉布拉斯等于等于零啊,就可以求求解刚才那个lx等于零,就可以求出这个曲面是吧,左右六是什么。
是是不断迭代啊,来逼近它,那么现在呢通过一个方程组就一下子就出来了,也是固定的,好,我们再来想一下啊,如果边界这个边界是空间的,对不对,如果我有办法把这个一圈这个封闭边界,把它映射到一个矩形的上面。
具体运势怎么印,这是另外问题啊,但是我的顶点顺序一样,但是最直观就是根据弧长的大小,这里多多长在这里比例是多长是吧,好运过来,是不是我同样解解解解这个方程,我可以保证这些点全部落落在这个平面上。
因为这是平面矩阵嘛,啊平面矩形嘛是吧,就得到一个解,因为这是平面的一个啊,正方形边框一定是平面是吧,哎是不是就得到了这个点在二维中的一个影射,这里也是一个网格,首先诶我们如果急交警面那个作业做完以后。
再进一步把边界把它拍到这个平面上一圈马,他就得到一个他的在二维中的嵌入啊。
就是一种参数化啊,所以就出来了好这就是早年一个非常简单的线性传统化的一个方法啊,这方法是什么呢,我把这个开面的边界把它拍到平面上啊,啊最好是凸啊,为什么图我怎么怎么解释啊。
比如说是一个原t上面或者是个方形上面,然后通过解刚才那个方程啊,每个点都等于它的一领域的中心啊,边界固定了,边界是已知量,只要求解内部的这些点啊,求解这个刚才的l x等于零,就是内部那些点边界是边界。
这些点呢是出现在这个b右边了啊,好啊,就是空间一个网格就可以把它参数放到一个平面上去啊,那么这个是一个西式方程组,就西方程组呢跟看到那个呃看看绩效全面的全球法是一模一样的,所以做完那个作业。
你把这个边界再处理吧,就变就可以求出它的参数化了,这猜的话呢实际上是这个方法,刚才啊我们这个地方给大家引导的是吧,这个方法很早就有了啊,63年啊这个tt啊,这年啊这是个人啊,63年就证明了啊。
如果这个边界上是边界是位于凸多边多边形上面啊,矩形啊啊方形啊,求圆上面都可以,那么可以证明刚才写的这个lx等于b,这个b就是边界上的点在右右边了啊,好中间点是x是未知量解,这方程我可以理论上证明啊。
证明啊这里里面的点一定三角形一定不会发生翻转翻转,什么翻翻转就是这个顺序就是右手系,那么这这个点的顺序也是右手系,并且这里面没有这么一个一个三角形,会发生左手系的这个啊顺序啊,这个非常强啊。
就既保证了什么,我这个网格如果是个流行,这算跨过来以后,他也是个很好的流行,不会有flip翻转,就是flip,forever,因为如果发生flip有应该有方方方出来以后,我我我我一个纹理贴到这里时候呢。
就是什么,就这里有好多三角形都对应同样一片纹理,这里就有鬼影啊,就是这个纹理在这里就不连续了啊,大家能理解吗,就有就有logo不同的顶点或三角形硬,直到同一片区域上面去了啊。
就是这个flip的这个发展的原因,就是这个函数在这里点的局部的亚托比小于零了,因为一般都大概率就是啊这个啊,我这个以后我再再来解释这个隐私的亚科比啊,跟这个翻转移的关系好,所以他的话你们也会了啊。
所以所以这是作业啊,常的话也要做好一不同的就是什么,就是把刚才做那个全解法再加一步变化,那么就把这个边界运行意识到平面上就行了,这两部一模一样,就是这两步是刚才已经讲清楚了是吧。
然后呢只不过要把边界印证一下,因为编辑器啊,你按你按你那个那个边界的这个弧弧长,把它应用到一个正方形或者或者根圆上面啊,这个非常简单啊,稍微细心算一算一下啊,按这个弧长算啊,就是就比例分配一下啊。
然后呢然后再再再办的一个纹理嗯,这个做网文里都有,你找一找啊,然后呢嗯你把它插画以后呢,这能切切切个纹理,把图像印到曲面上就可以了啊,这个应该是games 1019教大家就会的啊。
我们这里告诉大家怎么去生成张纹理图啊,怎么去做它的这个这个参数化的结果啊,你要就是同一学传统学学就告诉你怎么画,但是那怎么来呢,这个我们这个课要帮你们解决这些问题啊,哦好现在你们知道了,给定一个网格。
这网格可能是美工,也可能扫描扫描做的,也可能是你通过别的方法做的,我会把它插进化到一个评论区,你们至少现在有方法了是吧,是不是,不过这个方法可能比较简单啊,扭曲可能会比较大啊。
你可以看到啊啊这里好比如说这里顶点很密。
这里就就仅仅很很就很挤嘛,是吧啊,那么嗯在这篇文章里面啊。
我们也会课后公开给大家啊,那这篇文章里面就是这里有不同的权,实际上是这个权呢,大家也也不用多实现。
你就就用cos你就行了啊,我这里你提一下啊,好那么你插着画完以后呢,这三个球是你们上次作业也用到过的哦,然后加上这样一个纹理啊,假设这个纹理我们特意用这样格格点,格点的话,可以看出啊这个映照水面上的话。
这些格子大小到底是怎么样啊,用不同颜色就表示我知道哪一片印到哪一片去了吗,啊可以看到啊,像这一片格子比较大啊,这格子比较小,说明在前面在这里发生了扭曲了吗,啊你可以看到这个扭曲的结果啊,啊所以你猜的话。
完了以后纹理映射马上就出来了,好,那么这个是就是刚才说的拉普拉斯那个那个向量,就是那个坐标的全全不一样,结果不一样啊,就是这就是那那个组合的vi减去西格玛欧米伽i j vj,你这个全啊。
我们这里建议大家用口腔里那个圈口袋,好像是这个结果相对来说会好一点啊,如果用经营权是上面那个结果均匀权伤口啊,一般不好啊,看到歪歪歪歪扭扭的哈。
嗯你可以看到对于这种开口很小和口口在这儿啊,那么顶点很多,往往这个地方的顶啊很密很密很多吧是吧,它会挤在一块儿,就因为这里很多很多点都会在在,在这里就容易发生数字上的一些精度问题。
可能一个这么小区域里面就有好几百个甚至上千个点啊,那个数值误差一点点误差,可能这个这个错误就就会有问题啊,所以这里啊怎么样让这里有更好的性能,你这你们这里也可以想想。
这这里一个三角形面片可能跟这个地方成面片,在空间上这里看大小差不多,在这里呢这个面片段变成变得非常非常小了,在这里呢可能是这么大对吧,所以它的扭曲在在这里是极大极大的啊。
所以它的三角形被被扭曲形变得非常厉害啊,这边呢相对来说好一点啊,这这个是这个是是很不合理的,因为你贴贴个纹理,你你你这里一个格子一个一片颜色,跟这边格子像这里的话。
可能这格子就这么大,这格子呢可能是很大很大啊,那么还有还有还有还有这里一样,这口这个是这个曲面口口在这里啊,就脖子脖子这里是有个边界印到一圆上面,这肯定全部挤在这里了。
你可以看到这里一片一片区域格子跨了好大很多点点,这里呢你格子这么小是吧,所以很不均匀啊,那么呃但是它的一个参数化的简单啊,然后有效,什么叫有效呢,就是不会发生翻转啊,嗯怎么去解这个均匀化这些扭曲。
这是未来的事情好吧,我们这节课先先就接受这个结果啊,但是他至少给我一个比较好的参数化,没有翻转嘛对吧,只不过扭矩大了一点,即便大了一点,这个未来再来改好,这是映射到不同的图片键啊。
结果大家看一下这个例子啊,嗯当然如果一片去做到它的话。
就很容易发生这种问题,就是很多很多点啊,别被截在这儿是吧,就就导致这么大的扭曲不好看嘛是吧,所以很多很多美工呢也会去人工的去割。
把这一个五大模型啊,就割成若干块,每一块的才能化啊,像这个这个才能画到这啊,身体呢参考到到这儿是吧,然后再把再把它packing,什么意思,pin就是把把它把它装箱装在一在这个矩形区域上面啊。
然后在上面再在上面贴图啊,就这个样子啊,这上面的纹理有了以后呢,再把它运过来啊,就这个这个这个u v图啊就出来了啊,美国的有的时候是直接在这里上面画,也可以在在上面画画它的颜色啊。
最后呢还是要有张这个uv图出来啊,所以你这所以呢这些白的地方就是浪费空间,因为你在比如说是1024x1024,你白的越多,实际上是白的,这个信息是没有的啊,对这个曲面的纹理是没有贡献的是吧。
所以但是你要增加它的存储,所以这里面怎么pk比较紧,也是里面的一个问题啊,以后呃我们介绍几个工作给大家参考啊,如果你们要去做算法的话。
那么这就是一个兔子分成多块的一个纹理贴图,右边是它的一个u v图,有的有有的这个uv图加上几个兔子啊,然后通过那个啊,这个图有个名字叫athless,有个谢谢主体叫cht片。
那么那么这个图叫arless,纹理地图啊,在软件里面看到这个词,就是指这个这个地图啊。
还有一部分内容,那我们尽快讲完好,那么三句话讲完明白了以后,我们再看一下这个啊,就是再回到前面,global拉普拉斯smoothing,我们这里再增加一点这个内容啊。
这个网格进行global的smoothing,还记得哈,就求解那个lx的调查,德尔塔,让德尔塔每个德尔塔缩短缩短这百分之啊,这个十上升你们操作的时候呢,往那个移动是不是相当于把这个拉普拉斯缩缩短是吧。
就拉8+1撇等一,比如说0。9加塔,这个零点就是指这个这个这个向量缩短了哈,那么你更新一下啊,哪些求解就变变成它了x一撇了哈,sp的这个调查一撇,这是交叉,原来交叉交叉变变成变短了。
就可以求出一个smooth的一个这样的网格好,你的网格很容易发生发生坍塌收缩是吧,所以呢哎我能不能一些关键点,关键点也叫特征点,然后我再让别的地方所说是吧,就怎么来加这个约束。
说的话呢啊啊我们这里就呃先把这个概念给大家介绍一下,叫叫叫叫heart constrain,跟soh变什么意思呢,它的方向就是说这个这个约束一定要满足,说什么约束呢,可以给它缓一缓。
就有点像我们优化里面的minimize fx subject to一个gx等于零,那么这个这个元素如果是一个啊,一定这个叫half constrain,这个约束一定得满足。
如果你说我这个约束呢可以给他放放放松一点,那么minimize加上一个兰姆达gx平方,我去循环,这个就变成一个无约束的形成分子,我希望这个值尽量小,因为这个值就不能太大太大,这个这个就很小是吧。
通过这个兰姆达拉姆达越大,这个值就越小,这个叫说不成sop constrain啊,它变成一个软约束上,是相当于是把它变成目标函数啊,啊如果是大成子的话,这个约束也要完全满足,因为它偏导等于零,好好了。
那么我们这里如果加约束的话,我们回忆一下拉普拉斯是这样一个构造哈,如果我们把xyz全部把它列的一起来,就可以变成一个这么大的矩阵xyz,因为有很多约束是对xyz同时要满足的好。
我们的举例这个性质刚才讲了好,如果我们希望把这个点fix这个点就不变成变量了,因为我要固定这个点,那么如果变成一元素,这个这个点就不作为变量啊,解没问题啊,但容易发生什么事事情呢,因为求解那个方程组呢。
实际上就是把那个误差平均分配了嘛,所以这个地方呢就比较怪怪的尖尖点,大家可以试一下啊,我们一般不不是,如果你这样用户以固定这个点呢,我们会把它变成软约束,让什么让误差平均分配啊。
所以我们会在下面这银行呢再加一个约束,x等于多少,x等于多少,y等于多少,等于多少,这样的话呢这个矩阵就变大了是吧,如果你想加这个降价呢,再把这个矩阵一点,虽然这个这个这个方程矩阵啊是变成了非方阵了啊。
变成一个狭狭长的,但没关系,我们可以在最小从意义上去解它啊,因为它它是个非方阵了嘛,啊等一下啊好,那么就把刚才那个带约束的这样一个呃拉普拉斯什么事啊,就变成这样这一个问题我希望他的拉巴斯尽量小啊。
这是拉普拉斯啊,诶我希望某些点呢要靠近我的标准那些点我也希望他他尽量小,中间加一个圈,就平方要不要注明没关系啊,啊这个平方可以可以不要好,这是个圈啊。
求解它就能找到一个最小二乘以上的这个东西加一怎么来呢,啊之前啊假设你想呃我这里再讲另外一个约束,叫叫叫叫三角形fish中心约束,我希望这个三角形的中心保持不变,这个是不是满满足,这样在一个三个点的方程。
三个点是未知数嘛是吧,所以呢哎你也可以把这种约束也加到这里来,所以这样一个方,现在你可以重新加好多别的约束啊,这时候就就相当于是是是这样一个约束,好好也可以加边的中点,我保持不变。
或者是呃一人语的终点保持不变,只要是所有是线性约束,都可以在这个矩阵这里加按约束,所以这里主要是线性元素,对于xyz的一起的线性元素啊,这时候这个l就这个这个这个以前是方正的这个l啊。
就就一个l11 个非方阵是吧,这个方程怎么解呢,啊就到这里了,你加了好多约束,顶点约束,面临约束,还有别的约束,最后就把它变成一个这样的这个a呢就不是方方正了,就不是一个啊呃啊方方正正的一个矩阵。
它可能是个很是这个狭长的好,那么对这个呢就是我们啊没有一是吧,所以我们会怎么会会会去解minim值这个最最小值就行了,好那么这个东西minimax差就等价于求这个啊,那么这个方程呢呃因因为它是非方阵。
所以我们用最小2x1去解,大家听清楚吗,这个这种过过你过啊,他解法就是这样啊,就是左边乘上一个ae啊,aa的那个转那个转置,他是这个时候他觉得方方算了嘛啊这个转制成它不一定是个啊,半半是吧。
如果它的列满值的话呢,它有一定是个镇定,所以它它就有逆,所以它的a t乘a的逆乘上a t b t b过来啊,这个是把密啊,就求求求求求这个点,那么这个呢就叫他的那个normal equation。
啊叫反方层,我们以前在很早,第二第一节还是第二节就讲过这个最小二乘拟合的法方程一样道理啊,所以我们是求这个带约束这个这个最小二乘解,这这这一页有的啊,就是求它的法方程啊。
就知道这个解好这个方法减减震方方程呢也有也有很多技巧,因为如果这个这个a呢不变,只是这些坐标在在变的话呢,我们这个这个方程呢啊这个逆啊啊,因为球技是比较烦的,所以我们是用它的分解,是一种分解技术。
这个呢在icon库里面也有啊,大家不用自己实现与小实现的话,还还还还挺麻烦,这时候呢你就分解一次,是你就可以重复去用啊,呃后面可能我们讲后面编辑时候还会讲到这一点啊。
这时候呢你可以看到如果我约束一些点不动啊,那么就可以什么防止这个曲面收缩很厉害,因为我相当于钉牢的一个点,把它钉钉住了吗,这些例子,那么你这个参数不一样,你可以光滑的不一样是吧。
然后这里有个l o d的概念,就是越来越光滑,后面还有啊,我们还有可能就来不及了啊,我先快速讲一讲吧,这个下下节课我再展开啊,编辑什么意思呢,编辑编辑就是我们过一下,我把把这个问题先提出来啊。
好我我有一个曲面网格曲面在这里,我用户呢希望拖动这个这个龙这一点把它往上移一点,就是我只是以一这个点问这个龙的其他点变成什么样子,是和我用不要的编辑是吧,比如说诶这个如果这如果全面变成这个样子。
这点点更新完以后更新成这个样子,诶是不是就有点像我们把这个笼子嘴巴给掰开是吧啊,这个叫编辑编辑呢,实际上我们用户往往是只是编辑一个点,我算法就是说我们的这个处理要求,你怎么根据这个点移到这个点的位置。
就是从这移到这呃,去求出其他点的坐标,怎么求啊,大家可以先想想好吧,那么这部分呢我们那个啊可能只能下下下都来讲,这个事情在本质上就是什么,我再提一下这个思想本质上就是什么,这些每个点变成哪里。
这是用户交互交互的吧,我们我们尽量去保持他的拉拉巴斯就行了好吧,因为拉普拉斯度量呢每个点的局部领域嘛啊局部的细细节嘛是吧啊,我们只要相当于什么我我这一圈之外都不动,这一圈里面顶点都作为变量。
都保尽量保持原来这个拉布拉向量是不是就保持这个曲面的性质是吧,只不过呢这里要要做的细点的时候呢,因为这个点到这里来的话,就发生了一个小小的旋转,所以这里的拉普拉斯呢也要经过一个小的变换,这个才合理。
如果你保持原来的拉普拉斯,可能就效果不是那么好好吧,细节啊,先把这个论文扔给大家哈,大家可以去看一下,就是呃每个人每个点局部拉普拉斯都保持同样的长度,但是方向可能会发生旋转,怎么怎么处理这个事情呢。
啊我们啊我们下节课再再再再来讲吧,今天,我把作业给布置一下哈,时间也快到了,也给给大家一周,因为上面这个方程组够电啊,你们只要只要拿呃,建议大家啊,那个任务就是这样,就把作业六的交交学院再做一遍。
只不过是用全新方法做好吧,这做完以后把边界变一变,就得到参数化了,很很快啊,所以本质上就在什么学,学会怎么去构造方程组以及整我去调用i跟库去求解这个方程组好吧,放下不必自己写。
自己写那个求解器怎么求解这这个吸收方程组的话,这个没有这么快啊,去直接调查啊,嗯这个这种不用重复造着造轮子重复,除非你以后专门去做那个高效的这个计划优化算法啊,那么你可以去自己去写更高效的这个方程组。
求别气啊,在这里的话大家先用用起来啊,先做我们做的这个这个几何处理事情好吧,然后局面也一样啊,都是我们上一节课给你们重复拿来用就行了,所以你们这里两个人一个是怎么去构建,就是那个拉拉拉l哈。
第二个怎么去求解求解求吊吊吊吊这个库啊,不要自己去,那么你要去调它的话,你一定要去看它的接口好吧,按照以前的经验呃,我是本上本科生的通信学作业,这种这种作业一个礼拜是人工完成的啊。
所以你们提早规划一下啊,这个周一周二周三稍微思考一下哈,稍微了解一下i跟库,不要多,周六日来做可能就来不及了啊,这同学们啊都是喜欢到最后一个晚上来做,有的时候遇到一些困难就不可预料。
还不如前面先了解了解一下好吧,关于啊这个啊怎么用啊,如果遇到困难的话,我们助教都是非常有经验的好吧,哎这个啊这个可以马上回答大家的问题啊,你们甚至可以跟注一下私聊,可能他会给你一些技巧,好吧,行对啊。
我本来想这个主页是留两周啊,我后来想了想,我后面还是给到呃那些好学的学生多多一点训练啊,一周啊,那唉呀说到底啊嗯嗯每个人从同学们都是这样啊啊差大部分吧,你给两周给三周都等价于给一天啊。
你们基本坐在最后一天来做是吧,所以给一周你们你们也够好吧,就一周一周的话呢,上次本质上是等价于给了你们1~2天啊,两天就可以做完嘛,好好那我就时间就那个不不在给长一点啊,那么呃能做完的同学一定能做完。
做完同学你给他一个月,他也他也做不完好吧,所以我们后面还是希望桌布是几个作业,好,让那些呃那个第一梯队的同学能够得到更多的一些技能和知识,好吧好,那么呃同学们由于因为有些学校要期中考试啊。
期末考试啊可能比较忙,那你以后再来补也行好吧,这个呃我们就先带着先锋队先往前赶,那么如果由于呃不同的人同学时间不一样,你们在后面再再来补也来得及好,那么这次卓越的就到这里嗯。
其中我们中间啊这个介绍的一些文章我们会也挂在网上啊,给大家参考好吧,如果没有的话,你们可以去问助教要啊,或者提醒我们一下,我们挂在网上好,那个视频同样啊明天会挂在b站,如果需要了解细节。
大家也可以去看好,同学们,咱们就今天到这里为止。
GAMES103-基于物理的计算机动画入门 - P1:Lecture 01 Intro to Physics-Based Animation - GAMES-Webinar - BV12Q4y1S73g
行吧,我们那个我们开始吧好吧,大家好啊,非常高兴,那个今天我们那个我们来开这个课,今天是这个课的第一天嗯,我们这个课的名字叫做基于物理的嗯,计算机动画入门呃。
从这个名字其实我觉得大家可以大概知道这个课是关于什么的,这个是关于物理模拟技术的,然后怎么样把物理模拟技术应用在这个呃计算机动画里面,所以说我们这个课呢呃主要就是讨论这些技术,怎么样利用这些技术。
然后因为这是一个嗯这是一个基础课,所以说我们主要是还是啊涉及到这些呃技术的一些基本的一些原理啊,基本的一些算法啊,然后呃我们也会有相应的作业去覆盖到这些知识,能够帮大家巩固到这些知识啊。
主要是这个目的啊,然后呃希望大家就是上了这个课之后啊,如果说对这个东西感兴趣,然后有进一步的想要提高的要求的话,以后也许我们也会开呃对应的高级课程,关于物理模拟算法的一些高级课程,然后我是我叫王华明。
然后这个是关于课程的一个邮件的地址啊,这个鼠标能看到吗,鼠标好像,啊可以看到这个是关于一个呃课程的一个邮件地址,如果说大家有一些关于课程上的问题的话,可以发送到这个邮箱啊,会有相应的同学啊。
或者是别的老师来解答啊,然后这个下面这个是games论坛的一个链接,一些我们的包括我们的一些回放啊,包括ppt啊,都是可以在这个上面找到的,然后我们的作业啊,之后的作业也会发布在这个网站上啊。
包括这个作业的一些内容啊,然后需要所需要用到的一些工具啊什么的,都是可以在这个上面找到的,呃然后我们开会的时间是每周一的四点到五点半,这个大家都知道了,呃,我是把时间设成一个半小时。
但是呃具体的时间可能会有有有有一些变动,比如说有的时候我们的内容比较多,可能会稍微长一点,有的时候我们内容相对少一点的话,我们可能会结束的稍微早一点,这个反正就是大概是一个半小时左右的时间,这个不一定。
然后我后面可能会留,比如说呃十几20分钟或者半个小时的时间来答疑,如果说大家有什么呃知识上的问题啊,或者有其他方面的呃,关于图形学的问题的话,嗯就是这个时间可以啊,通过弹幕的形式呃来问嗯。
然后还有一个我想说的是呃咱们这是个线上课啊,但是从第三周开始,也就是呃今天是第一周嘛,然后下一周是第二周,然后到下下周我们会有线下的课程嗯,然后到时候这个就会变成一个转播的形式。
相当于然后具体线下的地址,我是初步设想是会在林地科技的会议室呃,如果是在杭州的同学,尤其是浙大的同学会比较方便一点,因为那个地址就在浙江大学紫金港校区门口啊,门口步行大概几百米就到了,就非常近。
所以说如果是杭州本地的同学,或者是杭州周边的同学,如果感兴趣的话,可以来线下课,然后呃一个好处就是在于就是你在现场就可以直接问问题,然后直接回答你的问题,然后就是会比较方便一点。
或者是你课后有什么呃问题啊什么的都是可以呃来讨论的,这个会相对来说线下课会一直持续一直持续到结束吧,嗯从第三周一直持续到结束,因为我们总共是12周嘛,大概到过年前的前两周左右的时间,大概回到那个时间。
嗯然后我们作业包括一些课程上的一些答疑,然后包括作业的一些批改啊之类的,我们会有规定,我们会有ta来来辅助做这个事情啊,然后具体的联系方式,包括之后的呃怎么样操作的话,我想到时候会公布给大家。
到时候再看吧,好不好啊,然后关于上这个课,可能大家比较关心的就是因为今天是第一节嘛,然后呃大家可能比较关心的一点,就是我需要准备什么样的知识来上这个课,对不对,因为我看到很多同学都有这个问题,呃。
我个人是想把这个课的要求降到最低的,所以说呃你需要有一些基本的数学知识,比如说线性代数,还有微积分,然后还有一些基本的编程能力就够了,相对而言就够了,呃如果说你有其他的一些储备的知识呃更好。
我等会儿也会具体的讲到,但是基本上我会基本上把这个标准设定在这个呃一些基础知,基础的编程知识跟基础的数学知识这一块上,嗯然后下面这个是那个我们的微信群嘛,就是说如果大家还没有加的话。
就是可以扫这个二维码加一下这个微信群呃,加入这个微信群,然后到时候会有一些呃呃课程的关于课程的一些最新消息啊,然后包括如果说我们的日程上有些变动啊,呃也可以通过这个微信群了解,嗯然后我想稍微呃说一下。
就是哦对了,就是我们今天要干什么,这个事情可能会比较重要一点啊,我今天因为我们是第一节课,所以说我想主要是做两个事情啊,第一个事情是嗯跟大家讲,就是说我们这个课是一个什么样的课,是干什么的。
我们要学什么样的东西呃,然后设计什么样的内容,然后作业大概是个什么样子的,就会把一些关于这个课程的东西呃,关于知识的东西给覆盖到大家呃,然后呃第二点就是嗯就是关于这个课程的机制了。
就比如说我们需要阅读哪些东西啊,然后需要哪些预备知识啊,然后需要啊作业是个什么样子的,然后课程的这个大概的规划是个什么样子的,所以说这是两部分内容嗯,关于数学的东西,我等会儿会呃稍微讲一下好吗。
然后因为这是个基础课程嘛,然后我当时设计这个课程,主要也是根据我之前在以前呃,之前在学校里教书的时候,我们那个时候也有一个相对应的类似的课程,主要是面对大三大四的同学的呃。
然后基本上是假设这个大三大四的同学,他之前没有上过图形学,对图形学可能没有什么了解嗯,然后呢他作为这个把这个课作为一个呃图形学的第一节课嘛,就是呃作为一个呃一开始入门的一个机会。
所以说我基本上在课程的设置的难度上,也是包括这个预备的知识上,也是这个也是这么一个标准吧,就是设计为这个这个标准,当然如果说研究生,如果研一研二的同学,如果说大家对物理模拟比较感兴趣。
呃想要呃学习这个方面的话,也可以也可以上这个课,基本的难度设置是这样子的啊,然后线性代数这一块呢,因为嗯图形学里面用的是比较多的啊,所以说呃这一块肯定是少不了的啊,包括微积分也是新型代数。
主要是呃矢量矩阵,然后线性系统,然后比如说一些呃特征值分解啊,这些基本概念你要有对吧,你可能不会手工的去做做s v d,但是你可能需要了解s v d是个什么样的事情啊。
然后包括其他的一些呃关于线性代数的一些概念呃,然后微积分的话,你可能呃你需要了解一下,就比如说基本的求导应该怎么求,对不对,然后求导的时候有个链式法则,我不知道大家知不知大家还记不记得。
就是当你求导你有好多个函数,然后这个函数又是另一个函数的函数的函数的时候,那么你会有一些链式法则来呃,帮助你求导,就类似的就是你你需要大概懂得这些呃求导啊,积分啊这些概念啊,包括怎么样啊。
手工的做一些简单的计算这一块我希望大家是有一些了解的啊,然后包括呃微积分里面嗯包括梯度啊,然后包括呃泰勒展开啊,这些东西最好也是稍微有一些了解吧,概念上的一些了解,然后编程的话。
因为我我个人觉得就是咱们学一门计算机的课,就是如果说不做作业,这个就是毫无意义的事情,对不对,就是你你就其实就只是听听而已,你没有办法很深入的去掌握这个东西,所以说我们会有我们的作业是编程作业。
然后会有c啊,然后这个我们会用unity来做这个作业,因为unity的脚本里面本身是用c sharp的,所以说我们会呃,就如果说大家呃会c或者c加加或者c sharp或者是java呃,其实都很接近嘛啊。
都是可以拿来都是可以拿来呃写这个代码的就是会会比较接近,所以说因为像我比如说我自己,我之前没有接触过c sharp,但是我会c会c加加,然后我用这个写这个脚本是完全没有问题的好吧。
然后有同学问就说会介绍当今游戏引擎基于物理的动画吗,呃我们不会具体的介绍这个游戏引擎呃,里面用到的呃这个物理引擎,但是我们会介绍他这个物理引擎所用的算法。
就比如说我们现在物理引擎里面很多时候用到一个算法叫做p p t嘛,position based dynamics,我们也会介绍一下这个呃算法,然后跟这个它的优缺点,还有跟其他一些类似算法的一些比较。
我们会涉及到这一块,对javascript,嗯然后还有一点就是说呃希望大家能够就是呃就是呃主动的去学习,因为我觉得这个也是挺重要的,就是呃很多时候哦课程能够涵盖的东西,它毕竟只是一个子集。
呃如果说你要很深入的去理解很多东西的话,你肯定是需要课后去阅读啊,然后课后去呃去呃做更多的呃实验,做更多的操作的,这个呃也希望大家有一个能够自学的精神,我觉得这个也是蛮重要的。
啊然后这里我没有谈到一些比较复杂的一些物理啊,数学啊这方面的东西嘛,啊但是我们会涉及到这个包括了,就比如包括一些数值算法啊,数值线性代数啊,数值偏微分方程啊,有限元分析啊,流体力学啊等等等等。
其实我觉得嗯很多同学我估计之前可能就会问,会觉得好像呃如果要做物理模拟的话,会需要懂到这些,我觉得肯定是需要会懂到这些的,但是呢如果说你之前没有具备这样的知识呃,也不要紧。
因为我们本身的课程也就是帮大家去学习这方面的知识,我们也会有一些呃内容就是覆盖到这些数学的一些计算的方法呃,然后呃覆盖到一些流体力学的知识啊,涵盖到这些知识。
然后我们会学习怎么样利用这些东西去呃去做这个动画的开发,所以说呃如果大家会这样更好,但是如果说不会这些很高级的这些物理啊,数学的概念啊,也没有关系,我们也会具体的提到嗯,ue还是用unity嗯。
因为是这样子的,就是我们的作业它不是凭空让你做的作业,我们的作业是我会给你一个小呆,我会给你一个小demo,然后你要根据这个小demo去再写脚本,然后再去扩展。
然后我们本身的那个原始的这个代码是用unity写的嘛,这个场景也是用unity写的,所以说你如果说你自己有能力,能够花时间把它移植到unreal上也可以,但是这个这个工作量可能就会比较大一点。
如果说unity的话,就是你只需要完成一个代码的,就是脚本的一个编写工作就就可以了,unity版本unity版本没有什么太大的要求,就是嗯只要不是很老的版本都可以。
因为我自己的像我我像我自己作业里面的一些那个呃一些代码,其实也是用老版本写的嘛,然后也是可以完全运行,也是可以运行,也没有问题的,所以说版本的要求不是很很那个很严格嗯,games 101是吗。
games 101其实并不是特别需要,就是呃你最好是要稍微懂一些简单的一些嗯简单的一些图形学概念吧,比如说你比如说学旋转啊,做一些简单的一些transformation,我觉我觉我觉得这些可能是需要的。
然后需要有一些简单的,比如说渲染是大概是一个怎么回事儿,你可能需要了解一下,但是如果说很复杂的一些图形学的知识,你是其实是不需要的,是没有关系的,嗯其他的呃其实是这样子的,就是你没有接触过unity。
完全没有问题,为什么为什么我用unity的原因,就是因为unity上手它其实很容易,我我我觉得如果说你花两天时间啊,可能两天都不用花一天时间把一些简单的一些教程看一下就可以了。
这个unit可以上手是相对比较容易的,我们以前上课就是最早最早之前没有unity之前最早上的是用open gl,我不知道大家有没有听说过,如果用open gl的话,上手起来就会难一点。
就会需要花更多的时间去学习这个open gl的机制啊,这些东西有了unity之后的话,上手就会相对来说容易很多了,嗯然后作业的那个呃作业对显卡的要求其实很低,没有什么显卡的要求。
大部分计算都是基于cpu的,没有什么gpu的要求,呃然后这个例子我们的呃做的这些例子,做的这些demo也是比较简单的,例子,不会说用呃很复杂很复杂,比如说上几10万几百万个点的模型。
所以说呃对硬件的要求相对来说是比较低的,大家不用这点是不用担心的好吗,然后unity交作业,到时候我们讲作业的时候会会跟大家具体讲就是怎么用unity交作业,这个反正到时候看公告吧好吗。
还有还有没有什么别的问题吗,对渲染不用管,因为unity本身就有一个渲染引擎嘛,你直接拿去直接用unity自带的那个就可以了,我们不会讲m p m,因为m p m它是一个比较小众的hybrid算法。
我们这个主要还是介绍基础的比较大众的一些算法为主,而且m p m其实是呃两种方法或者是好几种方法的混合体吧,我们会把这些基本的算法告诉大家,然后你知道了这些基础算法之后,你再去看pm。
相对来说就会容易很多了,嗯既然大家问这么多,我干脆给大家看这一页好了,就是我们大概的一个schedule,呃,我们总共是12周吗,卡住了吗,等一下啊喂,哎好了,现在好了吗。
m p m p m它其实是一个混合的方法,它不是一个方法,它其实是把几个方法合在一起嗯,好了是吧,mp m它其实是几个方法合在一起,就就是它本质上它就是把粒子法跟网格法合在一起嘛。
然后我们这个课会涉及到粒子法,也会涉及到网格法,所以说如果说如果说你懂了例子法,也懂了网格法之后,你就会呃你再去自己去,如果说以后我们高级课程或者是其他课程,你去学习m p m相对来说就会容易很多。
我们这个课主要还是涵盖的是一个呃一些基础算法啊,然后这里给大家看一下这个我们大概的一个schedule吧,然后今天是第一天嘛,就是我们会是一个呃简介介绍的形式,然后下一周我们会呃主要讨论一下数学。
因为数学挺重要的,呃我们会把一些数学的基本的一些呃需要的一些呃嗯一些概念啊,会给大家呃,然后也会给大家举一些例子,就比如说我怎么去计算四面体,怎么去计算这个投影等等等等,我们会做一些计算。
然后包括vector calculus,这个我觉得大家可能有听说过吧,嗯但是我们也会有例子给大家,比如说一个弹簧,你怎么样去算这个弹簧的能量呃,所推导出来的一些嗯一些举证啊。
stiffness matrix啊之类的,就是我们会用一些比较简单的例子,然后给大家看数学是怎么应用在这个图形学里面的,一些具体问题上的啊,然后这个是第二天,然后第三周也就是我们线下课开始呢。
我们会首先花两周的时间来讨论钢铁啊,包括呃缸体的动力学和缸体的接触,也就是缸体的碰撞,缸体的摩擦这些我们会呃在第三周和第四周来讨论,然后这个完了之后呢,我们就会有第一次作业,第一次作业就是关于缸体的。
我们会用刚体做一个作业嗯,然后嗯然后之后是呃第五周,第六周,还有第七周,我们会有三周的时间来啊,来讨论这个衣服的模拟,然后我们会用衣服的模拟。
同时引入这个p p t projective dynamics,还有concert dynamics这一块呃,然后把这个把衣服这一块给大家吃透啊,然后同样我们还会有作业,就是基于p p t。
还有基于这个弹簧系统的一个作业来做,然后之后呢我们会讨论soft body dynamics,我们会讲弹性体啊,然后也会讲有限元,然后针对这些soft body dynamics啊,这些我们也会有作业。
就是给大家一个比较简单的一个小作业吧,就是呃有一个小的一个小的软体,然后在地上弹弹弹这样的一个做一个这么样的一个效果,嗯然后呢之后呢第10 11 12呢我们会讲流体,我们会讲表面波,然后会讲网格法。
就是说呃不可压的流体动力学,never execution,我们怎么样用网格法去解这个东西,然后呢我们会讲例子法,就是怎么样用particle base的方法,然后去解流体。
这个是个大概的一个啊一个过程,然后总共是四次作业啊,四次作业是呃就是每个作业是针对一个呃,相当于一个方向吧,呃然后我觉得这个物理模拟里面它有一个特别大的好处。
就是在于它每一个方向其实都是相对比较独立的啊,它不像可能有的学科或者是尤其是数学,就是可能你第一天听不懂,那么后面就完全就更听不懂了,就是前后是有关系的。
我们这个基本上每每天讲的内容基本上是一个独立的章节,比如说你钢铁诶,你刚体没学好,或者是钢铁,你没来得及听课啊,没有关系,我们后面会讲弹性体的时候,你还是可以继续跟得上的。
你不用担心说前面的miss掉了之后,后面就没有办法跟上了,这个我觉得是呃一个好处,嗯,如果说大家可能因为某些原因,就是有些课miss掉的话,不用担心,反正后面可以补上,然后后面的课也是可以继续听下去的。
这个都没有问题,然后还有就是作业这一块,我想大概跟大家讲一下作业是个什么样的形式,呃,我们的作业大概会有两个部分构成,一个是一个呃基本的任务,就基本作业,然后还有一个是一个高级作业,是一个精英的任务呃。
然后呃基本的作业就是主要是为了帮助大家能够满足一个,就是温故而知新的一个作用嘛,就是上完这个课之后,然后顺带着你把这个基本作业做了,可能不会花你太多时间,但是可以帮助你巩固我们刚刚学到的一些知识。
然后高级作业呢这个精英任务呢就是如果说你有更多的时间,你愿意花更多的时间呃,包括去读一些呃课后的一些教材和课后的一些辅导材料的话,然后你可以做个高级任务呃,然后我们是这样规定的,就是设计的。
就是如果说你四字作业都能够呃按时同时也是呃正确的完成的话,包括普通的任务,抛过的精英任务都可以完成的话,我们也会有一份呃呃礼品送给大家,就是根据大家一个完成情况,我们也会有小奖品给大家。
在课后最后结束的时候,但是这个这个礼品我们暂时还没有设计好,就是什么样的礼品,我我是我是在想,就是这个礼品有可能会根据有多少人能够完成这个作业来来设计吧,就如果到时候完成的人比较少。
那么我们礼品就会呃更好一点,如果说完成的人更多,那么我们礼品相对来说就会少一点,这个反正到时候根据大家到时候实际的完成情况来制定好吗,然后,哦然后还有一点就是没有这个咱们这个是没有考试的。
这个跟正常的上课不一样啊,以前如果说没有考试啊,同学们都高兴死了,但是因为咱们这个也没有办法考试嘛,对吧,咱们也不能给大家评分,所以说就没有考试,就没有去考试这一说了,嗯然后刚才有同学问到就是教材。
这个我们其实是没有这个呃没有教材的啊,因为教材读教材还是挺花时间的,呃,我希望大家能够把更多的时间花在读一些课外的一些选读的,一些文献上,我们到时候每节课都会有附带的一些选读的内容。
就是如果大家有时间有余力的话,可以去选读那些内容,嗯这个可以帮助你就是帮助你掌握就是我们课上miss掉的一些东西吗,嗯然后如果说你选读的话,还有一点我比较建议的就是你不需要去把整篇。
比如说是一篇论文或者是一个教材,教材的某一章对吧,我不希望大家就是把时间花在从头到尾去读这个东西上,尤其是相对于年份比较老的paper,他因为年份比较老,所以说它里面可能有一些内容它已经过时了。
那你当当你去读这个论文,读这个文献的时候呢,你需要把你的重点,把你的时间花在就是跟我们课程相关的那部分上就够了,然后至于说那些比较弱呃,比较过时的东西呢,可以粗粗的略过,或者是就是完全完全忽略。
也都没有关系,重点就是你把跟我们课程相关的,就是嗯跟这个技术相关的东西把它给读出来,这个我觉得就够了。
嗯然后这个是unity的主页,这个我想嗯大家可能都知道吧,就是如果没有知道,如果还没有去的同学可以,大家可以先呃去unity把这个把他们的这个下下来,嗯这个对于学生版本,对个人版本应该是免费的啊。
版本是没有关系的,嗯然后这个是unity的论坛,嗯,因为那些论坛的话就是如果说有一些具体的涉及到unity,怎么样使用unity的问题的话,呃比较通用的问题的话,可以在这个论坛上面得到一些解答。
嗯对这个版本没有关系,就是mac也可以,然后windows也可以,然后可能没有什么同学在linux上跑吧,linux上我记得好像会有一些问题,好像他们没有支持linux。
但是mac和mac跟windows都是没有关系的,因为我自己用的也是mac,个人版可以的,个人版学生版都是可以的,都是一样的。
啊然后还有一点我觉得需要强调的就是,我们用unity主要是呃用它作为一个学习的工具,我们本身并不是学怎么用unity,这个我觉得还是有点区分的,所以说呃我希望大家就是更多的时间是花在就是写脚本。
然后呃去阅读这些呃知识,然后就是掌握这些知识上,然后尽量的我们跟unity纯引擎相关的东西,我们相对来说会少一点呃包括比如说unity,它自身也有物理引擎嘛。
但是我们大部分时间都是不会使用它这个物理引擎的,我们其实我们写的脚本其实就是替代了他这个原有的物理引擎,好吧,嗯然后我觉得呃上这个课需要需要做什么事情呢,怎么样才可以成功呢。
嗯我觉得首先就是说呃要有一些准备吧,就是这些包括一些基础知识啊,数学啊啊物理啊这些基础知识,包括编程嗯,基础知识需要有一些准备呃,然后对unity要稍微有一些呃基本的要了解。
如果说你之前没有用过unity的话,可以先把unity下下来,然后可以先尝试着先使用一下,然后看看这个大概unity的操作是什么样子的,然后就是上课嘛,就是参加我们的呃,每周的这个线上课。
线上或者线下课,或者是如果说大家时间上比较冲突的话,可以去看这个replay,嗯然后如果说有时间的话,有时间有余力的话,就是可以把这个选读的这些文献啊啊去阅读一下,然后做作业啊,然后我刚才也讲到了。
就是我们对显卡的要求是比较低的,如果只是一个笔记本的话,就只能你只要只要你的笔记本不是特别特别旧啊,比如说10年旧的那种笔记本的话,大部分情况下都是没有什么太大的问题的,嗯然后我觉得呃不管学习。
不管学习什么样的东西吧,图形学也好,然后其他的领域也好啊,我觉得最重要的一点就是多读多写,多想,这个我觉得这个都是没有差别的,你读读得多,你才能够掌握更多的知识,你写的多。
你才能够对这个东西掌握的更深入啊,然后在这两者基础上,然后你要多想,然后就是可以帮助你对这个知识的理解能够进一步的升华,所以说我觉得希望大家就是在通过这个课能够啊能够对物理模拟引擎,物理模拟。
物理模拟算法,计算机的这个动画,它有一个呃比较呃基础的了解,然后呢呃未来如果说大家对这个东西感兴趣的话,我也是特别欢迎的,就是我们以后也会考虑开高级的课程,好吧,有什么问题吗。
我想在我这个接下来讨论下一个议题之前,我想听一下大家有没有什么问题,关于课程机制上有没有什么问题,没有的话,我们就继续往下走了,然后我然后行,然后我接下来就会呃,重点就是来说说四个事情啊。
然后第一个是第一个是什么是图形学,因为呃是不是是不是有同学可能之前没有上过图形学课程有吗,就是这个是完全是第一次图形学的课程,对是的,就是四个作业跟高级作业都完成的话,就可以拿到礼品。
就是所有的所有的内容都可以完成,就可以拿到礼品,就是我会我会想跟大家讲一讲,就是首先什么是图形学,然后图形学是拿来干嘛的对吧,他这个大概是一个什么样的作用,然后,然后然后我接下来会讲。
就说我们呃物理基于物理的动画又是一个什么样的东西,它在这个图形学里面是一个什么样的作用,然后最后呢我会讲一下,就是我们这个课,我们这个课会有哪些讨论,哪些东西会涵盖哪些内容,就主要是四个四个方面。
首先我们来讲一下,什么是图形学好吗。
就首先图形学你可以简单的认为就是说呃怎么样从3d的世界,怎么样构造一个3d的虚拟世界,然后把这个3d的虚拟世界呈现给大家,通过2d的形式来呈现给大家,所以说这个图形学就涉及到很多关于3d虚拟世界的东西。
比如说怎么样去构造这个虚拟世界,怎么样去运行这个3d的虚拟世界,然后怎么样渲染,怎么样把这个3d的世界转化成2d嗯,有的同学可能会把这个图形学跟计算机视觉混淆在一起,或者是理不清他们的关系。
其实你可以把计算机视觉跟图形学认为是两个完全相反的方向,图形学呢是从3d到2d对吧,是从3d的虚拟世界到2d的图像,而计算机视觉呢是给你2d的图像,给你影像,你怎么样去理解这个影像中的3d视角。
所以说他可以认为是这个反方向的一个操作,我们图形学有的时候嗯会用到一些呃vision所需要的东西,比如说我们想要构造3d虚拟世界的时候,我们可以从呃真实的影像出发,我们去做三维重建这些东西。
这就是为什么有的时候呃大家看一些呃计算机图形学,包括计算机视觉的论文,大家会发现有相当一部分的重复的原因是,因为大家都是围绕着这个3d跟2d之间的关系所做文章的。
但是大家我希望大家能够比较深刻的理解到它,其实这两个东西刚好是一个相反的关系,一个是3d到2d。
一个是怎么样从2d回到3d,然后呢图形学呢它大概有呃有三个方向吧,这个比较呃比较典型的方向,一个是几何几何,就是关于怎么样构造这个3d的世界的,然后渲染渲染是怎么样呈现这个3d世界的。
因为我光是有个3d世界不行对吧,我必须要显示这个3d世界,那我们今天大部分的显示设备都是基于2d的图片的形式的,基于像素的形式的,所以说我怎么样把这个3d转化成2d,这是渲染,然后呢最后呢是动画。
动画呢就是说我怎么样去把这个3d的世界运行起来,因为我不希望是一个静态的世界,真实的世界是物体都是有运动的,所以说我也希望在这个3d世界里面,我也有运动,我也把这个世界运动起来吧。
然后这里面呢我我我用了bunny这个例子,因为在图形学里面,这个bunny是一个比较知名的一个例子,大家一般来说都喜欢用用它来做这个demo吧,然后叫做stanford bunny,然后我就想跟大家。
讨论一下就是大概图形学的一个pipeline是一个什么样子的,图形学,大概是一个什么样的一个流程对吧,那么刚才我们讲到了有几何,动画渲染三个部分,那么几何首先是第一位的。
就是我需要构造这个3d的虚拟世界,我需要创造这个3d的虚拟世界,我需要把这个虚拟世界给制造出来,呃然后第二点呢是动画,就是嗯我怎么样去运行这个3d虚拟世界,比如说我这个虚拟世界里面有一些物体对吧。
有些圆柱,有些呃笑脸,然后呢在这个虚拟世界里面呢,我可以做动画,我可以让这个虚拟世界运行起来,然后最后呢是渲染,渲染呢就是把3d的虚拟世界转化为2d的图片啊。
嗯然后最后呢我把这些图片转化成呃发送到我的显示设备里面,然后通过这个显示设备给展示出来,这是一个理想情况下的一个实时的啊实时的一个图形学的一个管线,就是从几何到动画到渲染,最后到啊显示那么几何。
它实际上一般来说不需要实时,为什么,因为呃构造这个3d虚拟世界,我完全可以离线的操作嘛,我可以通过一些辅助工具,我可以通过比如说甚至计算机视觉的一些算法,我可以离线的去创造这个3d世界出来。
这个都没有关系,这个可以离线的操作,但是动画跟渲染它必须是实时的,因为如果说你这个虚拟世界他需要跟用户有交互对吧,我需要能够比如说用户做一些操作,玩家像一个游戏里面一个玩家做一些操作。
我需要这些玩家的操作能够对我这个虚拟世界产生影响,那么我的动画跟我的渲染就必须是实时的,必须能够让用户或者是玩家,他能够马上看到他这些操作所带来的效果,这是一个理想的情况,但是有的时候呢好哦。
这里的话其实有个概念就叫帧率嘛,就是我想大家可能知道就是说呃显示设备以多快的速度去呃,去展示这些呃渲染出来的针,这个叫做帧率frame rate,然后比较典型的帧率有24帧,30帧,60帧嗯。
大家知不知道电影一般来说是传统的电影,一般来说是帧率是多少,有知道的吗,24对对对,是的嗯,是24帧,而游戏时一般来说是多少帧,你知道吗,游戏,其实都有,其实30帧的也有,60帧的也有。
它这个区别主要是在于什么区别,其实主要在于交互,因为游戏它是强交互的一个应用,如果说玩家比如说做出了一些做出了一些操作啊,你是希望这个玩家的操作能够很快的在这个游戏里面体现的话。
那么你的帧率就要相对来说高一点,尤其是一些比较竞技类的游戏,它的帧率也比如说160帧,相对来说比较高一点,而电影呢它其实没有交互对吧,电影没有交互的话,那你一般来说它的几率要求就会就比较低一点。
24折其实就对于我们的肉眼,基本上就是可以看不出它这个不连续的这个效果来说嗯,然后30帧的其实也有,但是其实如果说是交互性比较强一点的话,有交互性比较强烈的游戏来说,它其实会有一些延迟。
会有一些卡顿的嗯,然后我们图形学里面一般来说标准的标准的帧率是30帧每秒,这个反正就是给大家一个基本概念嘛,就是说你的帧率其实交互会有关系,然后会跟用户的体验也会有一个关系。
嗯然后刚才我们讲的就是实时吗,实时的动画,实时的渲染,但事实上呢这个嗯这个实时的动画实时渲染,它其实是很相对来说是比较难的,为什么,因为我们的计算量,我们的硬件它的计算能力是有限的。
如果说你想要做一个非常真实的逼真的效果的话对吧,那么可能你的这个你的硬件就没有办法支撑这样的这个计算量了,那么这种情况下怎么办呢,也不是说图形学它就没有相对应的应用了,它也是有的。
只不过呢它的应用就会比较窄一点,比如说我可以把动画作为一个离线的部分,但是我把渲染作为一个实时的部分,换句话说我就不需要做这个,我不需要实时的去模拟动画,我不需要做交互,我可以把动画事先给录下来。
然后呢我就回放,然后我就把这个渲染的效果展现给大家,实时的展现给大家就够了,那么这个一般来说在一些过场动画里面,尤其是游戏里面的一些过场动画,它会比较常见一点,因为这个过场动画它不需要交互嘛。
他就是可以完全就是做一个渲染的展示,还有一些比如说在一些最近一些呃电子嗯,电商的一些商品的一些网上的展示啊,有很多也是采用这样的形式,就只做渲染啊,只做渲染的事实,而不做动画的事实。
这是一种比较常见的一种方式,然后我们甚至可以搞得更极端一点,就是完全做成一个数字电影啊,如果是做成一个电影的话,那么从几何到动画到渲染就全部都是离线的方式了,我就可以离线的把这些渲染效果啊。
动画效果给它生成好,然后呢我把它录制到这个电影里面,然后我就做一个回放就可以了,这个就是嗯电影跟一些实时的嗯图形学应用的一些差别呃,因为电影它不需要实时,它不需要实时交互嘛。
所以说他们一般来说采用了这个模拟也好,动画也好,渲染也好,他们的计算量相对来说都是可以大一点对吧,它可以花好几周甚至好几个月的时间去做渲染,去做模拟,这都没有关系,那么接下来我想跟大家就是来讲一下。
就是咱们刚才讲的这三个方向嘛,几何动画跟渲染对吧,我们分别他们里面大概是有些什么样的内容,然后有哪些问题呃,首先第一个就是几何几何呢,它其实就是关于怎么样去描述这个3d世界。
那么怎么样去描述这个3d世界,它通常有三种表达方式,第一种表达方式呢是网格叫match,嗯就是这里大家可以看到有个兔子对吧,然后这个兔子我是通过一些三角形来描述它,这个他这个兔子的表面的这个mesh呢。
它有哪些部分构成的,它由两部分构成,一个是顶点,就是我们这些呃覆盖在这个兔子身上的这些顶点,然后第二个部分呢是由这些多边形元素或者是多面体元素所构成的,比较常见的呢一般就是三角形相对来说会比较常见一点。
嗯多边形呢比如说四面体呢在一些cad设计软件里面,比如说玛雅用的会比较多一点,因为它比较符合大众的设计习惯,然后如果说嗯大家如果以后我们未来接下来做这个软体,包括这个弹性体的一些模拟的时候呢。
我们会用到四面体的网格,在这种情况下呢,我们的元素就是四面体,就是取决于你的内容是什么,三角形可以认为是整个图形学的基础,包括我们整个图形学的硬件,包括gpu显卡,整个都是基于这个三角形的框架的。
三角形的渲染框架的这个如果大家对硬件有一些了解的话,可能都知道就是三角形,它是一个比较基础的一个元素啊,然后关于这个mesh相关的一些问题呢,其实有很多,因为我们match是一个很基础的一个表达方式嘛。
那么我们怎么样去构造这个match对吧,怎样构造这个mesh,能够让这个match 3角形它比较有比较好的质量,嗯就是说我们不希望出现很窄的三角形,很细的三角形。
我们希望大部分三角形都是看起来都比较正对吧,都是接近于60度的这种正三角形,那么这种就叫mansion,怎么样去调整这个三角形网格,能够让这个三角形看起来比较嗯正一点,然后呢呃关于三角形网格呢。
还有就是说怎么样做简化对,因为有的时候我们的硬件没有办法支持很多很多三角形,我们希望我们可以减少三角形的数量,我们减少三角形的数量,我们又不希望把这个这个这个mesh的形状发生很大的改变。
那么我们就需要做简化,然后我们可以做细分,就是我们怎么样去增加三角形啊,然后我们怎么可以对麦,怎么样对max做优化对吧,可以做平滑,可以计算这个mac上面的这些flow等等等等等等。
然后还有一个比较其实比较有挑战性的,就是怎么样处理volume mesh,所谓的volume mesh就是类似四面体网格这样的mesh网格,其实比三角形网格相对而言,它这个处理起来的难度会大非常多。
嗯这个反正这个也是一个很大的一个难点吧,这个我想大家有可能知道,有可能不知道啊,但是总的来说volumesh相对来说处理起来会比较难啊,这个也是为什么做四面体网格,做有限元分析。
包括有限元分析的是一个呃一个难点,嗯然后这个就是mesh,然后这是两种比较常见的类型,麦是类型啊,一种叫做structured mesh,就是它这个mesh它是有一定的规律性的。
比如说它是一个方方正正的格子,当然不见得一定是一个横平竖直的格子,它有可能是六边形,基于六边形搞出来的mac,或者是基于某些特殊的这个呃,比如说足球的形状啊,对于一个球形来说。
它可以做一些特殊的分解等等等等,总之就是说你这个mac是有一定的规律的,这是一种mesh,然后第二种mesh是unstructured mesh,就是它是没有什么规律的,它是一个比较乱七八糟的mesh。
你可以这么认为,然后相对应的四面体就是volume,上面我也可以有structured,volume mesh跟unstructured volume mesh两种。
在右边大家可以看到下面的部分是structured,然后上面的部分是unstructured对吧,然后我为什么要提这个东西呢。
是因为对于structured跟unstructured mesh其实会有不同的计算方式,因为structure mesh它有一个很大的特点,就是它有structure,那么有一些模拟算法。
有一些几何算法,它就可以利用这个structure做一些文章,他可以做一些简化,可以做一些优化等等等等,然后我们这个课啊看看情况吧,就是有可能会提到一些就是structure的呃。
对针对structure做一些简化优化的一些东西,然后当然on structure它最大的好处就是它比较通用,它没有什么结构上的要求嘛,所以说它它通用性会更强一点,然后呃第二种表达方式是点云。
就是很多点,说白了就是很多点,那么点云这个表达方式它最大的好处是什么,就是这个好处就是特别简单,因为你不需要考虑那些三角形,不需要考虑这些三角形的连通关系,你只需要通过一大堆点来描述这个物体就行了。
然后呢通常呢这个点云呢是有,比如说我做一些三维扫描,3d扫描仪,它通常的原始数据它就是一大堆点云,它通常是一个原始数据,那么针对点云呢会也会有相对应的问题。
比如说我怎么样从这个点云里面去构造这个match对吧,因为直接给点云,我是没有办法渲染的,没有办法用硬件做渲染的,我怎么样把这个点云构造match出来,然后利用这个比如说来做渲染,这个是一个问题。
然后给了点云,我怎么样去采样对吧,可能有的地方输,有的地方密,我怎么样重新的对点云进行采样,能够让它的这个呃稀疏程度都一致,这也是个问题,然后给了点云,你怎么样去找它的近邻,怎么样给一个点。
你怎么知道周围有哪些点等等等等,在很多算法里面,这个都是要用到,都需要用到,这个是相对于点云所很多问题,然后第三种表达方式也是最后一种表达方式呢,就是grade是一个grade。
然后什么是一个grade,这个grade呢其实本质上就是你可以把它认为是一个三维的一个格子,然后他把这个三维的格子呢,他就把这个空间呢划分成很多小方块,小格子对吧小块,然后每一个块一个sell。
他就储存了一定的物理定义物理量,然后这是一个格子的表达方式,然后这种格子的表达方式呢比较常见的是什么,就是很多医学,还有很多科学实验,他出来的原始数据就是往这种格子式的,比如说我们做c t,比如说做呃。
做这个大气的一些流体模拟,他们很多数据原始数据就是基于这种格子来做的,然后呢他有什么问题呢,有一个问题就是它的内存,内存的消耗会很大,因为如果说你要一个三维空间,然后你要把这个三维空间划分得非常细的话。
你需要大量的内存对吧,那么有一些解决方案,比如说我可以用一些octra之类的方式来减少内存,但是总的来说呃内存是一个问题,然后其次又是怎么样去渲染一种方式呢,我可以转化成mesh,然后还有一种方式呢。
就是我可以直接对于这个volume的这个grade,我可以做渲染,叫volumetric grade,这其实也是图形学里面的一个研究的一个课题,然后当然还根据grade。
它会有一些其他一些各种各样延伸的问题,我们的话也会谈到就是跟动画相关的问题,然后这个就是几何这一块了啊,然后我们说完几何,我们接下来说一下渲染,然后渲染呢它其实分成两个大的内容。
就一个叫做nphotorealistic rendering,就是非真实感渲染,还有一种就是photo realistic rendering,就是真实感的渲染。
大家可能比较熟知的是photo realistic granny对吧,那为什么,因为nphoto realistic gry这个领域相对来说最近几年啊,衰败的特别的厉害。
就是研究的这个nphotoise ring的人也特别的少,大部分虽然领域研究的主要是photo release ruling为主吧。
但是也不能说nphoto release rendering它就没有用了,其实大家可以看到有很多呃,包括游戏也好,包括有一些设计软件也好,绘画软件也好。
它其实有很多运用到这些nphoto ristic rendering的技术,当然我们这个课不是关于渲染的,我们这个就不具体展开了,然后photo irendering呢它主要有两个两种类型。
一种类型呢是基于光线追踪的,然后另一种类型是基于传统的渲染管线的,这个我想大家知道吗,这个这个不知道也没关系,反正我们这课也不是关于渲染的,反正就是可以给大家看一下,就是呃一个对比的效果啊。
这个是用nvidia的rtx做的一个效果,左边呢是没有开rtx的,然后右边是开了rtx的,也就是右边就是做了光线追踪的,大家可以看到就是做了光线追踪之后,就是可以产生更好的这些折射反射的效果啊。
然后渲染里面其实有一块我我个人觉得挺重要的,但是呃研究的相对来说比较少的,就是怎么样去做材质的获取,因为你光是有渲染引擎是没有用的,你还需要有材质啊,对不对,怎么样让你这个你要去扫描材质。
怎么样把这个做出来的效果能够跟真实的一模一样,这个其实是一个蛮大的挑战,这个比如说你看别人搞的一个扫描仪,然后他扫扫描的皮革效果,做出来的一个呃渲染效果。
然后呃关于扫描其实还有一个很重要的就是怎么样去扫描人,因为人它不是一个平面,你没有办法把它当做一个平面的一个材质,这样去扫描对吧,人体它是一个有曲面的皮肤,它是一个曲面上的一个物体。
那么后来嗯就是图形学,尤其是电影领域,他就搞了这种技术,叫做next stage,就是他把一个房间里面,他布满各种各样的灯光,还有各种各样的摄像头啊,然后利用这些灯光不同,还有摄像头不同的位置。
它可以捕捉人体在不同的角度,在不同的照明的情况下的这个效果,然后把把这个人的这个整个的渲染效果给它捕捉出来,然后这个是其实是一个蛮大的挑战,b2 df就其实其实最大的问题就是你怎么样构造b2 df。
而且对于人体来说,其实有一个很大的挑战,就是人体皮肤它不是比2d f,它是比s2 df,好像这么叫吧,就是它会有光打到皮肤上之后,它的光会进去,然后他会从另外的地方出来。
它不是一个简单的在表面做一个反射的一个模型,如果说大家学过,如果说大家上过一个高级的渲染,比如说关于那个叫什么呃,就是半透明材质的话,可能会可能会了解这方面的东西,就这就是为什么人体人体的渲染会特别难。
特别有挑战性,而且人其实对人自身它是很了解的对吧,如果说你看到这个人,他渲染得特别不像,你会第一时间他算出来,但是有很多东西你可能对他没有那么敏感,相对来说你就没有办法嗯。
相对来说你的容忍程度就会高一点,我举个例子嘛,就比如说大家看人就认人会相对来说比较容易对吧,张三李四王五,你一看他的脸,你可能就认出来了,但是你看比如说猫猫狗狗,它有很多他长得特别一样。
你就没有办法判断出来,为什么你没有从没有每天都去观察这些猫狗,就一个道理,就是人对这个自身比较了解的东西,他会比较能够辨识出真假,但是对于相对来说没有那么了解的东西,它的容忍度就会高一点。
然后接下来是接下来是动画,然后动画呢,分为两类,一类是人体动画,基于人体的动画叫做character animation,然后另一类呢是物理动画,叫做physics based animation。
基于物理的动画,我们这个课程呢主要就是后期了,就是主要是关于怎么样利用物理去求解,然后把这个动画效果给它做出来的,当然在现实的这个嗯图形学的应用里面,人整体跟物理它是不分家的。
因为很多我们人穿衣服嘛对吧,然后人要跟整个环境有交互嘛,所以说你既需要有人的动画,要有物理的动画,这就是为什么这两者都会相对来说比较重要的原因,接下来我给大家看一个ue在前几年发布的一个虚拟人的一个呃。
一个效果吧,有声音吗,it ban international team of op wanted to challenge,our ideas of what a synthetic human。
could be,i’ve got state of the art,real time graphics and an unprecedented level of detail in my eyes skin and hair right。
but more than just a collection of fancy pixels,actually being driven by a real human actress and her dynamic motion。
capture through unreal engine,what you waiting for commeet me,the vicon booth and see yourself。
这就是一个给大家看了一个虚拟数字人的一个效果,然后从中你可以看到就是它既有人体的模拟人体的动画,它同时也有这个物理模拟的动画,这个是需要两个相结合的,好吧,这个就是我想给大家简单的讲一下这个呃。
什么是计算机图形学,然后接下来我们来讲一下,就是计算机图形学员能够拿来干什么。
一个主要的应用就是有娱乐行业对吧,我可以拿来做游戏数,这游戏我可以拿来做电影特效,然后有很多轻娱乐的产品,比如说抖音,比如说啊mata human啊,比如说书投资人。
比如说还有各种各样的一些呃社交媒体里面,它其实都有啊这个这个图形学应用的这个需求,所以说娱乐一个是一个比较重要的一个行业,然后图形学也可以拿来做设计,做计算机辅助设计,跟计算机辅助工程。
比如说机械领域对吧,需要大量的这个图形学辅助工具。
然后建筑行业,艺术设计,时尚还有等等一系列的这个一些很多领域都需要用到这个图形学技术,然后这个可以给大家看一个就是我们林迪科技。
我们做的一个cad的一个软件叫做style three three studio嘛,然后就是呃用户可以通过一些2d的版片,然后把这个一个3d的虚拟服装给他呃制造出来。
然后右边可以大家可以看到就是渲染的一个效果图,就是一个虚拟的数字服装啊,利用这个真实的这个服装制造工艺给它设计出来,然后图形学呃对于这个电子商务电商,还有这个跨境电商,尤其是跨境电商等等。
就是也会有一个很重要的作用,就是呃智能制造嘛,就是怎么样能够把这个数四化的产品呃作为一个商品嗯来呃推销出去,然后来销售出去,然后呃然后让那个消费者能够看到数字化的产品,然后下单,我们通过智能制造。
然后把这个食物袋制造出来,这个也是呃最近一段时间特别一个火的概念,就是智能制造一块呃,其实计算机图形学啊,在智能制造里面其实也是起到了一个非常重要的作用。
然后这个是社交媒体上,就比如说网红可以直播带货,这个我想大家可能多或少了解了解了解到一些嘛,就是网红带货对吧,那网红带货里面带货最多的是什么呢,就是服装跟化妆品,那么服装怎么样把这个数字的服装。
就是能够呃把这个能够跟制造相结合,能够把这个产业链,整个服装的产业链呃带动起来,这个其实图形学也起到了一个非常重要的作用。
然后嗯近一段时间可能比较火的就是元宇宙,还有vr a2 ,是所谓的mix 2这些这些概念嘛,那么图形学在这个里面其实也是起到了一个非常关键作用的,因为构造一个虚拟的世界里面,你就离不开计算机图形学技术。
我给大家看一个就是我们最近做的一个a2 的一个效果,嗯,左边是一个虚拟的服装,这个人当然是真的,这个人这个模特是真人,但是左边这个衣服是假的,其实右边呢是呃真实的照片的一个对比图。
然包括呃这个例子也这个牛仔裤的例子也是这个,左边是一个虚拟的衣服,这个呃上衣跟下这个裤子都是虚拟的,而右边是一个照片,可以看到就是我们可以目前可以做到几乎是以假乱真的效果了。
a21 个就是未来a2 的一个应用,就是相当于是一个11的一个或者是一个虚拟模特的效果,然后接下来我想跟大家讲就是什么是计算机动画,然后什么是基于物理的计算机动画,这个例子对人体也被建模了。
我们是有一个人体模型的,这个不是实时的,其实其实这个很难做到,事实我们是其实是一个离线的一个呃一个过程,接下来我们会讲就是基于物理的一个动画,然后呃动画首先我想跟大家讲一下。
这个动画大概是一个什么样的一个一个操作嘛,就是我们的最终目的是想把这些物体给动起来对吧,那么我们会设定时间点0t1 t2 t3 到t n对吧,我们会设定时间点。
然后每一个时间点呢我都需要得到一个这些物体的状态,那么我的动画其实本质上就是我需要更新这些物体的状态,在每一个时间点我都需要去更新这些状态,然后当我完成这个更新之后,我其实就把这个动画给它做出来了。
所以说我动画本质上就是我需要更新这些状态,那么我有什么样的状态是需要更新的呢,取决于你动画的内容是什么,比如说我可以更新它的位置,更新它的姿势,可以更新它的速度,我可以更新它的这个外观是什么样子的对吧。
比如说一个变色龙,我举个比较极端的例子,是个变色龙,那是变色龙,比如说我模拟一个火焰对吧,那火焰的这个颜色它会发生改变,可以更新一些密度,比如说烟要做一个烟雾的动画的效果。
我可以更新它的密度等等等等等等,就会有不同的状态,我需要更新不同的状态,然后两个时刻之间的这个东西呢,我们叫做不长time step delta t,这个步长呢可以是跟我你的帧率是一致的。
但也不一定要求说我的时间不长,是必须要跟帧率是一模一样的,时间不长,完全可以比帧率更低一点,那么这种情况下,我一针我渲染的时候,我一针可能就需要啊模拟更多的时间不长了,这个都没有关系。
就取决于你的这个引擎是怎么样设计的,所以说我们很多时候我们在讨论物理模拟的时候,我们主要讨论的就是怎么样去在一个时间步长里面,我们怎么样去更新这些状态,这个是我们所要研究的这个呃问题。
然后整个物理模拟大概可以分成四个方向吧,从左到右分别是钢体啊,衣服跟头发,衣服跟头发,我把它归为一类,就是一种比较窄的或者比较细的物体,然后呢是弹性体,软体,soft body,然后是流体。
流体包括液体和气体,这个我们一般来说是把液体和气体是当做一类流体处理的,是四大类,针对这四大类对吧,钢铁头衣服太软体跟流体,我们要有三种不同的不同的表达方式,分别是mesh。
跟grade我们刚才也提到了,就是啊和我们有三种不同的表达方式,所以说我们也有三种铜的相对应的模拟技术,那么对于缸体头发衣服还有弹性体而言,一般来说我们都是用mesh,为什么。
因为一般来说这些物体它们的整个形态它都是比较固定的,它都不会发生剧烈的这个呃扯或者是断裂这种现象,它相对来说会比较少一点,它基本上都还是一个整体对吧,就拿它是弹性体,它的形变会比较大一点。
它还是一个整体,所以说一般来说我们都会用mac来做这个模拟,可以给大家看几个相对应的例子。
这个是用blender在youtube上有一个youtube在blender用blender做的一个,这有声音吗,没有声音。
钢铁的一个模拟的一个例子,看到有很多方块。
然后他就是最后掉在地上,然后嗯堆成一团的这么一个效果。
这个是我们前2年啊前几年做的一个fracture,就是体破碎的一个模拟的效果吧,这个实际上本质上也是钢铁模拟,但是呢我们对于钢铁模拟,我们专门处理就是怎么样去模拟它这个破碎掉。
包括是弹性体的一个破碎的效果,就一个果冻,被拉扯了之后,他就断成两段了,哦关于衣服,这个是我们今年c寡妇的一篇paper,就是怎么样去模拟这个嗯高分辨率的衣服吧,这个是一个羽绒服的一个效果。
这些基本上都是这些都是用mesh来做的,因为mesh它在处理这种形态比较固定的这些物体上,它是有很大的好处的,这不是实时的,这个大概差不多是不到一帧一秒左右吧,应该是这么样一个计算量,其实都不是实时的。
这些这几个例子都没有事实的例子,这个是我们啊前几年的一篇c graf asia,就是做弹性体,这个是不同的弹性体模型,从左到右大家可以看到不同的名字,可以再放一遍啊。
这是一篇也是一片c graf。
然后就是别人做的一些craft,然后他们所这个plastic形变的就是塑性形变。
就是你可以看到一堆车撞在一起。
你可以认为是一些橡皮车,然后这些橡皮车撞在一起之后,它就发生这个永久形变了,它就被撞撞着装成各种奇奇怪怪的形状啊。
然后大家可以看到基本上啊这些方法基本上是以这些呃钢铁啊,衣服啊,基本上是用mac的方法为主的,但是呢甚至凡事都有例外对吧,就是不是所有的这个呃这些个这这这些内容都是用mash做的。
也有一些人去研究用别的方法,比如说用particle或者是gd去模拟别的东西,那么对于缸体而言,缸体的破裂呢,呃有些人去研究用mesh,用mesh list的方式,也就用粒子的方式去模拟,用例子呢。
因为用例子它例子最大的好处就是没有match,没有mesh呢,你也就意味着当这个物体碎裂的时候,你就不需要去跟这个match了,因为它就没有match,这个东西是最大的一个好处。
那么也有人用grade的方式,包括类似于pm这种就是hybrid的方式去模拟衣服或者是头发对吧,那为什么要这么做呢,主要的原因就是他想减少碰撞的处理,他想把这个呃这个碰撞处理这一块给它简化一下。
这个也是有这样的研究的呃但是总的来说,这方面的研究是一个比较实验性质的研究,它不是一个呃通用的一个呃处理方式,因为在你做用这些技术带来的好处的同时,也会有很强的局限性,比如说计算量可能会很大。
比如说它在处理细节的时候呃,会处理得不好啊,所以说我们通常就会把它考虑成一个比较实验的形式,pm吗,m p m叫做material point method,它是一个hybrid方法。
我等会儿其实会讲到一些hybrid的方法啊。
这是一个cv,其实大家可以看到这是2005年的paper。
是现在已经有16年了,他就是这个paper。
就是说怎么样用粒子,就是没有mesh的情况下。
怎么样去模拟这个物体fracture的一个效果。
然后呢我们刚才讲了钢铁啊,然后弹性体这一块,然后接下来我们讲流体了,流体这个东西它就很神奇,因为为什么,因为流体它很多类型,它的展示的方式是很不一样的,从烟水滴跟表面波到水花,它其实都不太一样。
它的形式都不太一样,所以说我们研究这个流体,它用到的方式方法也不一样,烟而言,一般来说用到的是粒子法跟网格法会比较多一点。
给大家看一下这个一些效果吧,这个这是一个火焰的效果。
这个看起来像例子,它其实是其实是利用,我个人觉得应该是用blender。
是用网格法来模拟的,是用硅来模拟的。
这是另一个烟的效果啊。
有个人他把这个人作为一个冤的烟的这个sce。
然后呃产生这个当人走路的时候,这个烟就是从人的身上被吹下来,然后产生这些效果。
上这个课吗,咱们这个上这个课,因为是用unity做的。
所以说计算量会有一定的限制,我们做不了这么复杂的模拟。
但是我们会有一些比较简单的,比如说2d3 d它会比较复杂。
但是我们可以做2d的这个烟的模拟,这个是可以的。
说完烟,我们接下来讲这个水滴跟波,为什么要把这个水滴跟波单独拿出来讲呢,因为水滴跟这个表面波水波有很大的特性,就是它基本上还是一个整体,对不对,它不会那么容易地分裂出来,所以说呃大家就研究了。
我不可可不可以用mesh来模拟模拟这个波,还有水滴,还有一个很大的好处,就是它基本上可以拿来做实时的模拟,而grade呢它可以拿来做比较高真实的,比较逼真的模拟,这个取决于你的需求是什么。
比如说这个c寡妇18年的时候有一篇paper是chris walton,他们那个组做的就是做surface,然后他就是把小波引入到了这个surface simulation。
然后可以产生这个实施时的来模拟这个水面波的一个效果,大家可以看到就是它不只是有这种大的这个浪花,它同同时还有这个很细的这些啊,播的效果都是可以拿来做出来的,都是可以实时的模拟出来的啊。
而且它跟这些物体也有交互,它它这个波不是单纯的波,它是能够跟物体是有一个交互的,然后呢烟说完这个水滴,然后最后面就是水花了,这个水花这个东西它大的问题是什么,就是它非常的多变,它非常的复杂。
所以说模拟起来它的这个呃相对来说就是没有那么实,是现在如果说实时的水花的模拟,相对来说就没那么容易了啊,mesh的基于mash做的水花呢可以做,但是实验性质更多的。
大家采用的是基于particle跟基于grade的方式来做这个模拟,给大家看一个我个人觉得蛮好的一个效果吧,怎么卡住了,是12年的时候嗯,的时候做了一个,第2年的时候做的一篇segraf吧。
就是可以做各种各样,但是我就这样放吧,给大家放一下,就可以做一个用用s p h,然后模拟的这水花的效果,视频播放有点卡顿,在我们这个课最后的时候。
我们也会讨论这个技术就是怎么样用这个s p h的方式来模拟流体,跟那个grade的差别吗,这个就是跟表达式有关啊。
就是它是三角形网格,三角形或者是多边形网格,是这样子的这样子的一个网格,后grade它就是一个是这个是这样子的网格,它是一个把空间细分成一个一个小格子的这样的一个体系的一个网格。
它其实主要的区别能不能做这样的效果是吗,如果是用unity的话,是做不了的,unity unity它的局限性很强。
它这个因为它是一个实时的引擎,它的局限性很强啊,我们能做的是做一个2d的烟的效果,这个是可以的,然后后我们会做一个播的一个我们的作业,大概是一个播的作业,就是类似这样子的一个作业,但是会比这个作业要呃。
效果要稍微差一点,如果说如果说大家想要尝试,比如说像类似这种效果的呃挂的话,然后可能会需要用到open gl类似的其他的一些渲染引擎,图形学引擎就光是unity是做不了的。
这个当然不是因为我们课程的原因,完全是因为这个作业布置的原因。
后接下来就是我们来讲一下有哪些东西我们刚刚没有讨论的对吧,我们刚刚讨论了就是呃四个不同的呃物质嘛,刚体弹性,然后衣服,然后流体,然后我们也讨论到了三种不同的方法对吧,基于mesh的方法。
基于particle方法,基于规则的方法,我们刚才还有什么东西没有讨论的呢,首先第一个就是方法就是图形学里面其实有一种方法,就是把一些这些方法结合在一起的。
比较典型的大家可能听说过的就是pm就是particle跟相结合的方法,那么为什么要做这个事情,主要原因是想要呃这个方法能够既有particle的优点,也有grade的优点。
所以说呃这个方法通常来说就是拿来做一些基于呃两者之间的,就比如说我有一些比如说pm,可能大家看到的最多的例子就是做雪,还有做呃各种粘滞的一些物体。
那么研制的物体它最大的特点就是它既有一些particle的属性,也有一些规律的属性,所以说用这种hybrid的方法是最常见,最通用的,那么反过来,如果说比如说你要做钢体,做衣服,做弹性体。
那么用一些hybrid的方法可能就不是合适,你可能用mac的方法会更好,更选择会更好一点,还有一类啊,还有一类就是这里面研究的比较重要的一个东西呢,就是怎么做company the coupling。
就是说在你这个场景里面,你可能既有刚体,也有衣服,也有弹性体,也有流体,那么怎么样你去模拟这几个不同的物质之间的交互对吧,你怎么样去模拟,比如说水落在衣服上,或者是水落在弹性体上。
或者是衣服怎么样在穿在人身上,然后人又是一个弹性体等等等等,就是c一个嗯,大家研究的一个比较多的一个比较多的一个课题。
然后关于hybrid的方法,我就给大家看一个pm的一个比较早期的一个paper吧,这个是就是做模拟这个血的效果。
沙子都是可以用这个m pm的,这种方法是模拟是比较合适的。
然后给大家看了这么多,然后最后我们说一下,就是我们这个课会学到上到一些什么东西吧,这个是我把这个打呃画的这个框起来的,这个是我们需要我们会上到的一些东西。
我们刚体这一块我们主要是呃上魔钢体的dynamics,跟他的这个context这一块钢铁的fracture呢我们就略过了,因为主要fracture这一块它会有一大块是关于remash的。
而这个unity在处理remash的时候,它会相对来说比较比较复杂一点,而且还有一个原因,还有一个原因是因为游戏引擎里面,游戏运行里面的fracture它通常是预计算的,它不是模拟出来的。
它是通过一些预处理的方式来做的,在游戏里面看过fracture的效果,就比如说一个墙打碎掉了,一个坦克,给他炸飞掉了等等等等,就类似这样子的flash效果。
其实在游戏里面还是挺一般来说都是通过预计算的方式来处理的,所以说我们就不会讲这个fracture这一块了,因为unity没有办法支持实施的这个模拟,然后衣服跟头发呢我们会把我们会主要会讲cross。
就是衣服这一块,模拟头发这块我就我们就暂时就不讲了嗯,头发这一块其实涉及的内容也挺多的,包括头发的摩擦嗯,自摩擦,还有一些就是发型的模拟的一些效果,但是我们这一块暂时就略过了啊。
软体呢我们主要是弹性体这一块,我们会讲的比较对,我们碰撞检测也会讲的,我们会专门有一天的时间会专门来讲这个碰撞处理,还有碰撞检测,弹性体这一块,我们会主要会讲有限元。
然后会讲呃超弹性模型及hyper elastic model这些东西,然后基于这个elastic model,然后我们也会扩展一些就是数值方法上的一些东西,这个我们暂时就啊也不讲。
因为plastic的东西它可以认为是以astic的一个延伸,然后plastic,而且说坦白地说,我也我自己以前也没有做过plastic,所以说可能我讲也不是很合适,所以说我自己就暂时就偷个懒。
这一块就不讲了,硬的软的边界在哪里,硬的东西其实就是你认为它是没有形变的,我们在做钢体模拟的时候,我们就是假设刚体是无形,是菱形变的,而任何有形变的,然后我们可以观察到形变的。
我们其实都可以把它认为是软体,还要看它有没有形变,如果说你你做一个比如说做一个简单的游戏,然后这个游戏里面呃轮它只是车辆的一个附件,然后它只是做一个滚动的话,你可以可以把它认为是一个钢铁,它没有形变啊。
但如果说比如说你单独模拟一个轮胎,比如说从天上掉下来,它会产生一个弹性的效果,那么你可能就需要把它做成一个弹性体,变是吗,形变其实它是有三个阶段的,真正的形变它是有三个阶段的,第一个阶段是弹性的形变。
然后第二个阶段是塑性的芯片,plastic,然后最后是一个破碎的fracture的芯片,它所以说严格的意义上讲,其实这三个阶段都是形变的,我不清楚tiger那个书啊,我没有看过这个书会讲。
我们到时候也会专门有一节有一节课讲ppt,事实上ppt我可以我们可以把它归成一种类型,叫做constraint,就是基于约束的proach,然后我们基于这个东西,我们其实会不光会讲ppt。
我们会讲ppt,然后会讲projective dynamics,然后还有一种技术叫做constrained namics,它是基于拉格朗日算子的。
我们也会讲就是怎么样各种各样的利用这个约束来做模拟的这种方式,我们其实都会涉及到这个是前面三块,前面三张,是的,match是对物体的,然后规则是对场景的,我觉得这个其实解释我觉得挺挺棒的。
就是mesh它其实是定义在物体上的,而good它是定义在整个3d场景上的,02102是几何吗,我不知道零二是什么,其实我们103对那个101跟102的依赖都不是那么强,因为我本来设计这个课。
就是想把它作为一个基础门课的,那基础入门课,你其实没有完全是零基础的,理论上也是可以学的,嗯不是特别大,流体的话我们主要会主会集中在particle跟grade这一块哦,其实漏掉了这个其实我们也会讲。
我们会讲波,然后反正就是会三天时间嘛,第一天会讲mesh,然后第二天会讲贵的,第三天会讲particle,会讲会讲,会讲不同的这个内容,然后呃还有一点我我想要强调的,我想要说的就是说其实不同的人。
不同的老师,他们的这个经验是不一样的,就是每个人不同的经历会不一样啊,然后我不知道大家有没有这样的体会,就是你上这个老师的课,你会发现有的东,而且他会讲的很多,有的东西会讲得很少。
因为他自己知道的东西会不一样对吧,我们一般来说懂得多的,我们就会讲的多一点,懂得少的就会讲的少一点,然后我自己的一个大概的一个那个一个expertise,大概是这样子的。
就是我们以前其实fracture也做过一些吧,我们做过我们有两篇c寡妇,但是我自己其实做fracture,相对来说是不是很多衣服其实还有弹性体,其实算是我的一个比较擅长的一个东西。
我大部分的经验主要是集中在这一块上,流体我其实做的相对来说嗯,以前我做的比较多,但是最近最近这几年,最近这56年其实相对来说做的比较少一点吧,然后我mesh的流体基本上没有做过。
我基本上是以particle跟grade为主的,它会集中在这两块上,我会嗯好好处在于其实这个两个重重叠度还是比较高的,所以说基本上能够把我们这个课上能够学到的内容都给他覆盖到,播的眼色是吗。
流体我们主要就是解never execution嘛,所以说对于波而言的话,就是正常的,它的波的反射折射衍射都会有,哦像这个今今天我们的内容就基本上就是到此为止了,然后嗯希望可以给大家一个基本的概念。
我们这个课大概是要学习一些什么样的东西,然后我们下周会从数学开始吧,嗯会讲一些我需要运用到的数学,然后跟数学相关的嗯知识,然后数学跟图形学里面一些包括模拟一些问题,怎么样能够结合在一起,有问题吗。
材质是吗,光照和材质不会涉及这个unity,我们就会用unity自带的光照和材质,你只要知道unity里面是怎么配置这些东西就可以了,前置作业倒是没有配置环境好像也没有吧,因为直接用unity就可以了。
书是没有的,我们的那个嗯我们的教材是没有的,但是我们会有一些那个呃就是选读的一些论文,我到时候会放在那些slides里,到时候会把那个二维码更新一下的,然后回头你们如果去那个官网上下载那个ppt的时候。
会看到一个更新过的二维码,games上的那个二维码应该也是也是也是新的,管线跟可编程的管线效率上有什么不同吗,其实得看硬件吧,我个人理解是没有什么太大的不同的,你这个碰撞响应的问题问的太具体了。
我觉得我不太好回答,d的2d的a b b它有一个套路的呀,它不是就是你可以在一个方向上先做那个先做排序吗,我记得好像大概是这样子的,不需要用computer shader,我们用unity就可以了。
有重点就是我们的那个就是我我每次放一个选读的论文,或者是一个选读的文献,他都会针对着某一个课,每每一个话题嘛,然后你只要读这个论文里面相对应的那个话题就够了,比如说嗯嗯比如说碰撞嘛。
比如说我会谈到说碰撞可以用这种方式,然后这个论文刚好用用到这个方式,那么你需要读这个论文里面关于碰撞的这个部分就可以了,你不需要读这个论文,关于就比如说数值求解这方面的东西,就是你会有一个重点。
穿穿衣模拟的例子,能简单介绍一下,人体建模就是。
是支持。
吗,我记得好像是用pose做的一个人体,人体我有点我有点不太记得了,请if,是吗,本体我记得好像是手工调出来的啊,找了美术调的,因为你自动出来的人体它会有一些问题,所以我后来又用美术再单独调了一下。
这个东西其实它的计算量是呃,不是计算量,它的处理量是挺大的,我们做这个例子,差不多要花两三个小时的时间,做一个,什么读craft,然后将原理落地的引擎吗。
其实个人觉得就是有很多图形学论文他都没有办法落地啊,每年的c graf差不多有100篇嘛,100多篇,然后加上挂v社,差不多有200多篇,你看这个真正有多少论文是能够落地的,可能有1/10都不到对吧。
但是我觉得嗯有一些比较好的,特别优秀的这个论文,然后能这个东西能够运用到实际,我觉得就特别好,前面还有一个问题就是用c sharp,我记得unity以前是支持c javascript的两种的。
但是最近他好像不是javascript,我不是很确定啊,是不支持了吗,还是怎么样,到时候会发布在官网上,然后你可以从官网上下载,然后提交的话,我目前我倾向于是用邮件的形式。
就是你把那个嗯unity里面有个选项叫做导出,导出成一个package,然后你导出成package之后,把这个package打包,然后发送给邮件就可以了,我也我印象中也是不支持javascript了。
以前是支持的,那我们今天就先到到此为止,然后如果有问题的话,可以在微信群里面或者是发邮件问好吗,对我们就是要用c sharp了,不用写shader,本身c shop有脚本。
我们就没必要再去写别的shader。