GAMES 图形学系列笔记(十九)

GAMES101-现代计算机图形学入门-闫令琪 - P1:Lecture 01 Overview of Computer Graphics - GAMES-Webinar - BV1X7411F744

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

应大家要求,咱们往回退那么一点点啊,然后我刚才说到哪儿来着呃,算了吧,直接过一遍吧,反正挺快的,我是说啊欢迎大家大家这个共抗疫情,然后这个这个这个,这个大家都各自尽到各自的责任。

我这边呢就是能给大家提供入门这个图形学课,如果大家想学,那我非常开心啊,然后欢迎大家关于我,然后我是这个当了这个system professor,已经当了一年多了,然后之前是本科的PHD清华的本科。

然后这这是RESEAR,是个人个人主页,然后这个我是主要是做图形学中的所谓渲染,或者是这个啊这个啊绘制这个方向啊,然后各种各样的这个这个兴趣爱好,以及之前做的一些东西呢,被工业界拿去采用。

然后这个以及我是apex champion的,然后这个这个这个我们的几位助教同学,然后分别是这个刘广哲同学,石宇辰同学和邓俊辰同学,然后我们更多的助教会根据课程需求,然后来添加。

那么我们今天我刚才提到说,我们主要说这么几点,什么是图形学,为什么要学,以及课程的这个呃,有一些这个这个课程包括哪些东西,以及我们说课程的一些杂七杂八的,这个事情好吗。

如果有时间我们开始这个下节课的正式内容,然后图形学我刚才提到所谓合成和这个操作,这个视觉信息,这两样都非常重要,我们之后会这个都会提到这个事情好吗,然后那今天我说我们着不重来说。

这个就是说这个图形学到底有哪些应用。

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

我们为什么要去学习它,它到底好在哪里,对不对,那么刚才我们就提到这么一个事情,就是说呃给大家举个例子啊,这有一个只狼这么一个游戏,这个游戏呢大家都知道是一个不是都知道啊。

打过的同学都知道这是一个受苦的游戏,然后这个我也非常喜欢,然后呢这个这个游戏本身画面非常好,然后我正说到说,怎么才能辨别这个在现在这个时代啊,什么才是好的画面呢,假如说你这个平常一笑可能看不明白。

我就觉得他好,那从技术的角度上来说,什么是好的画面呢,我给大家一个标准啊,这个标准非常简单,就是这个咳咳就是直接看这个画面啊,是不是足够亮就可以了,为什么呢,这个体现了图形学中的一个。

或者说渲染中间的一个关键技术叫全局光照,如果全局光照做得好,那么整个画面就会亮,看起来就会很舒服,如果你看整个画面会比较暗,那么这个这个这个这个这个嗯,就会表现出这个一定程度上的技术不足,就是这个意思。

就是说纯粹从技术的角度上来说,这是一个不错的判定标准啊,也有可能啊,这个是这个算是这节课,就是说这个给大家普及的,这一系列的应用知识之一吧,这个以后我们会穿插着讲一些这方面的知识啊,然后这个。

那么我们说到这个嗯游戏的应用啊,这是第一,然后另外一个呢我想提的另外一款游戏,叫做无主之地三,然后呢这个呃无主之地三这个这个游戏呢,大家如果可以看到这个这个画面的话啊,啊应该是可以。

就是说嗯大家会看到这是另外一个风格,他和这个嗯只狼这个就完全不是一个风格,大家看上去这个这个图像啊,像是一种卡通的那种风格,就是说卡通这种风格,为什么你看着是卡通的呢,就是说在图形学中。

这个到底是如何通过什么东西来来,这个表述的呢,对不对,所以说我我这这一系列啊,都是这个我们这个在图形学中需要研究的,这个以及要解决的问题,那么这就是这个这是另外一个例子啊。

然后啊那咱们继续就是我刚才提到说啊,在这个电影里面,这个图形学得到了广泛的应用,然后这个非常非常早的时候呢,这个有一款这个电影叫做这个黑客帝国,然后黑客帝国是1999年的电影,大家想一想。

这已经过去了20多年了对吧,然后即便是今天来看,仍然是一个非常优秀的电影,特别是这些这个特效,像这些子弹时间,这些东西就是从这个电影里面衍生出来的,对不对,然后就是说关于这些这些这个人们把它管管。

它们叫做特效对吧,在电影里面叫做special effects,只是通过这个计算机图形学的技术,把它合成出来,并且和这个真实的演员的这些,真实的这些东西啊,这个这些这些这个呃实际存在的这些东西。

完美的结合在一块,让你觉得这个东西看起来非常真实,这就是整个这个电影这套特效的这套这个,工作方式,但特效呢这个是属于图形学中的一部分,但是特效这个事情我也多说一句啊。

就是说特效其实是最简单的图形学的应用,为什么我这么解释呢,当然个人理解啊,为什么这么说呢,因为它叫特效,因为你平常见不着它,对不对,你平常很难看到这种这种慢动作的这种电影,这个这个或者说这个录像。

说这个子弹是如何破空,然后这个如何形成这么一个这种空气的,这种这种这种波,然后你可以透过它可以看到这个不同,折射出来的这个物体对吧,你看不到,以及包括这个这个出现大爆炸对吧,这个这个坏人点燃了一个房子。

然后这个开始这个背对着这个这个这个房子走,然后从来不回头看,对不对,像这种情况,这你平常见过多少次爆炸,是不是,所以说像这种这个这个特效吧,包括这些爆炸啊,包括子弹啊。

包括111堵更强一般的这个这个浪潮涌过来,这个你平常见得非常少,然后平常这个这个如果做得不对,你也不会觉得有什么意外,所以这一点可能是,大家平常这个不会去往这方面想特效,其实最简单的,最呃最困难的东西。

往往是这个日常生活中大家常见的一些东西,然后比如说啊,咱们以现在的这个rendering这方面的研究为例,这是大家吃的这些食物,这些东西现在大家做的就非常的不好对吧,然后这个是后话了,就是从这一点。

这个电影都跟大家聊一句这个事情啊,然后电影呢还有另外一个里程碑式的作品,我简单给大家这个介绍一下,然后这个作品大家肯定啊,有很多同学都已经看过了,叫做阿凡达,然后这个电影里程碑式的这个原因啊。

是因为它引入了这个这个人的,这个看面部和动作捕捉,然后然后这个或者说他做得非常好,不是说之前没有啊,这个啊就是说在这个电影里面,大量广泛地运用这个技术,然后就是说由真人演员。

然后来这个做出各种各样的表情,然后直接可以反映到这个啊虚拟的人物中间去,那么这个技术是如何做到的,对不对,这个也就是说我们之后需要研究的事情,当然这不是这个一个简单的图形学技术,可以做得到的。

我们之后会慢慢的提到说,如何去这个这个做各种各样不同的动画,就是让这些这个虚拟的人物啊,在这个场景里面,不只是说我能够把它给这个显示出来,我还要明白他在不同的时间应该是如何运动。

那从演员的这个呃自身的运动中,这个是一个不错的,一个一个一个一个采集的办法啊,这是我们之后要说的一个事情,那么动画这是我要说的另外一个事情啊,动画呢这里自然这个也是不能忽视的,然后大家应该有很多同学。

这个看过这个ZUTOPIA啊,然后这个呃疯狂动物城啊,我要是没记得错,翻译的话,然后这个大家这个都会都很喜欢,毛茸茸的这个啊动物,然后这些小动物呢其实如果大家仔细看。

大家是真正可以看到这个一根一根的这个毛发,被这个做出来,然后显示出来很多跟不同的毛发,然后在一块儿会显示出一种什么样,什么样一种的效果,然后这个这个大家想想就觉得非常难,对不对。

你想一想这个动物身上有多少根头发呀,这个毛发呀对吧,像我们百万根够不够对吧,然后以及说这个每一根头发,他都要和光线去作用,然后这个光线和不同的头发作用,也就是说在不同的头发空间啊弹跳。

最后最后最后打到人的眼里面,我们知道人看到东西诶,为什么呢,就是因为光线进入了人的眼界,那么这么复杂的一个过程,我们应当如何去做,那这个就是我们之后要说的一个就是这个呃,首先涉及到几何这块。

如何去表述这么些复杂的这种几何形体,就像这种这个毛发这种,然后以及如何去渲染,把它给这个真正显示出来,然后计算光线在这些几何形体这个之间,这种传播方式,然后这个叫做渲染,然后这个呢我们之后都会都会提。

然后呢这个最最新的一个这个动画,也是奥斯卡的这个获奖者,这个冰雪奇缘啊,然后这个冰雪奇缘二,然后咳咳,这个当然这里面涉及到各种各样不同的技术,比如说呢这个大家看到ELSA,这个放出各种各样的技能啊。

然后这个可以看出这个,它它它这个各种不同的特效,比如说这个这个烟雾啊,这算是一个,然后就是说他这个不同的这种发光的,这种粒子啊,然后在空中盘旋啊,打拳啊,然后这种这种这个形成不同的这个。

这个不同的图案啊,像这些东西是怎么做出来的对吧,这些东西呢,自然就是说这个这个这个这个图形学下面的,另外一个重要的分支,咱们管它叫做模拟或者动画,然后这块就是在模拟这些东西,这个这这些微小的这些例子。

然后如何去运动,以及包括一些这个更大层面上的,比如说人物的这个衣服啊,在风的吹动下,它应该如何如何去变化,然后形状如何变化,以及说这个头发对吧,头发跟头发之间他们肯定互相有碰撞。

那么把这些东西真实的都模拟出来,那么我们就可以得到一个真实的这个,这个这个样子对吧,诶这里就是这个图形学也可以研究的东西,然后在这门课咱们也会给大家介绍一下好吧,然后呢再多给大家介绍一些别的东西。

比如说设计设计这个事情呢,这个这个事情大家可能听说过一个词呃,确切说一个缩写啊,叫做cad,叫computer aided design,然后就是说现在的这些设计,很少有这些手绘设计了。

基本上来说都是用电脑来辅助,那么这个设计可以做到什么,那我就举个例子,这里呢大家看到两幅图是同一辆车,只不过呢左边是这个电脑渲染出来的,这个假的啊,不存在,右边这个呢是真实存在的。

它是在这个AUTODESK公司的展厅,这个我还亲自见到过,就是它是一辆真实存在的一辆车子,号称是不同的地方,不同的部件,好像是3D打印出来的,然后把它拼成一块啊,这是一个真的车子。

然后他这个右边这幅它是真实的这个拍摄,然后他旁边呢就有一个电脑,这个电脑上显示的就是左边这幅图上,大家看到的东西,这个左边左边这个就是这个cg啊,computer graphics呃。

这个这个生成的这个这个呃车子,然后这个车子呢允许你做一些交互性的操作,比如说你可以移动它,然后你可以换各种各样不同的这个,这个这个环境光啊,就是说在不同的环境下,你可以立刻看到它长什么样。

唉这个就非常好,就是说关于这个设计呢,就是说可以设计各种呃嗯怎么说呢,就是从这一个例子我们可以看出无数的事情啊,比如说首先这个这个车子表面,它这种光滑的这种这种曲线,这个是如何设计出来的。

就是说它这个确切来说不是曲线曲面,他是因为在一个这个三维空间中的嘛对吧,他这个他这些面是如何设计出来的,然后呢,大家也知道,特斯拉最近推出一款这个非常丑的皮卡对吧,那那些面又是如何做出来的对吧。

这是这个是呃,我们都是这个图形学里面要研究的一个,几何的这些东西对吧,然后呢另外一个就光照,光照为什么这么多,在左边的这个cg这个图里面,那你可以动态的换一个光照,比如说就换跟右边这个实际的这个光照。

一样的光照诶,那我就可以看到一样的效果,那我可以把它放在室内,可以把放在把这个车子放在室外,然后放在不同的位置,我立刻可以看到不同的效果,那这样的话我就不用真的把这个车子拿过去,这个拿到不同的环境下面。

看它长什么样对吧,我可以拿这个可以在这个虚拟环境中测试,包括啊这个事情让我联想到另外一个事情,就是说有一些这个车子不是有一些啊,好像所有的车子都得经过这么一个这个,碰撞的检测吧,就是说车子做出来之后。

在实际这个上市之前,他们得这个这个把车子往墙上撞对吧,这这个这个这个应这么这这个这个烧钱对吧,然后就是说其实这些东西也是,在这个图形学里面,是可以这个通过这个模拟的方式,然后把这个整个一个这个车子与墙。

然后这个碰撞这么一个过程模拟出来的啊,就是说嗯这块呃,也是在背后有着各种各样不同的图形学的应用。

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

所以单从这一个例子,我们就可以看到很多很多不同的东西,那咱们继续啊,那这里大家看到的是一个什么呢,这里看到的是一个国外的这个家装网站啊,这叫做宜家IKEA,然后他这个网站呢他会给大家提供说。

就比如说我们设计出来一套厨房,然后这套厨房长这样,然后大家觉得啊看上去挺好的,然后这个这个比如说大家现在看到这个例子嗯,是挺好的,可是呢大家有时候可能意识不到,就整个这张图来说,它完全是由计算机生成的。

而不是一个真的这个这个装修的结果,就是说对于一些家具,然后这个整个一个这个室内这些东西啊,然后然后这个可能只需要这些艺术家们,把不同的这些部件,然后给摆在一块儿,然后给另一定的这种光照的条件。

比如说在这里,大家可以看到光线,主要是由右边这个大窗户进来的,然后呢进来之后会有各种各样阴影,然后这些在光线在这个图形中,各种各样不同弹跳,然后最后这个进入人的眼睛,这个过程呢叫做渲染render啊。

然后在这个宜家的网站上呢,75%都是这个渲染出来的,而这还是几年前的统计,我我我觉得现在可能会更多,然后国内呢现在也有一些类似的这些公司,类似酷家乐这种公司啊,在做这方面的事情。

就是说包括这些室内的这些设计,这些已经完全走入了,这个这个平常大家消费者的这个范围之内,然后大家可能平常甚至不太会去关注到,这个事情,但是这些都是图形学在背后的功劳啊。

然后嗯另外我们现在进入到下面一点啊,这个呃可视化我们提到可视化这个事情啊,就是就是说啊我们之前定义这个图形学的时候,我不知道大家这个还还有这个概念吗,就是我刚才说图形学啊,他会这个操作这个可视化的。

这些这些这些视觉信息,对不对,然后所谓一种一种这个实际的操作,视觉信息的方法,这个就叫做可视化,然后这个可视化就是把一些这个,比如说我们之前这个测量出来啊,这个呃人体。

人体呢经过一些什么三维的扫描和CT啊,或者什么什么核磁共振啊,这一系列的扫描,可以扫描出来很多这个三维空间中的信息,然后这些信息呢,然后我通过一定的办法把它变成视觉信息。

然后就是说这个这个就是说呢这个呃过程,我们就管它叫做可视化,就是有很多信息,比如说大家看右边啊,右边这个右上方有一个这个什么,这个应该是美国的这个呃雇佣的增长率,然后可以看到在不同的地方。

用不同的颜色来表示这个增长率,这一目了然,大家可以看得出来,然后下面是一些什么婴儿的这些成像,就是说这些在各个地方都会存在,然而然而这些所有的这些啊,这些可视化的这些过程,都属于这个计算机图形学领域。

当然最近啊这个可视化领域,这个相当于越来越多,在科研范围内算是独立出来,然后但是不管怎么样,从一个大的方向来说,这算是一个图形学上的一个重大应用好吗,就是这个也算是视觉信息的操作的一部分。

然后下面一个我要说的是这个呃,这个虚拟现实,大家可能平常已经听说过这个事情啊,就是说虚拟现实这个这个到底是干什么的对吧,就是说啊虚拟现实往往是和另外一个概念,叫做增强现实,叫做augmented。

reality叫A2,然后虚拟现实呢virtual reality叫V2,然后V2A2经常在一块提,那么它们有什么区别呢,这里就可以告诉大家没什么问题呃,就是呢这个虚拟现实就是说你看不到现实啊。

大家带一个这个头戴设备,然后大家看到的东西全都是电脑这个生成的啊,然后大家看不到自己面前有一个桌子,然后比如说咱们现在看到的这几位用户,互相也看不到对方,这个就叫虚拟形式,增强天使呢。

就是说你可以看到这个,现实中间的一些学习的东西,然后这个并且在这之后,你还可以看到有一些新的东西带进去了,而这个是增强显示,比如说我现在看到这么一个例子,就是啊这里是应该是微软的HOLLANCE。

他做的一个这个呃是一个嗯宣传片吧,然后嗯大家可以看到有一个这个办公人员,然后他再做一个这个摩托车的设计,这个三维的设计,然后他在桌子上立刻就可以显示出来,一辆虚拟的这个摩托车,然后这个就非常好。

就是说我这边设计的那边我就可以看到对吧,然后这个这个就可以啊,诶然后这样的话,这边呃,增强电池这块和虚拟现实这块具体有问题,但是不管怎么样,这都是普通设备,然后就是说呃会变成一个嗯最近啊。

最近建议有这种趋势,就是说大家原本都是在屏幕上面看的东西,然后建议大家在这个试图拓展,大家能够看到东西的范围,就包括这个心理建设,增量建设,通过投资设备,以及之后,大家希望这个完完全全的把这些东西当。

大家直接就可以看到这个三维,这个真实的世界中啊,嗯嗯哦好吧,我好像看到大家说有一些问题哈,嗯嗯OK好吧,世界上,那不管,那我们先继续啊,还是像刚才一如何,那我就再回头400块1。5杀,那虚拟现实。

增强现实,然后我们这里先给大家看一下,做这个这个应该对这个怎么说,对这个网速的挑战可能更厉害,然后这个啊,这里是在说一个什么事情呢,就是说嗯大家现在越来越多的用一些这个,数字的设备啊。

直接就可以进行这个这个画画,比如说像这里,大家看到的是有一位艺术家在用IPAD,然后直接在这个上面手绘一个这个,这个真实感的人像。

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

然后做的非常好,大家可以看到一个从这个这个不清楚在这个啊,然后这个非常非常这个细节化的绘画过程,然后嗯好吧,声音好了是吗,OKOK好好好可以,画面呢不是画面不动哦,这个是这样,这个画面哈哈哈哈哈哈。

是没错,大家能够认出这是哪位啊,嗯然后就是说啊,我就是说现在这个嗯这个数字设备,现在给大家带来了很多便利,然后就是说大家现在包括绘画,有很多事情可以通过这个电子的方式来完成。

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

然后绘画这个事情不容易,比如说大家可以看到,一开始,大家用手指在上面画了很多不同的这个道,然后比较粗,然后简单的画一下,打一下这个基本的底子,然后呢在上面呢这个这个胡子啊,头发呀,像这些东西。

大家可以用这个非常小的这种精,对这个精度非常高的一些这个笔触,然后在上面画这个东西,那么一个典型的这个工业界的例子,就是adobe的PHOTOSHOP对吧。

PHOTOSHOP就给大家提供一个非常非常强大的功能,能够对对这个这个这个这个数字化的这些图像,进行编辑,以及进行这个各种各样的绘画,所以说这个的背后也都是这个图形学的功劳,就是说这个呃我们之后的课程。

也会说如何去描述这个曲线啊,然后像这个这个如何去做这个呃所谓呃差值,以及说如何去做一些嗯,就是说不同的颜覆盖在一块儿,然后应该显示显示成什么样这种透明啊。

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

或者这一系列的东西,就是在这个背后存在着很多很多很多很多,图形学的技术,那么那好我看到大家说这个看到在画了是吧,这个动静非常小,可能这个这个呃传过去之后可能更看不到什么,咱们就继续了好吗。

那这个我刚才其实就已经在这个动画中,我就提到了,就是说模拟,这是另外一个非常非常重要的应用,这个模拟呢体现在很多方面,刚才给大家提到,比如说像特效,像这里呢左边就是一个沙尘暴的一个这个特效。

然后就要模拟各种各样的沙子,在这个空气中怎么样去飞舞,然后怎么样推过来对吧,然后怎么样去把这些房屋这个摧枯拉朽,对不对,然后这个这个这个房屋,为什么会这个这个这些不同的结构,会被打成一块一块的。

以及说这个木板中间会会怎么样去锻炼对吧,也就是说包括这个沙子落到了水里,它应该长什么样,然后像整个这么一个过程,这些都需要精确的物理模拟,然后咱们这个过程精确的运算出来,这也是一个同学的重要部分。

叫做模拟啊,然后或者或者早期有人管这个叫仿真,然后当然在这个在这个啊,在这个这个这个美工们的AA看来,这个叫动画啊,这都是一回事,所谓仿真模拟动画都是一回事,然后呢,呃右边这个呢。

大家看到的是星际穿越里面的黑洞啊,这个黑洞是啊,这个这个就是来看右边这个渲染,就是说这个当然这个是图形学模拟出来的结果,然后这和如果大家关注这个社会啊,就是说去年大家这个这个这个人类测出了。

这个黑洞长什么样,然后有这个呃黑洞的照片非常模糊,我相信这个照片模糊之后,其实应该从某个角度看上去,应该跟那个照片会比较相似,因为基本面都开始,然后就是说这个黑洞呢,这个钻石也是一个重要的模拟。

当然也就是告诉大家啊,模拟不仅限于说这个物体,这不吃如何和这个空间啊。

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

或者别的什么东西啊,我刚才提到说黑洞其实模拟的是光线对吧,然后模拟的并不是这个实际中的这种尘埃啊,这种物质,然后光线这个发生偏折,也就是说在这种情况下,我们不再假设光线是直线传播对吧。

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

这些都是一些需要这个精确模拟的东西,那咱们继续啊,就是模拟是一个重要的事情,然后这里呢提到一个一个概念叫GUI,这个g o i a graphics user interface,就是图形用户接口。

然后这是什么意思呢,其实就是不同的设计,就是大家可能有人用过这个Mac对吧,有人用过windows,然后有人这个这个用过这个LINUX,各种不同的发行版,然后这个大家会这个各有喜好。

觉得哪一种会设计的比较好,就包括这些设计,包括windows这个磁贴风格,包括这个Mac的这些各种各样的这种,这种这种设计,然后这些都是属于图形学的范畴,涉及到这个设计啊。

最近这个和这个可视化差不多是一个意思,这方面的研究进呃,呃最近应该是说这个呃开始这个独立进行研究,就是说关于这块设计的事情。

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

然后但是不管怎么样,从一个大的方向上来看,都属于图形学的范畴好吧,然后这里这个再给大家介绍另外一个事情,叫做这个topography啊,我们就简单管它叫字体吧,啊然后这个啊就是说啊关于字体方面的设计。

这个事情,可能我不知道大家意识到这个事情没有啊,比如说啊如果大家看一张图,然后咱们把它放大放大放大放大,然后最后会看到一个什么样的现象呢,就变模糊了,对不对,但是大家有没有试过说把这一个字体。

把这个比如说我打出来的一个一个字母,然后我给调字号调非常大,然后呢我这个这个这个就一直到非常大,最大最大这种级别,然后我还会发现简单也挺清楚的是吧,然后就是说这个字体到底是拿什么表示的。

这个和图像到底有什么区别,为什么他看得清楚呢,为为什么在任意放大的情况下,我都可以看到一个连续的这种曲线呢,然后为什么图我把它给放大了之后,这个它就不是呢就会变模糊呢。

这里就涉及到点乘和矢量这两个不同的概念啊,这个在之后会给大家来解释这个事情,然后呢这里多给大家普及另外一个知识哈,大家看到这句话啊。

The quick brown fox jumps over the lazy dog,所以这句话这个是一个是一个在字体测试中间,很常见的一个一个这个句子哈,这个我不知道大家知道这个为什么。

这里这里当然了,我这里问一个问题,我就直接这样吧,我就啊啊,我就直接给大家这个这个这个说说明理由吧,是英文啊,这句话他用进了英文中的26个字母,所以大家会会看到这句话通常会出现两次,一次是全大写。

一次全小写,然后呢这句话里面包含了26个字母,所有的26个字母都出现了一遍,所以说大家会用这个东西来测试,这样的话可以测试一个字体的完整性啊,这是为什么,用这个对没错,然后那咱们这个这块呢。

应用简单给大家介绍一下,然后呢这个我们这个正经一点来说啊,就是这个图形学他这个挺难的,然后为什么呢,因为它包括了很多东西,它包括了这个就是说你要研究啊,说这个和真实的世界,这个这个这个各种各样的东西。

在真实世界中如何去作用,包括这个不同的物质,我们刚才说到模拟说呃,以及不同的这个光对吧,然后材质,然后各种各样不同的东西都需要研究,如果我们研究不明白,那就很难把这个事情表示清楚对吧。

然后呢所以说我们需要对这个真实世界的理解,而真实世界的理解,这是一方面,相当于我们有足够的输出,然后另外一方面我们要输出,对不对,这个图形学最后要生成一些新东西,然后呢他这个这个怎么样生成新东西。

这是新的计算方法,然后怎么样把它显示出来,新的显示方法,包括这个什么,大家要有这个什么nintendo three d s啊,这个是是一款掌上游戏机,大家会发现啊。

裸眼3D这个技术大家最近也是在研究对吧,然后包括这个全息影像,这些都是新型的一些这个这个显示设备,在不同的显示设备下,这些东西要如何运作,我们提出的方法如何能够用在这些方面上对吧。

所以这些东西都加起来了,这就造成了为什么图形学会相对困难,但是我相信这节课呃,这这门课咱们学习了之后,应该大家会这个会意识到啊,图形学用到之前各种各样不同的知识,只要咱们把这些前面知识这个融合贯通。

而这些理解清楚这个事情并不难,然后呢图形学这个包括了具体哪些内容,这点呢给大家直接这个呃一带而过啊,就是说我们之后肯定都会说涉及到什么,各种各样不同的矩阵,各种各种各样的这个呃。

这个这个物理上的各种各样的这个光学啊,然后着色呀,然后这个怎么样去描述,以及操作不同的三维的形体,以及怎么样去做这个这个呃,动画与以及仿真对吧,然后这里有一点想跟大家提一下啊。

这门课里面这是也是我故意的,也是也是算是我这个对图形学的一个理解啊,我们不会去说怎么样去做这个硬件的编程,如何去写这个三维的这个这个应用,比如说我们真正的用什么open gl,大家会提到这个事情。

大家可能会觉得疑惑,可很快我给大家解释啊,然后咱们先过了这一点,然后这个我们回到这个基本问题上来,为什么要学习计算机图形学呢,那考虑到前面的所有的这些知识呢,然后咱们把它总结在一块啊。

Graphics is awesome,awesome呢,这个咱们这个这个这个这个中文呢就是厉害啊,就是就是非常好,就是说嗯酷炫对吧,总之就是一系列这种这个这个很不错的,这些这些词汇综合在一块儿。

然后咱们来形容graphics,我就喜欢生成这么些这个这个好看的图片,没问题,这是一个理由,总之就是说啊图形学是一个非常广阔的世界,然后这个呢这个大家就是说通过学习这门课。

也能够渐渐能够意识到这么一个事情,对好看就完事了,说得对啊,然后这个呃我看一下啊,大家这个这个事情嗯,好目前没什么问题,好像有同学提到open gl的事情啊,好那么我简单给大家这个解释一下。

好在这里应该大家会看到好,那么我们这里简单给大家说一下,这门课要包括哪些内容,就是说我们主要会说四个部分的内容嗯,第一部分叫光栅化,也就是说现在的大家提到的open gl以及所谓SHADER。

这些东西是如何运作的,然后会把这些给大家讲明白,然后呢这个曲线和曲面呃,然后然后这是整个一个这个几何相关的内容,也会给大家讲一些几何方面的前沿,然后另外一个叫做ray tracing。

所谓光线追踪要给大家这个讲到,说这个目前这个大家是如何在这个动画呀,电影里面生成这个这个呃真实感的画面的,就是通过这种光线追踪的方法,然后也会讲到一些稍微深入一点的话题,包括路径追踪。

包括一些更复杂的这个表面建模,以及光线传播方法,然后第四点会给大家讲这个动画与模拟,然后我为什么着重来说这个事情呢,就是这个嗯,就是因为啊,就是说我见到过很多同学学习计算机图形学。

学完了之后说问计算机图形学是什么,计算机图形学是open gl,那我觉得不对,不能这么理解,计算机图形学包括了很多东西,open gl呢仅仅是图形学中间的一个API,我们马上再接着说好吗。

然后就是说图形学包括了很多不同的,这,这至少这四个方面是目前我觉得呃非常重要的,也是这个比较热门的一些话题,然后我们挨个跟大家说,然后咱们现在开始来看对吧,这个第一块叫光栅化,什么叫光栅化,很简单。

把这个这个三维空间的几何形体显示在屏幕上,这就是光栅化,然后呢这个这个事情这个不容易啊,就是说这个是所有游戏,这或者说呢这些实时的计算机图形学,他们的一个主要应用,那么在这里给大家介绍一下什么叫实时呢。

实时在不同的这个领域有不同的定义,在这个计算计算机图形学习下面的这个呃,实时的定义呃,我们认为是每秒钟能够能够生成30幅画面,或者叫30帧,也就是30FPS,就是frames per second。

好吧,能达到这样一个级别,我们就管它叫实时,否则呢呃这个我们就管它叫离线啊,offline啊,然后就是说这个实时的图形学,会广泛应用到这么一种这个光栅化的方法,主要是要做投影,然后这个之后怎么做。

咱们再介绍给大家,然后呢关于几何这块着重介绍一下啊,如何表示一条这个光滑的曲线,然后如何表示曲面,如何用这个这个简单的这个曲面呃,然后通过细分的方法,然后得到一些更复杂的局面。

以及说这个在这个形状发生变化的时候,这些面要如何变化,然后如何保持住这个物体的拓扑结构,然后就是说很多这系列的东西会给大家介绍啊,然后啊然后光关于这个光线追踪这一块儿啊,然后这个是第三块需要给大家说的。

然后呃,嗯这块呢就是说现在动画和电影里面着重使用,因为它卖慢,但是它有好处,它能够生成非常真实的画面,大家可以看到这个右下角这张图啊,这看上去就会这显得这个非常美观。

其实大家可以可以生成这个质量更高的画面,然后这里是大家第一次在图形学中,听说这个事情啊,就是说图形学里面有很多事情,我们管它叫trade off,什么叫吹,什么叫trade off呢。

就是说唉有时候啊我为了达成某一个目标,不得不牺牲一些其他的目标,就比如说像这个光线追踪,光线追踪呢能达到好的效果,但是呢他就是卖就会存在这么一个问题,但是啊人都是贪婪的,对不对。

但我认为这个事情是好事情,正因为这个这样一个一个属性啊,才会让人这个认为,才会让人去寻找一些这个两全其美的解决方法,那么有没有办法能够让这个这个光线追踪,做得又像实时的这个这个光栅化一样快。

然后又能够达到这个光线追踪的这个效果呢,呃当然是有的,现在有新的技术叫做实时光线追踪,那么在这个这个课里面呢,也会给大家介绍好吗,然后这是第三块,那第四课呢,就是我们管它叫动画或者模拟或者仿真。

然后呢这个会讲到很多不同的东西,比如说大家嗯那扔一个这个弹性的球,这个球呢怎么样才能落在地上,然后如果被挤压,然后如何这个这个弹上去再下来,然后以及大家可以看到一个动画,如果网络还可以的话啊。

就是说这里是一个之前的一个这个论文,里面的研究,就是说他们把一块布这个挂好,然后真实的测出来,大家看到左边一列啊,是是照片,右边一列是仿真或者模拟,大家可以看到这个模拟的效果是非常非常。

这个令人惊讶对吧,然后所以说这个也是这个要给大家介绍的,而这已经是算是很早很早以前的技术了,现在来说这个这个只能会做得更好,所以说这都是需要给大家介绍的,没问题好,然后呢我现在简单给大家提一下这个事情。

我们这门课games101算是有了个克号啊,以后games还会有更多的课,然后这个101呃我们会说什么呢,呃嗯就是前面说的这些内容,那么不说什么呃。

首先这就是我要说的一个不说open gl或者direct x,大家打游戏会更多接触direct x啊,然后VONVON算是一个跨平台的一个,这个呃也是一套图形学的API,然后呢这里为什么不交。

这里其实说不是说这个事情难,所以不交,而是说我希望教大家的是这个背后的知识,就是说大家学了之后,大家就明白说这个三维到二维,如何能够这个做投影,如何才能够把真东西真正显示上,然而学完了这门课之后。

我们就可以可以运用我们所学的知识,立刻就可以掌握使用open gl的一些方法,也就是说open gl direct x Vulcan这类的东西呢,我们管它叫做图形学API。

我们用这些东西可以帮我们生成一些矩阵啊,或者什么东西,但是在这个背后,如果我们知道这个这个整个的一个工作原理,那么我们一定在学完这门课之后啊,我保证这个事情学完这门课之后。

你一定可以自己把open gl学起来,这点绝对不会有问题好吗,这就是为什么我们不说这个这个事情,然后这就是我经常说的这个事情,We learn graphics,Not graphics api。

就是这个意思,就是说我们不希望教大家如何去使用什么,大家明白吗,就是说我始终是这么一个感觉啊,就是包括大家学各种各样的东西,所以编程语言并不难,为什么呢,我只需要去应用它,而这个什么东西难呢。

在背后的算法,数据结构这些东西会困难对吧,道理是一样的,然后呢哎呀van对吧,我好像拼错了啊好吧,这个之后我稍微改一改啊,然后包括SHADER怎么样去写,这个没有没有关系啊。

这个就是说我们教的这套体系里面,一定会提及这个事情,只不过不会提及到具体的,比如说open gl对应的SHADER的语法叫做GLSL,然后或者HLSL之类的东西好吗,那咱们就这个不会说的一个话题。

那另外一个不会说的话题呢是这个呃,就是三维的建模或者是游戏开发,对就是说这块呢这块同样是一些工具,就是说我们只要掌握了,如何嗯这个玛雅或者这个max啊这些类的东西,然后我们这个学用这个东西学习一个星期。

我肯定可以去做一个这些简单的模型,至于你做的好不好,这个是另外一个事情,这个是处于这个是属于这个审美,或者说有没有这方面美工的天赋,这是这么个事情,但是应用这方面的软件。

只要你能够保证这个图形学的这个基本概念,能够明白,这块绝对不会有问题,然后呢,关于使用什么unity或者说unreal这个引擎,这些游戏引擎呢会包括很多不同的东西,你可以比如说就放置一个场景。

放置一个人,放置一些这个灯光,然后设置一些AI,然后呢这个就就可以正常运作呃,以及包括应用这些东西呢,我都认为这些东西算是相对比较容易的,然后就是说这个是大家看到的,这里这个人们可以用这些工具。

创建不同的三维模型,然后人们会这个设计各种各样的游戏,通过这个游戏引擎,然后呢,这里啊这里是另外一个,不会在这个这个里面覆盖的内容,然后呢我们另外再提到另外一个事情,就是说啊。

嗯图形学和计算机视觉往往会被混淆在一块,然后在这里,我希望把这个事情给这个,这个这个这个说得清楚一些,就是说在这门课里,咱们不会教计算机视觉,所谓视觉是什么呢,很简单,一切需要猜测的内容。

这个大家只要知道这个事情就好,一切需要猜测的内容,基本都是这个呃计算机视觉的内容,比如说呢我左边看到的左下角看到这张图,我要识别出哦,哪些地方是这个人,哪些地方是路面,哪些地方是不同的障碍物。

然后像这些东西呢,就是说我不可能有一个准确的答案,我需要这个一定程度上的猜测,那这些东西呢就是计算机视频,希望他理解这一系列的事情,分析理解这一系列就是计算机视觉在做的事情,然后呢。

嗯深度学习在这门课中,不会不会被这个呃特别提及,比如说你要知道任呃,这种什么什么什么什么干这种结构,然后这种结构呢可以用来生成非常真实的人脸,但是他也会失败对吧,就是说就是就是就是说这一系列的方法。

我们认为他是在这个图像的层面上进行操作,这个操作呢就不属于图形学的范畴,那么大概就是这么一个事情,涉及到理解猜测与这个意义这方面的事情,然后咱们不会去学习这个事情,然后如果想学的话,很简单。

这个这个计算机视觉的课程,我不知道我们会不会开啊,之后这个在这个后话吧之后再看,然后呢既然提到了这个事情,那我就希望把这个事情给说清楚一些啊,就是说这个嗯,我刚才提到说各种各样不同的领域。

它到底有什么不同的区别呢,对吧,我个人的理解,大家看这幅图,这幅图,其实大家其实网站其实能够见到一些类似的,但这里加入了一些我个人的分析在里面,嗯大家可以看到这个图的这个最重要的两点,一个叫model。

一个叫image,然后所谓model呢,我们更多认为,比如说是描述三维中间这个这个形状的,这些几何的形体,或者说是对于这个渲染来说,是描述它的材质或者光照这一系列的这些,这些怎么说呢。

就是一开始就有的在三维空间空间里面的东西,然后呢我们要把它转换成一幅图,然后这个呢就叫做这个计算机图形学,然后特指这个渲染作业,渲染就是要把这些模型然后综合在一起考虑,把它给变成一幅图。

然后这就是大家看到的正向的这个箭头,那么反向的箭头,从一张图我如何去识别出来,各种不同的这个模型对吧,就是我刚才说的这个这个语义分割,涉及到这个这个我要认出哦哪一块是什么,拍了一张照片啊。

这里面有一个桌子,有一个椅子,然后有这么些东西,然后就是说涉及到这些,这些就是从图像,我要分析出它到底是一个什么样的结构,这里就是计算机视觉,那么就是这两这两条线,另外两条线是一个环形。

大家可以看到在model这一块自己绕自己,就是也就是从model model,这是什么呢,这块我的个人的理解啊,这块目前来说应该是别人不会这么理解,但我个人的想法是,这块仍然属于计算机图形学的内容。

比如说我希望去描述三维的形体,我如何去描述,然后以及说我做三维空间中的仿真,我一堆这个这个这个这个沙子,然后或者说有什么油倒到面上对吧,然后像这种模拟,那我得到的仍然是模型,然后从这个过程中。

相当于我完全没有经历这个图像,或者这方面的事情,整个事情发生在三维空间中,然后这块就是我我理解的这块儿呃,这个model呃,或者simulation,这块的过程,然后同样这块也包括渲染一点点的知识。

就是说这个这个渲染这块呢,这个也包括涉及到对一些材质我如何去建模,我如何去研究这些不同的材质,如何与光线作用,那这些都是与图像无关的内容,那么整个这一块呢我们认为它是computer graphics。

也就是图形学,那么在图像到图像这个圈是怎么理解的呢,这块呢之前有一个应用,人们管这块,很多人哈管这块叫做计算,摄影学,叫computational photography,我觉得这是一个不太好的应用啊。

就是说计算摄影学更多的是研究,如何去用不同的这些这个呃呃,如何去用不同的这个呃这个摄像方法,捕捉方法,用不同的摄像机,然后用这个测量不同不同,各种各样的这些关于光学的这些属性,拍摄各种各样不同的图。

比如说我们要拍光线在一个极其微小的时间内,传播的这个这个这样一些图,然后就是说类似的这些方式叫做计算摄影学,然后在这里从一张图到一张图,我认为啊嗯以前我们管它叫图像或者视频处理。

现在更多的是大家应用和计算机视觉,完全相同的方法,然后就是目前来说呢,更多是依赖于深度学习,然后去分析这个这个呃,这个这个图像从一幅图变成了一幅图,比如说咱们可以从这个呃这个这个一个人脸。

变成了另外一个人脸对吧,然后像这些在图形领域上操作的,在中间涉及到,仍然大家可以意识到这个事情对吧,中间涉及到一些猜测,涉及到一些这个推断推理,这些东西就会更多地运用到这个呃,计算机视觉的知识。

那就这是一个计算机视觉的一个经典应用,然后这个刚才有同学提到说三维重建,说给你一张图,你要把它的三维模型给推导出来,当然是计算机视觉,对不对,因为你从一张图要推推出它的三维的结构。

这个正好就是向左的这一道计算机视觉的,这么一个这个连接,那当然了,纯粹个人理解啊,这点跟大家说清楚,就是说我对这些的把握,我我是否有能力能够能够定义这些这些方面,这个不清楚,就是说我只是给大家解见识。

呃,怎么说呢,介绍一下嗯,这个是我自己心里面是怎么想的,但是有一点现在的这个这个生活中啊,就是说它涉及到科研,涉及到这个各个方面,就是说嗯像这些明显的边界已经越来越模糊了,有一些问题你可能说说不准。

它到底是属于一个什么样的过程,比如说图形学里面我们要应应用深度神经网络,这个怎么怎么算,然后以及说这个嗯A2V2,就是虚拟现实这块的应用呢,我们要先用计算机视频去视频,去识别出来一些东西。

然后再把这些东西拿到的这个新的东西,这个放进这个虚拟场景里面去,那这样一来呢,就是说又涉及到这个这个计算机,视觉和计算机图形学的结合,所以一方面呢这些学科之间结合越来越紧密。

另外一方面他们界限也越来越模糊,所以其实这个理解来说呢,只是说给大家做一个这个参考好吧,这个之后在这个在这个嗯这个实际的过程中,咱们再去慢慢体会,那么这个这个是简单给大家多说一些,这个这方面的理解。

那么我看一下啊,好像这个这个这个这个挺好的,然后这个目前好像,大家没有什么特别大的问题嗯,A2是不是两方面都要是的啊,没问题,然后那咱们再继续好吗,这个我希望就是把这个各方面说清楚对吧。

然后咱们已经说到了这个课程会包括哪些内容,不包括哪些内容,然后咱们最后呃提到这个事情,就是说关于课程的一些这个具体的细节,首先呢我们之前说了,这门课既然不教大家用open gl。

然后这个教的是背后的这些知识,然后不涉及到这个硬件的编程,所以回去不要骗你们的家长,说我们这门课要写这个这个这个图形学的作业,然后我们要买一块2080ti,我知道你要打游戏啊,这个这个这个你用不着。

这是一个,然后这个这个课呢,然后涉及到这个中文课,然后如果大家这个之前找到过这个英文课的,这些课件或者什么,没没有没有问题,大家拿过去用,但是有一点就是说这个课每一次都在更新换代。

然后像这次比如说我们第一讲就改了不少内容,然后这个这个我在课程结束之后,会把这个PPT形式的这个呃,会把这个PPT讲义以这个PDF形式放在课程网站上,那么课程网站就是我要介绍的另外一个事情,对吧。

然后呢,这个啊这个这个课程网站,大家可以通过我个人的网站直接找到啊,在提醒这一栏直接就可以找到games101,那么嗯这个很多信息,我们这在课程网站上直接就会有,包括这个课程大纲,包括这个课程结束之后。

我们就会这个放出来这个PDF对吧,包括这个讨论信息对吧,然后这个这个各种各样东西都有,然后呢再给大家举个例子,就是大家会看到这个这里是英文的一个例子啊,就是说我们每一周结束之后,会在这个对应的这个课。

后面加一个这个PDF这个链接,然后呢,这就是这节课我们这个涉及到的一些内容,然后我们把这些这些,这个这个最后肯定是都会把这些PPT给大家,这是最新的这个版本,那么另外一点就是在每一节课的开始。

我尽量早的把这个阅读内容给大家,这个拿出来什么阅读内容呢,我们待会儿会说有本书,这个是嗯不是说这门课需要的教材,但大家如果想学习是完全可以买来一看的,当然这书挺贵,然后这个马上再说。

就是说对应到这个每一节课,我们要说什么,如果你可以提前先看一看这个书对应章节,这都是我选出来的,应该会有所帮助啊,当然不做任何强制要求,然后呢这本书是什么书呢,就是所谓the tiger book啊。

虎叔啊,这个大家平常这个这个这个这个口语里面,这么说啊,然后就是说这个只是作为一个推荐,或者说辅助的一个读,然后如果大家这个找的话,应该是可以找到,然后这个这本书应该是挺有帮助的,然后我这里显示的啊。

显示的是第四版,实则是大家用第三版就已经足够了,然后第四版当然好没问题,然后但是我之前可能大家看到课程介绍了,我之前提到过这个事情,这个第二版呃,这个嗯不不不是这个意思,就是说中文版只有第二版。

这就不太好,所以说如果大家有中文版的话,对照着英文版读一读倒是可以,然后但是其实英文版写得非常好啊,这块并不是什么太大的问题啊,然后呢唉这里就是这个这个这个关于这本书。

然后呢我们还有一个在线的这个答疑平台,这个平台的链接写的也有,然后之前大家也收到了各种各样不同的广告,然后然后这不叫广告吧,就是跟跟大家说一说,我们这个平台上线。

然后就是说这个平台是在games的官方网站上,大家就可以直接找得到啊,大家不用记这么长的这个这个这个链接,games gcn点ORG,然后直接可以找到讨论群,不是能看见吗,讨论群里面。

然后大家可以只看到这个事情,然后大家欢迎大家积极踊跃这个问问题,然后我们的助教包括我,然后这个只要有时间,肯定给大家来回答这个事情好吗,然后呃嗯好,然后这里我看一下啊。

大家同学有疑问再问这个英文版要看第几版啊,只要大于等于第三版就可以好吗,然后嗯嗯好吧,这个这个这个嗯好,其他没有什么太大问题,然后这个作业作业呢嗯这里给大家说清楚,这次我们我们作业呢是按周来算。

每一周有一个小作业,然后这个小作业呢是已经给大家提供好了,代码框架的,然后大家只要在这个代码框架上面呢,做那么一点点这个这个呃改动就可以了,然后呢作业有明确的描述,你需要干什么。

然后你需要得到一个什么样的效果都会写清楚,然后就是说呃,你需要的就是掌握这个提供的代码框架怎么用,以及快速的把这个我们上课教的这个内容,把它实现进去,然后每周会有一次。

但其实第一周甚至第二周结束都不会有,然后就是说我们这个呃总共有七次小作业,就是这个意思,然后然后这个语言呢是要求用C加加,这个马上再解释啊,就是说正常情况下这个代码的工作量很少,然后只要你理解的对啊。

正常每个星期新写的代码应该不超过20行,应该就可以解决的掉,然后呢,我知道这个这个可能有同学会觉得,这个这个这个C加加啊,这个觉得觉得很头疼,然后可能说自己这个本科的时候。

或者或者说呃以前没怎么太接触过这个事情,然后呢一方面我想说C加加,这里呢我们提供这个框架之后,你需要用到的知识并不是超级多,比如说特别复杂的一些指针啊,这些什么操作你用不到,然后呢就是就是说正常写的话。

我们也有非常不错的库可以用,比如说我们我们的这套这套这个作业里面,用了一个叫做ion的库,是这个是可以做各种这个方便的,这个矩阵和这个向量的运算,所以不存在任何问题。

那么有同学问我们能不能用这个Python呢,嗯不行,不好意思,这个是为什么呢,因为Python实在是太难,就是说你单写一个空循环,咱们别的不说啊,你想生成一幅图跟屏幕一般大分辨率,1280×720。

然后然后刚loop1些空循环,你就已经做不到了,那你肯定会问,那我如果做这个数组的slice操作,然后我不用for循环,那你既然有这个本事,干嘛不写C加加呀,对不对,这样想。

所以说我觉得这个这个这个这个呃,呃没有问题啊,C加大家没有任何理由去惧怕它,当然用它的好处是,现在几乎所有的工业界都是在用,这个C加加语言,来进行这个图形学方面的编程的,所以说这块应该是应该是很有用的。

然后作业啊,关于作业框架呢,多说一句,这个作业框架我们会提供这个作业,作业框架是指代码的框架,我们同时还会提供一个虚拟机,这个虚拟机我不知道大家用过没有啊,就是说虚拟机。

相当于是你在任何的操作系统环境下,都可以做出来,一个这个这个操作系统中的操作系统,这个呢环境是给大家配好的,大家拿到这个这个这个这个框架,然后拿到虚拟机里面立刻就可以用,立刻就可以着手开发。

我觉得这个就非常好,然后就可以省去大家的各种各样编译啊,各方面的这方面的这个这个事情对,然后呢就是说就是说这个嗯这方面啊,我觉得我觉得应该不会有任何问题,就是说起步来写这个代码,然后应该是可以的。

然后如果要有疑问的话,也也欢迎去这个这个论坛上面去问题吧,没有问题,然后呢这个关于提交,我们设置一个这个这个这个时间啊,就是说这个嗯嗯就是我们设置某一天吧,这个现在还没有定,目前还没有作业。

某一天可能是我们今天直播的头一天,也就是北京时间的周一晚上11:59吧,在这个之前把它提交这一次作业,然后并且在这个时候,应该下一次作业会由这个助教放出来,应该是这么个意思。

然后我们的作业会在一个星期内批改,并且返回给大家,然后就是这么个意思,然后呢大家可能会问,这个作业我是不是一定要写,不一定啊,真不一定,就是说如果你要写,那么就按照这个规矩,咱们严格执行。

然后这个助教会给大家这个辛苦的批阅,然后我自己也会看,然后这个这个这个这个可以多长进,然后如果你觉得听一听,其实也就这个挺好,呃,我觉得没有任何问题,就是作业绝对不做任何强制要求。

所以这个课就是呃这么个安排方法,然后呢呃这里给大家说一下,我们已经有了一个作业的这个呃提交网站哦,在这之前啊,就是我们助教会把这个关于这个作业的这个呃,虚拟机啊,以及这个这个框架这些东西提供出来。

所以这个大家不用这个担心啊,然后这个嗯我们的作业提交网站,用的这个叫做私车会议系统,然后这个嗯这个挺好用的,大家把这个链接给抄下来,这个就可以直接访问,然后注册就可以。

然后之后的这些作业我们会这个陆续的放出来,然后也会给大家通知好吧,然后呢我们再提一个事情啊,这个课没有考试,只是必然的,这是网络课,然后呢这个呃我们最后呃试图做一个大作业。

然后呃嗯这个大作业是做什么的呢,就是说我们从这个课程差不多中段开始,就开始给大家提供一些这个想法,就是说有很多东西啊,大家学了这门课之后可以融会贯通,自己做一套自己的这个酷炫的东西展示出来。

我就是始终这么认为,就是图形学这个东西,如果你做出来的东西不好看,那这个是没用的,对不对,就是说我们需要一些这个这些办法,然后把自己学的这些东西融会贯通,并且炫耀出去,那就是做一个大作业。

然后想做什么做什么,只要和这个这个这个课程内容相关就好,然后呢呃这个做的最好的一些,然后我们会把它选出来,然后公布在网上,然后这个这个炫耀到这个诶所有人面前啊,非常好,然后我觉得这个是好事情。

然后嗯嗯多说一句啊,现在我们正在讨论这么一个事情,就是说做了作业的同学,是不是应该得到一些认证,比如说我这门课算是这个在按部就班学习了啊,是我们在讨论这个事情,按说应该也会这么做,然后大家敬请期待好吧。

然后这个反正现在还没还没开始作业呢,然后这个我们在这个陆续安排下来啊,嗯大概是这么安排,然后关于作业我这里再多说一点啊,啊这个嗯非常重要的一点,请大家一定要使用集成开发环境,也就是IDE。

然后呢这个这个ID是什么,就是英文缩写集成开发环境,然后这个这个这个这个我为什么要这么说呢,就是因为一个好的集成开发环境,可以给你一个这样的功能,你把大家拿到的这个作业框架给拿下来之后啊。

然后你它会自动的分析,这个这个框架里面有各种各样不同的东西啊,然后然后这个不同的文件,不同的类,然后怎么样定义的,然后怎么样应用,它会他会在你写代码的时候就直接告诉你哦,你逮一个什么什么点什么。

然后他会告诉你有有哪些函数可以直接用,然后呢哪些这个这个这个这个呃,比如说语法错误或者什么,他会直接告诉你,这所以非常方便,那么呃在这里推荐一些这个IDE,就是说如果你用windows。

如果你不用我们的框架,当然没有啊,不是框架虚拟机啊,当然没有问题,你可以自己配制一下这个visual studio,然后这应该是毫无疑问,应该是最好的这个这个id。

然后然后visual studio code的话,这个是一个也是微软推出来的这个跨平台的id,然后这个也非常好用,然后这个呃我觉得嗯都可以,然后比较推荐我自己,以前我一直在用这个qt creator呃。

当然再给大家多说一句,这个qt啊,它不叫qt,它的官方念法叫cute,就是那可爱的那个念法,然后这个当然我们大家平常就这么白着念啊,Ppt creator,然后我自己平常用,但不用它开发PPT。

只用了只用它来这个分析工程其实挺快的,然后这个无所谓啊,就是说这个嗯给大家这个再说一下,我不推荐的id啊,但是这个我说清楚不是因为他们不好,而是对C加加编程并不是特别好,而且还是个人体会。

首先个人不喜欢CLINE,为什么ma这一点非常不好,然后这个影响你的这个这个编程的这个,这个感受,然后eclipse也非常不好,因为它的代码分析做的不好。

然后eclipse对大家都知道作业java是非常合适的,对不对,然后我另外多说一句,非常非常不建议大家用sublime text或者是什么,这个windows下面是不是有一个叫notepad加加。

然后叫什么VIVM,这是LINUX下面用的东西,IMAX也是,然后呢这里写得清楚,我知道这些不是IDE这些,它本身确实就是去去都是这个编辑器,那为什么我要说这个事情呢,这不是拉仇恨嘛,对不对啊。

这个事情给大家说明白,这个我一开始呢大学本科的时候,我接触的教育也是这样,就是说咱们要把这些这个这个自己的编程水平,锻炼上来,咱们要强迫自己,不要用这些IDE让它提示我们。

我们要自己用自己的能力把它写写写,这个这个写对对吧,这点是对的,没有问题,然后呢,这个嗯这个这个这个呃,就是说经过一段时间锻炼之后,特别是以后大家走向工作岗位之后,会开发各种各样大量的庞大的工程。

像这种庞大的工程,对于这些这些单薄的文本编辑器来说,它们的功能可能就达不到,比如说sublime text,可能有同学会告诉我,他可以装一些插件,可以过来这个识别一下,这整个一个工程都有什么。

但是毕竟不好,没有这个这个专业的做IDE的好,能够增加你的编程效率,为什么不去用呢,对不对,然后呢,像vim和EMAX这两边本来就要打架了,我们我们用什么样的这种编辑器对吧。

然后这个而且好像用vim和EMAX,大家都会觉得不应用visual studio啊,大家这个嘲笑这个微软,这个各种各样的这些事情啊,毫无必要毫无必要啊,多给大家说一句,咱们知道这个有一个词啊,叫做极客。

在中文里面极客,然后它是英文的geek的这个这个这个音译对吧,但这geek是由哪两个词组合而来的对吧,然后我直接给大家公布答案啊,第一genius天才,第2freak,所谓怪胎就是这个意思。

可能程序员啊很多这个是这个情况下都会,这两方面多少都会有一点程序员有自己的怪癖,比如说这个平常不太会用这个IDE啊,这个就是一个一个方面,这方面的并不好,作为这个老师来说啊。

虽然我没什么这个这个这个太那个了,这个这个这资格去说,大家不要用这个呃这个这个文本编辑器对吧,然后但是我是建议啊,我是建议大家把这个geek中的genius,这一部分学会。

而不要去学这个freak这一块,毫无比嗯对吧,能把自己的这个编程水平这个真正的练上来,能够通过这个IDE,咱们能把这个图形学的这个工程做好,何乐而不为,对不对,这个然后这里说一下啊,对于这个啊。

我们的虚拟机里面,这个大家用visual studio code其实就非常好啊,这是跨平台的,否则的话,visual studio你可能自己得配制一些编译的东西,那咱们再回到这个视频上来好。

那么这个啊Mac上面我同样推荐visual c,对对code应该是有的吧,我记得是好,然后呢,那这是这个建议大家用这个,然后不管怎么样,这是网课也好,但是不管怎么样,学术诚信是必须得强调的。

首先关于你的作业独立完成,一定要独立完成,不要去这个复制别人的,那就没有任何意义了,就是说希望大家能够把这门课给学明白对吧,通过自己的这个这个努力把这事情做好,另外两个事情算是请求啊。

一个事情是我们这个这个这个代码框架,给大家提供了之后,涉及到代码框架应用呃的这些作业,希望大家都嗯不要把它给发布在网上,因为这样的话可能会有一点这个啊,这以后的话可能就不太好用。

就是如果同学能够找到以前同学们的代码的话,就是嗯这是一点,然后另外一点就是嗯大作业,如果你自己做一套新的什么东西,那随便没有任何问题,然后另外一点呢,如果你有这个呃做好了的作业。

然后比如说同学们有同学在这个BBS里面去问,然后呢就给大家回答,如果你愿意回答,就给大家回答到这个问题,就是说诶这个问题是怎么样的思路,应该如何解决,你的问题到底出在哪,但不要贴代码。

就是贴代码这个事情呢,就是说这个这个帮帮助不了别人,就是说我希望大家有一个积极踊跃的讨论和解,释的一个环境对吧,这个应该是没什么问题好,那这个这里说到这儿,然后这就是这个这个目前来说看看啊。

现在啊应该是没问题,然后这个啊我们这个原本打算,原本打算这节课如果讲的快的话,如果不涉及到各种各样这些,这个这个技术问题的话,那咱们就开始说这个线性代数入门,然后本来是下节课这个给大家说这个事情。

那看来那没办法了,他这个这个这个这个这节课就起不了头了好吧,然后大家可以看到这个标题嗯,这个a swift and brutal introduction还是很猛的啊,这个当然了,其实挺挺容易。

咱们下节课再给大家,这个这个这个好好介绍行吗,然后我这个下节课应该会说的相对简单,然后咱们由由简单到难,可能到了第四课会渐渐的变得难一些,然后呃课程大纲这边都有。

咱们下节课就把这个线性代数简单的复习一下,然后应该不是什么太大问题,那么行哎呀,这就被迫拖堂啊,人真糟糕,唉行吧,那那是这样哈,那感谢大家这个大力支持,那我这边现在给大家这个这个这个。

把这个编程PPT发给助教,然后我自己在课程网站上,我立刻就现在把它给上传上去好吧,那就是今天这个课,抱歉这个网网络这边影影响这个有点厉害,咱们之后尽快的把这个问题解决掉好吧,那那就是这样。

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

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

GAMES101-现代计算机图形学入门-闫令琪 - P10:Lecture 10 Geometry 1 (Introduction) - GAMES-Webinar - BV1X7411F744

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

感谢大家一如既往的支持,咱们今天啊这开始说这个第十节课,大家知道这意味着什么吗,这意味着说完这门,说完今天的课程,咱们这门课就过半了哈,然后正常这个我们安排的这个课是20个课时。

然后呃也许吧可能加个一节或者干什么,大概是这么安排啊,然后这个目前进展一切顺利,然后不知道大家作业做的怎么样啊,这个呃行,那咱们这个继续开始啊,一半了不容易啊,再坚持下去呃,可以嗯,大家可以看到啊。

今天咱们要说一个新话题,这个几何对吧,然后几何也会花个几讲,来来来去说这个事情嗯,然后呢这个嗯大家从这个下面四幅图啊,不知道大家注意这个事情没有,一直都有这四幅图。

这四幅图呢其实就是说我们这个课呃主要给大家说的这个事情啊,就是第一个就是左边这个左下角这幅图啊,不是我那个两个车子那个呃是说这个光栅化成像这么一个事情,然后第二个呢我们说几何这里的几何的例子是一个蝴蝶。

大家可以看到是一个用曲线来表示的一个蝴蝶,然后这块是要着重给大家说的嗯,三维的,然后第三个部分我们就会这个回到这个图像的生成来来来说,然后这个是说一些关于这个光线追踪路径。

追踪一些这个这个现代化的一些这个生成图像的方法,然后我们要和光栅化方法做比较,然后最后一块咱们来说这个这个呃这个动画与模拟啊,然后大概就是这么这么些内容,那么今天咱们来说几何嗯,在这个之前呢。

这个呃还是有一些事情,关于这个课程内容啊,一个是我们今天啊先把这个上一次没说完的一部分文理的应用说完,这是一个,然后呢嗯就是说我们提到的一些稍微高级一点的话题,比如说说这个如何生生成阴影。

如何这个做这个简单的呃,就是说近似的这个啊动态的全局光照,在这个实时渲染的这个这个框架里面,咱们就把它放在这个嗯,之后说光线追踪的时候,那个时候一块给大家提啊。

然后这节课这门课呢其实目前来说进度一切顺利,其实比我们的这个英文课的版本要快了一节课了已经,所以说我们其实有时间说啊,大家不急,我们先把这个基本内容先给往下说。

然后大家就会发现这个这这一块儿呢这个和这个光栅化就是几何呀,和光栅化和这个后面的光线追踪都有关系行,那咱们继续进展,那课程之前还是一如既往做一个这个这个一些这个这个呃,有些事情宣布啊,一个是这个作业三。

作业三呢我们这个助教同学辛苦给大家发布了一个新的这个嗯,做一个框架,然后稍微这个有一些内容稍微改动了一下啊,大家记得看一下,然后在这个在这个bbs里面都可以找得到。

以及bbs里面呢我们加了一个这个呃常问问题啊,就是f a q,然后这个呃这个大家呢做作业的过程中,很有可能会遇到这些问题,让大家看一眼,然后基本上来说可以防止大家这个这个这个就跳跳进同一个坑里面。

就是这个意思好吧,然后这是一个事情,然后呢,我们很高兴,我们这个这个又有两位助教同学加入到我们的队伍里面来啊,分别是与朋同学和郭文轩同学,然后分别来自这个北航和这个浙大,然后大家可以看到他们的联系方式。

然后如果在就有有问题的话之后,欢迎去这个麻烦两位助教啊,行没问题,那咱们这个继续好啊,今天呢啊是这么回事,今天的网络刚才我们测试的时候就不是特别好,然后这个如果有这个电音的话,问题不大,为什么呢。

我这边自己也在录音,然后在这个课程结束之后,然后我们把它给拼成视频的时候,然后会用我这边的录音,所以说呃不要紧啊,好吧嗯行,那么咱们回顾一下之前咱们一直在说着色对吧。

咱们花了两节课着色时间来说这个着色模型,一个特定的这个b林凤呃模型,然后呢我们又提到说这个在什么地方做着色,然后计算机的硬件如何做着色,以及我们着重提了一下这个关于这个呃这个纹理映射的事情对吧。

用纹理来定义这个主点的一些属性,然后呢我们这个呃上节课又给大家说这个怎么样做差值,比如说我们定义了一个三角形的属性,然后在三个顶点上定义的属性,那么在三角形内部任何一个点我们应该怎么样去做啊。

我们要用重心坐标对吧,然后呢我们就提到说这个纹理贴在表面上可不是这么简单,我们贴了两件事情,第一纹理太小怎么办,我们要放大,要做差值对吧,然后如果纹理太大,反而会出现另外的问题,我们需要做范围查询。

而一个很不错的结构能帮我们做近似的方形的快速的范围查询,就是mmap相当于给一个这个呃纹理,然后我可以生成很多个小的这些纹理,然后这个从而得到一个类似图像金字塔的东西,对啊有同学提到一些具体的问题。

比如说这个呃纹理呢,如果如果纹理这个它的大小它并不是二的n次方,这个要怎么办,对有一些这些这些特定的这些方法,就是说就是说嗯到了一定程度之后,然后他就开始会出现一些近似的事情对吧。

比如说你这个就是3x3,你再缩小一倍,这到底是1x1还是2x2对吧,这涉及到具体问题,咱们这上这个课上我们就不再说了,嗯这个更关注一些理论上它就可行的事情,就是二的多少次方的边长,好吧啊。

那今天呢我们接着这个话题,把这个文理这块给说完,这样的话着色就可以这个暂告一段落好吗,然后咱们再拿到这个高级的部分再去给大家说,那么根据前几节课我们知道给一个网格好,然后呢这个呃我们可以做这个着色。

我们可以做这个flat shedding,然后一个这个这个呃格子我们做一个shading,然后就会得到这种格子状的效果对吧,我们也可以做一个很好的shading,比如说我们在这个呃格子顶点上。

然后这个得到他们的发现,然后在这个呃中间做差值对吧,然后然后然后在每一个像素去做一个协定,就可以得到缝隙里,然后我们可以在这个协定的基础上呢,在上面贴个图。

然后贴个图可以看到这个各种各样不同的这个呃带有不同的,带有这个shading的,但是呢在任何一个点它的颜色又不一样的呃这么一种表现对吧,呃这个然后我们当然可以用各种各样不同的图对吧。

然后这个是纹理映射的部分,那么今天我们能够给大家说的一个事情是这么一个事情,这是什么呢,大家看到这个球它其实在反射,对不对,它反射出来一个类似于一个这个天空和一个地面的一个这么一个结构。

那么它反射出来的东西是什么,我们拿什么东西去表述它对吧。

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

这里就是给大家说的一个这个今天要说的这个纹理的应用,特别的对于这个例子呢叫做这个环境光照啊,这个很快就会给大家说,然后呢今天我们会进入到第二部分,然后来开始说几何好,那么我们接着刚才的话题啊。

我们要这个这个探讨这个纹理还能有什么其他的应用,首先呢这个我们做一个这个呃这个这个概述吧对吧,所谓文理呢是这么回事,我们之前提到说文理其实就是一张图,没错呃。

然后呢文理本身呢这个呃它可以做各种各样的操作,比如说mmap,我们说的对吧,mmap因为它用的非常广泛,所以现在硬硬件都是可以支持mmap的,那么我们可以理解成什么是纹理,在这个现代的这个gpu里面。

我们可以把纹理理解成就是一块内存,或者说过滤滤波对吧,是一个道理对,然后也就是说我们可以把它理解成有一块区域,我可以做点查询,可以做范围查询,然后可以做的非常快,然后呢这个就非常有用了。

就是说纹理啊完全可以理解成是这个呃一块数据,可以做这个不同类型的查询,然后没有必要把它这个完全限制在一个这个图像上对吧,然后呢这个从这个角度上出发。

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

这个纹理呢可以表示东西就太多了嗯,比如说啊这里先给大家举一个例子,这就是这个这个环境光照,然后有人管它叫环境光映射或者叫环境贴图啊,都是一回事,叫environment map。

然后environment map是什么意思啊,就是就是这样想,比如说呢大家站在一个比一个一个房间里面吧,然后呢大家这个可以往四面八方看,大家会发现来自四面八方都会有光对吧。

大家可以四面八方都可以看到物体,所以来自四面八方都会有光,然后呢这个这个任何一个方向,不管它是这个直接光照,它是光源也好,还是说它是反射来的光,所以任何一个方向大家都可以看到光。

那如果我把任何一个方向来的光都可以记录下来,诶这就是我们说的这个环境贴图,就是这个意思,或者说环境光照,那什么意思呢,比如大家看左边这幅图,这幅图呢大概就是描述了在一个屋子里面,你要是往四面八方看。

大概会看到什么,大家可以看到这四堵墙,这就是类似一种展开式的这种描述方法,往四面八方看,可以看到有这个门,看到窗户看到什么,这些都可以理解成他们会有光从那个方向进入到人的眼睛。

我们不区分它到底是直接光还是反射光,对吧好,那没问题,那么我们就可以用这幅图拿过去做渲染,做渲染呢我们可以渲染一个这个茶壶,然后这个茶壶呢这个呃这个会被这么一个环境光所照亮。

也就是说它会被任何一个方向的光所照亮,换句话说它可以反射出任何方向来的光,那大家就可以看到诶,这上面反射出了一些这个这个窗户的结构,大家还可以看到有一一对应关系啊,这个是个2x3的这个窗户对应这块。

然后右边呢这个2x2的窗户对应这块,所以说没有问题呃,可以用这个呃,而且大家如果看得清楚这块,其实这个门啊就是就是就是说他也是被反射出来的,没有问题,所以说这个就是说啊。

我可我们可以用呃纹理去描述整个环境光长什么样,然后呢我可以用这个环境光去渲染这个其他的物体,这就比一个点光源要好很多了,当然这个怎么算呢,咱们之后之后再说好吧,然后就是说在纹理可以用来表述环环境光。

那么这里呢我给大家提两个事情,第一是这个茶壶,这个茶壶是有名字的,这个茶壶叫做犹他茶壶叫utah teapot,然后因为这个最早是犹他大学他们来做的一个东西啊。

就是就是说这个在图形学上得到了一个广广泛的应用,然后另外呢这个呃还有一个呃,就是说啊在图形学上有很多这个被广泛应用的经典模型,这是其中一个之后大家很快会接触到。

还有叫做这个stanford bunny和stanford dragon,就是斯坦福的一套这个这个扫描出来的这些这些雕塑啊,就是实际存在的物体扫描出来,变成这个数字化的模型,然后有一个兔子和一个龙。

然后很呃呃这个得到了广泛的应用,还有一个很有用很很很这个经常被用到的一个模型叫做cornell box,是一个康奈尔的一个盒子,然后这个盒子广泛用来被大家这个验证各种全局光照技术。

然后呢这个当然我希望有一天会有一个什么santa barbara,什么什么什么什么对吧,这个非常不错,当然我更希望哪一天会有国内的china什么什么什么对吧,呃这样会比较好啊,那这是一个事儿。

跟大家说一下经典模型,经典的名字也这个犹他茶壶,另外一个呢是说大家用纹理去描述这个环境,光的时候,自然而然有一个假设,什么假设呢,我认为环境光都是来自无限远处,也就是说我直接记录一个不同方向就行了。

我们说来自某个方向的这个光照,那也就是说我不管我自己在哪儿对吧,我不管我在哪儿,然后环境我认为他离我比较远,所以我在我的这个活动范围内啊,我觉得啊从同一个方向来,它的这个这个强度都是一样的。

那如果大家可以想象这个屋子比较小对吧,大家从一个一个这个位置走到另外一个位置,然后即使是这个同一个墙上的同一个点,然后在不同的位置看上去,它的方向就会发生变化对吧。

所以说其实这个光照咱们不能简单的用这个呃方向来定义,咱们这个最好是方向和位置都会有,但是环境光照,或者或者说这个环境贴图这块是假设,我们这个光源是只记录它的方向信息。

也就是认为他们无限远没有什么这个实际的深度意义。

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

好吧,这个事情说清楚,那么就是这两个事情,那么咱们回到这个这个这个呃应用上来哈,如果咱们可以把这个环境光描述在某一个这个纹理上,哎那就不错,我们就可以用它来渲染一些东西,那么这是另外一个例子。

大家左边啊,这里看到的是一个环境光,这里环境光是怎么看的,大家可以理解,我在一个屋子里面放上一个这个这种金属球,非常光滑的金属球,或者说镜子的球,那这个镜子反射出来的东西可不就是整个的环境光嘛对吧。

也就是说这其实给了我们一种这个呃存储环境光的说法呃,办法什么呢,那就是说我可以把这个环境光就存储在球上,并且我像这个展开一个地球仪的这个这个表面一样,把它展成一个世界地图啊,我可以把它给展开。

也就是说环境光我可以通过这个呃记录在球面上,然后把它放在各个不同的这个方向上呃,有记录一个点,然后我再把这张图给拉开啊。

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

那么这就是我们要提到的这个这个spherical environment map,就是我我就真的可以把这个不同的这个环境光啊,给这个记录在不同的这个这个呃球面上,那么我就真的假设我有一个镜子的球。

然后或者说我认为有一个这个什么鱼眼形状的这个这个呃摄像机,或者说我可以多拍几张图,把它合成一个什么所谓360度的,什么呃,720度的之类的图啊,就是这个意思就是说我们可以把这个整个环境光记录在球上。

并且把它展开,展开成什么呢,展开成这样的一幅图,那么大家可以看到啊,我当然可以把它展开,但是呢这个大家就会看到这个如果我把环境光记录在球上,然后把它给展开,这里会有一个问题,什么问题,扭曲问题是什么呢。

大家可以看到我说扭曲问题啊,是指上面大家可以看到这些这些这些树木在这个上面这块啊,大家可以看到像像中间扭曲,这个呢大家可以从世界地图上想象出来,为什么呢,因为其实啊大家这个要是看过一些科普文章。

大家会知道欧洲没那么小,南极洲更没那么小,其实都挺大的,然后为什么在世界地图上看起来那么小呢,那就是因为它是一个球面的图,它人人把它展开的时候,它其实对应这个纬度高的地方,它会它会占区域相对较小。

然后呢这块也就是说你这个描述,整个这个这个呃球上不同的位置是做到了,这就是它的一个问题,它会在这个呃这靠近极点的地方会出现一些扭曲的现象,那么怎么办呢,人们就发现发现了一个这个办法来解决它怎么办呢。

那我假设说啊,我还是这个用一个球,原本是用用用用这个球的表面呃的任意一个位置,然后我来记录这个来自任何地方的光线,那我原来记录在球上的任何一个位置,我假设从球星往这个位置连一到线继续往前走。

直到他打到这个这个立方体的表面上诶,那当然是可以的,对不对,也就是说我啊不存不把这些这个这个呃这个光照信息,存在这个球的表面上,而我存在一个立方体的表面上,没有关系,对不对。

然后呢呃也就是说大家会得到呃这个六张图,为什么六张图啊,一个立方体有六个表面,咱们还可以展开看一看,果然是这样,对不对,比如说咱们在这个这个教堂里面,然后呢我可以把这个环境光。

然后给这个记录在一个立方体对应的这个各个各个面上,并且咱们把它展开,这个好理解吧,就是说大家看中间这里,这算是这个前面的一幅图吧,然后呢大家可以把这个上面的这个呃这个呃面向前,左边面向前,后后。

下面面向前,然后呢这个右边的这两个面,这两个在一块的是两个面,然后咱们先把它给这个向前叠,然后再叠一次就可以得到这个面就是背面好吧,这是分别对应这个四个侧面,这里四个侧面,这是正面。

然后右边这幅这个是背面,所以这样一来就可以得到一个完整的这个形状,那没有问题,这样的话就是说立方体呢,所以说它很少有这样的这种扭曲的现象发生,所以说还是不错的,当然那他有他的问题对吧。

就比如说你要是原本有一个方向呃,这个呃你想看,比如说来自某一个方向,我们说sa和fa好吧,然后他这个呃这个方向的光照是多少呢,那咱们原本可以在球上很容易的求出来,现在呢给你任何一个方向,你还得先判断哦。

这个方向我把它记在这个立方体的哪一个面上了,当然肯定行对吧,因为这是一个一对应关系,就任何一个方向你总能找到这个立方体的某一个面,记录了这个方向,当然需要一些额外的计算,但是非常快,然后这就是为什么啊。

这个叫做这个这个方法呢叫做cuba map,就是说我们之前说记在球上叫spherical map,这个叫做cube map,然后就是说这种不同的这个这个方式来描述环境光,但是它们的本质是一样的。

都是为了描述来自不同方向的光照信息啊,然后然后我这里再再强调一遍,就是说这个光照信息不不一定只是这种直接光照,比如说这里直接能看到太阳光,就是说你这个你看到的任何物体。

一定是因为有光线从它到达了你的眼睛,它们反射过来的光同样也是这个来自于这个方向的这个光照信息,没有问题啊,然后那这样一来就是说我们把这个整个的环境都给表示出来了,好那么咱们继续这个这个往后进展啊。

那么文理还可以干什么,那答案是纹理还可以做很多很多很多的事情,比如说有一个非常重要的应用应用叫做凹凸贴图好吧,然后这个凹凸贴图是什么意思呢,就是就是这么一个意思。

就是说呢这个纹理啊谁也没有规定说我只能用它去描述颜色,比如说咱们之前用纹理是为了替换咱们这个这个这个呃,不灵魂模型里面的这个kd这一项,对不对,然后就是为了替换这个漫反射像它的颜色。

然后呢就是说它可以做其他的事情,它可以定义任何不同位置,任何不同的属性,比如说这里我可以定义在一个表面上啊,任意一个点它的高度是多少,什么高度啊,相对高度就是认为啊比如说原本有一个这个基础的表面。

可以这么理解啊,然后呢我认为这个我的纹理可以定义它在这个基础的表面,沿着它的法线方向往上往下各走多少,所以是一个相对的高度,它可以定义这么一个事情,那定义这个事情有什么好处呢,那咱们想这么一个问题啊。

右边大家看到这个类似橘子的东西啊,这是什么呢,原本来说它就是一个球,这个球呢可以用很简单,比如说一两百个三角形来表示,那如果我想这个表示这么复杂的一种一种这个几何啊,就大家看到球上凹凸不平啊。

这些如果都想把它表示出来,那我得用多少个三角形,对不对,但是如果应用凹凸贴图的话,其实我们就可以定义,比如说我们还是定义在这个这个呃三角形的顶点上有这个纹理的坐标。

三角形内部任意一个点都也是有它的纹理坐标,可以查询出来,它的这个相对高度是多少,也就是说我们在不把几何形体变复杂的情况下,我们可以通过应用一个复杂的这个呃纹理,从而定义任何一个点它的相对的高度。

然后大家知道这个相对的高度一变,那这个法线就会发生变化,对不对,然后就是说这个这个法线发生变化,什么会发生变化呢,shading的结果,着色的结果就会发生变化,那人们看到不同的明暗对比。

一定程度上就是因为这个法线发生变化,然后咱们这个产生了这个着色上的明暗对比,我们就认为这儿会有凹凸的东西对,然后也就是说呢,这里其实如果我们这个这个呃用这个所谓啊这个凹凸贴图。

或者说法线贴图这一系列的办法,其实我们在试图这个嗯就是说人为的做一个这个这个假的法线出来,然后在任何任何一个点都可以这个求出一个假的发现,通过这个呃这个纹理映射对吧。

然后呢呃通过这假的发现可以给一个假的着色结果,从而欺骗人的眼睛,然后可以可以做到这个呃让人觉得有这个凹凸的效果,而实际上我们并没有改变这个几何,所以这就是这个凹凸贴图它的这个基本原理。

那刚才我提到凹凸贴图,又提到法线贴图,其实两个是一回事,这个取决于啊这个纹理本身它定义的是什么,比如说大家看这个纹理,这个纹理如果我认为好黑的地方是这个呃零,然后这个这个白的地方是一。

而这这里呢基本上我们就可以认为是这个呃,这个嗯所定义的任何一个点,它沿着这个法线移动的虚拟的移动的一个距离对吧,也就是说它的这个这个相对高度,相对高度在任何一个地方都可以不一样啊,有些地方不改变。

有些地方改变的比较厉害,那这样的话就会引起这个法线的差异,直接定义它的新的法线是什么,这是一个意思,就是说凹凸贴图和法线贴图,以一定程度上来说就是为了改变这个这个任何一个点,它的法线好。

但是这这这这一块啊那行,那咱们这个这个好好说一下这个这个法线贴图到底做了件什么事儿哈,就首先啊我们这个先把这个事情搞清楚,通过法线贴图,我可以定义一个复杂的纹理,但是我并不去改变任何的几何信息。

所以该多少三角形还是多少三角形,然后呢我是把任何一个像素它的法线都做一个扰动,怎么样去扰动它呢,就是说我就是说这个通过定义的这个呃不同位置的高度,然后它临近的这个位置的高度差来重新计算它的法线。

然后就是这么个意思,就是说我们这个纹理定义的是任何一个点,它的这个相对的这个高度的移动,然后然后呢我们就可以通过这个高度的变化来改变这个法线,那咱们看这个例子,首先呢这个黑色的这个这条线。

它其实就是这个原本的这个光滑的物体表面啊,然后呢我们应用了一个这个法线的这个这个这个凹凸贴图,然后凹凸贴图其实告诉了我们,一个相对的这个这个嗯高度应该如何变化,比如说啊咱们找这个点,这个点我们就知道哦。

相对来说这个点应该运动到这里,当然是假的哈,就是正定义一下好,然后对于任何一个点p,它实际上来说会被这个呃会被这个凹凸贴图认为啊,你这点变成了这里,那么这个点在这,那通过凹凸贴图我可以看出来哦。

它的这个法线应该是朝这儿对吧,是向这个方向,而我们原本预测它它的法线一个光滑的法线呢,它是它这个反向方向向这里,然后就是说通过凹凸贴图,我通过改变它的相对高度,然后改变了它的法线,那就是这么一个意思。

那么现在来说我们如何去真正的计算它这个法线应当如何变化呢,那很简单,咱们看看这个这么一个这个例子大家就知道了,首先呢我们先把这个问题简单化,我们先不考虑说二维的贴图。

然后三维的空间我们考虑啊就是一个这个变化的这么一个一维的函数,好吧,这个呢平常他也是有名字的,叫做flatland case,然后对应另外一边叫three deca好吧。

然后flatland呢就是这个意思,假设任何一个点原本呢它是一个平面,原本是平面,我们现在画的这个蓝色的这个波浪线,是是由这个凹凸贴图定义出来的啊,原本说这个几何这个平面,那么法线是向上的。

所以原本的法线在p点,它的反舰是零一没问题,然后呢如果我定义了一个凹凸贴图,那么我在任何一个点处,我如何计算它这个这个凹凸贴图给出来的,它这个嗯在任何一个点,它的梯度。

或者说它的这个这个函数的导数就是这里,就是说如果我站在某一个地方,然后我向右移动一个单位距离,那么向上会移动多少距离,就是这么一个意思,也就是说这这个这条曲线上的任何一个切线应当如何计算。

大家都知道切线的计算正常情况下就是一个导数问题对吧,用这个呃,用这个呃相邻两个点它的高度差对吧,然后这个点点p然后它的下一个点是p加一,然后他们两个的高度差,然后除以这个间隔就是一。

然后当然我们这里引入某一个这个呃常数,然后用来这个定义说这个凹凸贴图影响到底大不大啊,这个没问题,就是做一个简单的这个呃缩放而已好,然后我们用的方法就是一个差分方法,很简单。

这个这个是求这个近似的切线的办法,取邻近的两个点一减就知道了,对吧好,那么我们我们用这种方法得到切线,但是呢我们想要的是法线,对不对,然后就是说如何从切线变到法线呢。

那么这里我们可以从这个例子上可以很容易地看出来哦,法线其实就是垂直于切线的一个一一个一个方向,那切线我们求出来这个这块儿我们用一个向量来表示它吧,是什么呢,这个我们刚才说啊。

这个导数的定义就是水平方向移动一个距离,竖直方向移动多少,那竖直方向移动dp我知道怎么做,那么对应这个切线,它的向量就是一逗号dp,就这么一个一个向量,那么我们如何从切线变到法线,很简单。

把切线逆时针旋转90度,那就是法线,因为法线要跟它垂直,那么这个一dp逆时针旋转90度,大家记得旋转公式吗,超级简单,直接把这个特别是90度啊,很简单,x y兑换,并且把y加上个符号。

也就是说这个法线立刻我就可以求出来是负dp 1,当然记得大家最后要把它给这个这个这个作为归一化,因为它的长度一定得是一,才能是一个这个法线,那就没问题了,那么这个思路就在这儿了哈。

我们用这个凹凸贴图去定义切线,然后呢我通过切线算法线没问题,那在这个在这个呃flatland或者说一维的情况下是这么做,那么在实际的情况下,咱们有个两维的贴图,有个两位的贴图,在任何一个点。

原本啊咱们假设它的这个法线是001呃,那咱们现在就是要看这个贴图如何去影响他这个这个这个点的,这个呃法线,那么同样道理,我们仍然可以求出来它的这个呃梯度,然后什么梯度呢,也就是说在这个点呢。

如果在呃我我这个呃纹理水平方向上运动一个呃格子的时候,就是说我原本的水平,假设这个点它的这个纹理坐标是u v那么如果它变成了u加1v对吧,然后这种情况下,然后呃我应该会得出一个什么样的缺陷。

就是相当于它有两个方向的切线,就是纹理上不是有u和v吗,两个不同的方向,然后u变化一个单位,然后这里这个点应当如何变化,就是这么个意思,同样道理我们也可以做v变化一个单位。

然后这个点应当如何如何变化对吧,然后然后就是说这两个呢,就是这个嗯这个当前的点p对于这个u和v两个不同的方向的变换,求出来的导数,那么这样的话我们就可以把这个呃切线方向写出来对吧。

然后然后同样道理我们也可以这个切线算出来之后,然后再算倒算这个法线旋转90度,那么咱们这里这个直接简化这个过程啊,就是说这个过程虽然没有推导,但这个过程是大家常用的一个做法。

就是相当于是你在任何一个点求出来它的这个呃不同方向的导数之后,然后把这些导数这个这个类比于之前的这个flatland的情况,把它写成负的呃,这个倒数一呃,负的导数二和一,这就是三维情况,然后三维情况。

并且把这个法线也给这个嗯归一化变成一个单位向量,然后就是这么个意思,这里呢类比一下中间这块推导相对麻烦一些,然后这块就不给大家说了好吧,然后然后嗯道理就是一样,通过算出来的这个呃这个这个导数。

然后或者说微分对吧,或者说是梯度啊一个道理,然后如何去这个呃计算这个嗯给出来的法线,然后公式大概就是这样,然后这里有一点要给大家指出的事情是说我们这里一直在假设哦。

在这个这个fladland或者一维的情况下啊,这个嗯任何一个点啊,它的这个呃我要考虑它的法线如何变化,我先假设它的法线是向上的,是零和一,那么三维的情况下,假设的法线也是向上的001。

但是实际情况下它发现有可能是往各个不同的方向,对不对,那么这里呢我们就假设一个呃一个事情呃,什么呢,就是说在局部我们都可以定义一个局部的坐标系,我就认为这个局部的法线是这个001。

然后并且它有又有两个这个垂直的分量呃,一呃这个我们管它叫s t吧,然后就是s t和n形成了一个局部的坐标系,然后在这个坐标系里面,大家这个认为发现永远是001,然后在这个坐标系里面。

我们把这个呃这个法线的方向,通过这个纹理映射的办法稍微改一点对吧,然后我们把算出来的这个反弹方向再给重新计算回这个世界坐标里面,这个问题不大哈,这涉及到一个简单的坐标变换这块呢。

呃是在这个在这个作业三的这个呃常见问题里面,我们会给大家这个更详细的来解答这个事情,因为这个事情要说明白的话,这个课上的时间肯定是不够的,那我们现在就是就是简单的把这个思路给大家说一下好吧。

然后但是基本思想就是如此,然后咱们回到刚才的这个这个凹凸贴图,或者说这个法线贴图一个道理,我们要去这个做一个任何一个地任何一个点上都给他一个假的发现,通过用这个呃纹理映射的方式定义它的这个这个返现对吧。

然后通过改变它的高度呃,呃定义它的一个虚拟的一个高度对吧,然后这就是我们的这个呃这个凹凸贴图在做的事情,那么有一个更现代化一点的做法,然后这个做法叫做什么呢,叫叫做位移贴图。

叫displacement map是什么意思呢,首先他们的这个起点是一模一样的,什么呢,就是说凹凸贴图和这个呃这个位移贴图,它们定义都是用一个纹理定义它们的任何一个点。

它应该有的一个相对的高度的这个这个差别,所以他们的输入完全一样,用的完全相同的这个纹理,只不过呢这个位移贴图它实际上会把这个这个不同的这个顶点,三角形面啊,不同的这些顶点给真的做一个位置的移动。

是这个意思,而不是说我们通过这个位置的移动,我们把它换算成这个法线的变化,然后去做一个假的这个这个呃这些这些顶点的移动,实际上它这个在位移贴图里面,他真的去移动了顶点顶点的位置。

然后呢大家就会通过这两个对比图,大家就可以看的很明显,为什么呢,因为凹凸贴图它实际上没有改变任何几何,所以在一个地方会露馅,什么地方呢,就是在它的边缘的地方,这是一,第二是在这个自己的这个几何相对复杂。

会产生自己的阴影,投影到自己的这个情况,然后他会投影到自己上面,而在这边就看不到这个现象,所以说这个实际上没有改变几何,但是通过这种方法欺骗人的眼睛,让人觉得这里面这个法线的变化会有这种这个凹凸的感觉。

这是这个凹凸贴图所做的事情,而位移贴图实际上改变了各个三角形的这个不同的这些呃顶点的位置,那么大家从这个事情上来看啊,首先这个位移贴图显然这个结果要更好,对不对,然后但是他肯定是有代价的。

那么它是什么代价呢,那自然就是说他要求这个呃这个模型啊,它本身的三角形得足够细,为什么呢,因为它改变的是三角形顶点的不同的位置,那如果一个三角形比较大,在三角形内部还有一些需要改变的这些这些位置。

那肯定是,那那他就改变不了了对吧,也就是说如果他需要你的这个这个呃模型,能够跟得上你所定义的这个纹理的变化速度,它得要求你的三角形,它得足够细细到这个三角形的这个这个顶点之间的间隔。

要比你的这个这个纹理定义的这个频率还要高才行啊,那么这里又回到跟之前完全一样的采样的这个情况,对不对,就是说我们希望这个模型能完整的反反应这个纹理所定义的高度变化,那么我就这个采样率就一定得足够高。

那也就是说模型得足够细致,那么这个大家就在想,大家不希望说这个模型无限细致对吧,那我用一个模型超级细致的三角形,非常非常多的,非常非常小的,那当然是可以,这样我就可以应用一个这个位移贴图了,对不对。

但是我不希望这样啊,呃就是说我能不能呃我开始先用一个这个这个稍微粗糙一点的模型,这个三角形少一点,然后呢我应用位移贴图的过程中啊,我来检测一下我是不是应该把这个三角形变得更小,变得更细。

然后如果我需要我把这个三角形拆开,拆成很多小三角形,然后我再继续做位移贴图,是不是就可以了呢,是没问题,这个就是这个嗯这个direct x这是另外一套这个呃图形学的api啊,和open gl是一个类比。

然后当然只能用用在windows上面嗯,direct x提供了一个一个方法叫做动态的这个曲面细分,叫dynamic tillation,说的就是这么个意思啊。

我就是说我我不需要说我一开始先有一个足够细的模型,我根据需要我来做他的做做他的戏份,就是这么一个意思好吧,那这里这个这个说明白啊,好然后啊没问题,那这里就是说我们把这个纹理的这个应用呃。

呃差不多这样就都交代到了,就是这个中间的计算可能会非常麻烦,然后这个呃但原理基本就是这样好。

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

那么呃和这里就是关于这块啊,然后呢咱们再说纹理还有其他的各种各样的作用,首先这个我们刚才所说的所有的纹理的应用啊,唉它都是二维的纹理呢,我还是把它当图来看,对不对,然后其实啊这个纹理也没有必要。

咱们把它限制在这个二维的一个区域,纹理也可以是三维的,比如说像这里大家可以定义一个三维的纹理,所谓三维的纹理就是这样的,比如说这么有有这么一个球,然后如果你把这个球砍一半,然后你可以看到它内部是什么。

那我们原本说这个这个纹理贴在物体表面的吧,你把它砍掉一半内部你什么也看不见,对不对,就是说这里呢实际上定义了空间中任何一个点它的值,而这里就是说这个这种特殊的纹理,而且更特殊的是对于这种纹理来说。

就是我们定义这种大理石啊,这些纹理他们实际上没有真的生成这个纹理的图,那他们他们做了件什么事情呢,就是说他们定义了一个定义在三维空间中的一个噪声的函数,所以在空间中任何一个点它都有一个解析式。

能够算出这个这个噪声的值是多少,然后这样一来就等于三维空间中有一个噪声,这个噪声呢我可以经过一系列的处理,我可以做二值化,我可以做某些这个这个这个这个这个嗯就是说呃减多少啊,加多少乘多少啊。

这些之后的操作都是可以的,然后我经过一系列的操作之后,我就可以把它变成一些这个我需要的这些这些呃样子,就比如说像这里这个大理石他们的这种裂缝,这些东西就是可以通过这些三维空间中的噪声函数来来来定义它。

而呃特别的这个例子来说啊,这个叫做pinnoise,这个这个三维空间中的这个噪声函数得到了非常非常广泛的应用,然后它可以表示一种比如山脉在任何一个地方,它的起伏高度什么都应该是多少,这都都可以动态的。

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

这个得到就是说通过这个嗯这个party noise定义一个三维的噪声好吧,然后这是这么个意思,然后呢这个纹理还可以干什么,文理还可以记录一些之前已经算好了的信息,什么呢。

比如说这里大家知道shading怎么算的,对不对,着色在任何一个地方都可以做着色,但目前呢我们还不知道怎么样做阴影对吧,但是事实上来说,如果大家对比这个左边这幅图和右边这幅图,右边这幅图呢。

比如说这个人的眉毛,这个地方,这个眉毛这块它显然眉毛这个本身或者说这块骨头,它会遮挡住这个内部的这个这个眼睛,这个眼圈这块也就是说啊他会投影一部分阴影过来。

然后也就是说我们之前算谁定的时候完全考虑不到这个信息,那如果说我要把这个这块信息给算好,那这块是比较这个费事了,这个这个这个算法当然可以算,然后而且有实时的做法。

这个叫做叫做ambient occlusion,环境光遮蔽是有办法可以算的,然后我们之后这个再给大家说,然后呢,但是这里我们就先放在这儿,简单的给大家提一句。

这部分我们可以计算好了之后写进这个一一张这个纹理的图,然后到时候我们再把纹理给贴上,所以贴上呢这次我们就是把这个相当于乘上了对吧,因为如果可见,那就是一如果不可见,就是零中间就是一个过渡的状态。

然后咱们把这个结果就是说呃着色的结果乘以我计算好了的环境,光遮蔽的这么一个这个这个这个纹理,然后我们就可以得到这么一个结果,那这就非常快了对吧,这样的话就是说我们就可以把很多计算啊拿到这个这个之前去做。

做完了之后,然后我们再再去用它,然后这就是说我们可以用这个纹理去计算一些这个呃,去去记录一些已经计算好了的信息,那所以这个是非常好的对吧,呃从另外一方面也就说明纹理当然不止可以存储颜色对吧。

可以存储各种各样的信息之后,看你如何在这个着色器里去解释它,就是这么个意思。

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

那么文理呢刚才我们已经提到纹理可以做这个三维的纹理,然后三维的纹理呢,我们这个广泛应用在这个呃这个这个这个体积的渲染里面去,什么叫体渲染呢,就是说我们原本一直在说这个光照模型啊。

各种各样的东西都是只说我们考虑一个表面,而事实上来说,比如说像在这个医学里面,然后大家这个会嗯用比如说核磁共振成像或者c t成像,然后去扫描这个比如说人体的这个组织的某一个某某一块。

然后呢这个返回的信息可以返回一个三维空间中信息,任何一个点上,它的比如说密度啊,然后呢我们就可以这个通过这些信息,然后记录下来,然后拿过去做这个渲染,然后得到一个结果。

关于这个题渲染呢之后我们详细给大家说,就是说这块信息既然存储在空间里,然后我们也把它当成一个纹理,当然它是一个这个呃三维的纹理,所以说这个纹理啊到现在这个概念已经得到了一个广泛的延伸了。

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

就是这么个意思好,然后呢这个这块讲完,基本上来说着色就已经说完了,然后咱们今天这个正好把这个呃几何的部分正好开个头,今天的内容这个非常非常简单,关于几何这块儿啊,然后这个呃好。

然后嗯我们会先给大家说一说这个一些具体的几何的例子,然后呢再给大家说不同的几何表示方法,那就是今天的这个这个呃大概思路好吧,然后呢嗯咱们从最简单的这些这些几何形体上来看啊。

大家现在看到了一堆这个玻璃的杯子对吧,然后他们其实上面有各种各样不同的这些这个呃曲线对吧,然后这些都是如何去描述的,如何得到这些这些呃不同的几何对吧,这是一这是不同形状的几何。

第二大家可以看这个嗯车子对吧,车子的各个不同的部件,它是一个非常光滑的曲面,关于曲面我们应当如何去定义它,然后就是说我们实际上来说,在生活中,我们离近了,看这个车子这个曲面。

任何一个地方我们可看不到任何三角形,对不对,看不到任何这个平的地方,基本上来说它是一个非常非常光滑的一个一个过渡,那么这就说明这个嗯世界上是真的存在说这种所谓光滑的曲面的,不管我们离多近。

都看不到这种这种这个这个离散的一些现象,那么在几何里面,在图形学里面我们如何去解释描述这些几何的形体对吧,然后这是一些这个相对复杂的一些东西,大家可以看到这个齿轮对吧,这应该是个发动机啊。

这个里面有各种各样不同的这种这种叶片啊,齿轮啊,这种东西这么多,然后这些应当去如何去描述它,然后这个呃各个不同的部件,然后这个嗯大小各不相同,然后位置这种摆放都是怎么样去设计。

这些都是几何里面要研究的一些问题好吧,然后还有一些几何,比如说大家看到这里嗯,这里呢是一个这个衣服对吧,或者说布料这些这些的这个几何形体,这些几何呢很显然它不是一个简单的表面,为什么呢,因为它是透明的。

大家可以看到这里可以看到这个人的胳膊,然后背后这里可以看到这个这个天空对吧,然后也就是说这个这个这些布啊,这些东西它们是什么样的一种几何呢,如果在研究过这些东西怎么支撑的啊,这跟毛衣什么的相似。

就是一堆一堆的线,一根压一根,然后这个这个最后通过它们之间的摩擦力所形成的一个结构,当然它们中间可能会有缝,另外单说一根线是如何形成呢,一根线本来也就不是一个纤维,纤维很细的。

然后一根线本身就是由不同的纤维拧成不同的这个骨,这个古英文中叫做play啊,然后我们说纤维fiber,所以fiber通过扭曲形成poly不同的polite,然后在一块扭曲会形成会形成这个呃thread。

然后这个thread之后会被这个编成各种各样不同的这种形状,所以它是一个分级结构很复杂的,所以说这个这个布料和衣服啊,这块这个嗯关于这块的建模之后,也就简单给大家提一下好吧,然后这当然是一种几何没问题。

然后水滴比如说大家有一滴水滴进了一个111111碗水里面对吧,大家可以看到这样的这个水花四溅的这么一个现象,当然这是模拟的一个部分,就是说如果我们要在图形学中重现这么一个事情啊。

那自然是一个这个模拟问题,我们要模拟说任意一个时刻,他会这个有什么样的力,然后并且下一个时刻应该形成什么样的这种,这种这种水花飞溅的东西对吧,然后呃我们所说的是这个水呢,你滴进去之后。

大家可以看到也会形成一个这种表面,水是有这个表面张力的对吧,然后有一些这些这个水花飞溅出去,有一些还没有还连在一块儿,对本身这些就是相对复杂的几何。

就是说呃这部分如何用这个几何去描述这些事情都会比较复杂,然后呢这个例子就会更复杂,大家可以看到这是一个城市,然后城市这个复杂在哪儿,复杂在它东西多,为什么呢,大家可以看到这只有很多楼对吧。

一个楼里面成百上千个不同的屋,这屋有可能通过某个窗户还能够看得见,然后从这个地方大家可以看到这是好多不同的树,然后离近了之后可以看到树叶,然后第地面上还有这个草地,草地离近了看还会看到这不同的草叶。

很多的就是说这是一个非常非常非常复杂的一些一个这一这种几何,然后这些几何呢就是说在图形学上它的表述自然而然,这个呃就带来两个问题,第一几何我自己怎么存储它,这是一个超级大的一个一个这个这个存储量对吧。

然后第二我就算把它存储下来了之后,我怎么拿去渲染这么大级别的这个这个这个几何的这些量,对不对,然后大家如果之前看过一个第一次,你的动画叫做叫做big hero six,这个不知道中文叫什么来着。

嗯就是就是里面有机器人叫大白那个啊,这个嗯行吧,大家自己讨论吧,就是说这部电影啊它发生在一个城市,一个结合了东西部的城市叫san franciako。

然后当然san fran cisco和tokyo的结合哈,然后这个电影里面就充斥着大量的这种这个整个城市的这种,这种这种远景,然后他们为了做这个这个渲染,然后做了很多这方面的研究。

如何去简化这个几何模型,而是有道理的,离得远的话,我根本看不见这个某一个屋子里面长什么样对吧,然后另外一个就是说如何去利用光线之间连续性,这个之后再给大家说吧好吧。

然后就是说呃复杂的几何会造成非常非常这个这个,这个这个复杂的情况好呃,当然复杂几何在一个在一个很近的距离,大家就可以看得到,比如说看大家看这个狗对吧,然后他的这个这个这个身上的这个毛。

形成了一簇一簇的这种形的这种形状,然后这个当然是非常非常复杂的几何,因为大家看到这里已经绝对不是说他的这个身体表面是一个表面了,它是任何一个这个这一股毛发对吧,他这个都非常复杂,然后如果我们要表述出来。

大家可以看到有一些这种非常非常细小的这些毛发,在这里也可以看得出那些毛发要如何去表示它,它的背上对吧,可以看到有一些这个飞出来的这些毛发,那我们要把它表述成三角形面,那还得了,那得有多少个三角形。

是不是,所以说这个事情呢就非常非常复杂,所以说这里呢嗯对,所以嗯这里大家可以看到,即使是在非常近距离几何也可以无限的复杂,像这样,那么在什么近距离呢,在这种进到这个细胞啊,什么蛋白质啊。

这种呃这种距离上大家都可以看到,会有一些这个这个这个微观的一些几何呀,虽然平常也看不到,但是在显微镜下,比如说大家看这里,我不知道这是什么,假假设这是个细胞,然后上面呢有各种各样病毒,这个这个长条。

这个假设病毒啊,然后这个比如说或者大家看这个新冠的这个病毒的这个这个这个样子,大家也可以看到哦,这么近距离几何都可以这么复杂,那我离远了之后,我看不到这些几何,他们哪里去了对吧。

然后就是说什么时候我应该用什么样不同的这个几何表述方式,而如果说我什么时候用简单的,什么时候用复杂的中间的过渡怎么办,这中间全都是问题,这就是说这个几何呀给大家带来了非常非常多的问题,好没问题。

然后咱们再继续看,比如说二维的这个情况下啊,大家画这些各种各样不同的话,大家可以看到一棵树,单说一棵树,它的几何就非常复杂,它有树根,树干树枝,然后树枝上又生出来小的树枝,树枝上又长出更小的数值。

然后呢本身又可以有这个树叶对吧,所以这些本身都是一个非常非常复杂的一些这个几何的形的这个情况,所以啊几何绝对不是一个容易的事情,绝对不是说所有东西都能拿三角形面都能表示的事情,对吧好。

然后呢这个我们简单的对我们之前所说的,或者说之后要说的这些几何做一个归类,然后我们在图形学里,我们会管这个两个不同的这个这种这种不同的几何,一个呢我们管它叫做这个影视的集合。

就是implicit geometry,然后另外一种管它叫显示的几何叫explicit geometry,然后这些都是什么意思呢,这个很快就会给大家讲,就是说呃我们有不同的方式来表示不同的几何。

就是这么个意思,然后这里呢咱们直接进入到这个后面内容,然后咱们直接给大家举一举例子,什么叫隐视,什么叫显示对吧,那咱们从这个影视的这个几何的表述开始好吧,那影视的是什么意思呢。

影视的表表示实际上是说是可以告诉你,这个你比如说拿了这个这个任何空间中的一个点吧,然后咱们为了表述一个这个几何的一个面吧,这样说,那么我这个影视的几何方法,我不会告诉你这些点具体在哪儿。

我告诉你这些点满足的关系,比如说满足一定特定关系的一些这个点,我认为它都在一个什么样的这个表面上,就是这么一个意思,它是它是把这些点做一个归类,就是这么个意思,咱们举个例子啊,说这个有一个球对吧。

求大家大家都知道,就是单位球,如果写在这个三维空间里面,可以写成一个式子,x平方,y平方和z平方之和等于一对,然后然后这就是一个单位求他说了一个什么事情呢。

说你给了任何xyz我都可以判断它是不是在这个定义的表面上,也就是球面上没错,所以他就是一个球的这个影视表示,那如果求的显示表示呢有很多种不同的方法,咱们之后还会说那一个简单的方法。

就是把这个球给拆成不同三角形面,不同的三角形的位置,我们表示出来不就行了吗,对吧,然后然后这是一个显示的表示,那么隐士表示还是回到刚才的定义上来表示一定的关系,并不给你实际的这些点。

那么这里就是这个这个求,然后另外一个例子啊,就是说把这个概念给推广,就是说我们定义的任何x y z需要满足的关系对吧,满足的关系,那自然就是一个函数了,那比如说大家看这个球这么一个式子。

只要满足这么一个函数,那么我就说这个几何呃,呃这个这个这个点xyz就在这个几何所描述的这个面上,那么我们可以可以把这个一拿到左边去,拿到左边去,变成x平方加y平方加z平方减1=0。

那么对于一个更通用的情况,我定义任何一个函数f,然后它是某个函数,是谁的函数,xyz的任意某一个函数等于零,我只要能找到这样的x y z满足这个条件,我就认为这个点xyz就是我定义的表面上的一个点。

然后我要是能找到所有的点,我就可以把表面画出来,然后比如说这里的例子来看看,红的表示正的,蓝的表示负的,那我定义这个f呢,如果是零,这表示某一种这个这个表面,那么就找到所有的这个零。

然后都把它给这个描述出来啊,这就是我要描述的这样一个这个隐士的几何,没问题好,这个这个它会存在有一些好处,有一些坏处,就是这么个意思,然后呢嗯嗯这个比如说这里大家看到这么一个影视的几何的表示方式。

比如说x y z空间中的某些点,然后这些点满足这么一个关系,我就认为这些点是在这个这个面上了,但是如果我要问这么一个问题,说这哪些点呃会满足这么一个式子,这是一个相对困难的事情,对不对。

然后也很不容易看出来,但是大家看这个例子,这是已经给大家画出来的,它其实是一个圆环哈,大家如果说做一做这个这个这个函数的某些变化,感觉其实可以看得出来,他确实应该是一个圆环,把这个东西变成零对吧。

把自己给拿到右边去,然后这个它是一个圆环的结构,但是从这个式子来说,那太难了,很难看出来它是一个圆环的结构,对不对,也就是说啊如果我想这个这个呃呃说这个整个一个形状它是什么,这是一个非常难的事情。

就是对于隐含的这个表示来说,这个比较困难,但是隐含的这个这个影视的表示啊,它有什么好处,他当然也有好处,比如说他判断任何一个点在不在这个面上啊,这两个上啊,还记得吗。

刚才我们说的问题是这个面它它都有哪些点啊,这个很难,也就是说这面长什么样嘛,对吧,这个很难,但是给你一个点,你判定说这个点在不在这个面上,这是超级容易的一件事情,为什么呢。

因为你只需要把这个点拿进这个函数里面,这不是x y z和这个关系嘛,然后具体给你一个点x y z,你把这x y z带入到这个关系里面,得到一个值后,你发现他是一个呃正的负的或者是零,那如果是零。

它就在表面上,那如果是负的,我们认为在这个这个物体内,然后如果是正的,我们认为它在物体外,也就是说啊,这个隐士的表示很容易让我们判定一个点是不是在这个这个呃物体内,或者外诶,这个很容易。

但是你想把整个的一个这个面上所有的点都给找一遍,这个很难,那么相对的那这个呃图形学上呢,就有另外一种方法叫做叫做显示的这个表表达方法,那所谓显示是什么意思呢,对吧,那自然就是说最简单的理解。

那就是说我有一个这个模型,我们之前所用的三角形面,它就是一个典型的显示表达方法,我把这个面上的这些点,我真的我就表示出来没问题,然后这是一种显示的方法,还有一种显示的方法听起来没那么直观啊。

这个显示的方法叫做这个通过这个参数映射的方法定义的表面,比如说这里啊,大家可以看到呃,如果我定义一个空间u和v上面有任意一个点,然后我用这个坐标uv表示。

并且呢我可以定义任何这个点对uv都会映射到空间中的某一个点,也就是说我这个我可以定义一个函数呃,给你的是uv,然后你输出的是xyz,也就是说你把所有的uv都给走一遍,你就可以找到它对应的所有的xyz。

对于这个例子来说,你把这个uv也就是平面上的所有一个点都看一遍,然后你就会发现他们这个对应到这个呃三维空间中是一个什么形状,对于这个形状叫做马鞍面啊,马鞍面在这个这个几何里面得到这个很大的应用啊。

不是很大应用的,也很喜欢这样一个一个模型,本来又简单,又有一些问题啊,什么问题我可以给大家指一下,这个点上会有一些问题啊,这个啊好没问题,然后咱们回到这个显示的这个这个表示方法来啊。

然后这个显示的表表示方法要么直接给出,这是最简单的,要么通过参数映射的方式给出,这就是这个这个显示的表示方法,那么比如说咱们看这个例子,这个例子呢这个它定义了一个函数,记得啊这个参数映射。

它把这个u和v这两个这个参数映射成了这个空间中实际的一个点,是知道的,y写成这个形式,知道z写成这个形式,也知道为什么我们还管它叫显示,就是这么一个意思啊,就是说呃这样的话呢。

比如说我想知道这个表面它长什么样,那没关系,我刚才说了对吧,它既然是一个映射,我只要能把这个uv上的每一个uv我都测一遍,然后我就可以这个把每一个uv都给都给映射成xyz。

然后我再把这些点都给显示出来啊,当然这里表示的是同样一个模型,还是这个圆环啊,呃所以说这个是一个很有趣的一个一个一个现象好,然后呢也就是说大家还记得吗,刚才影视的表示里面我并不容易发现这个表面上呃。

就是这个表面本身长什么样,或者找到所有的这些点,这个不容易,但是对于显示的表示很容易,对于这里来说啊,特别对于这里,这是我知道这里有稍微有点绕,说我既然写成了这么个公式,为什么还是显示的没问题啊。

就是说我刚才说呃很多方式理解,因为x和y和z它们等于什么都写得清楚,然后另外一点它本身是通过参数映射,把u和v映射到这么一个空间上去,我只要把所有的u和v都找一遍。

我就知道对应的这个呃空间中的这个这个形状它长什么样好吧,然后这就是说为什么这还是显示的,然后为什么它显示这个呃这个形状很容易就是因为这个好,那么什么东西会相应的变难呢,那就是说对于显示的这个表面来说诶。

那那就是说我想判断任何一个点,现在他在不在表面上,或者说这个呃他他这个在表面内还是y这就非常困难了,那比如说像这里给大家一个这个显示的这个公式啊,呃呃没错,显示的公式因为是从uv映射到x y z嘛对吧。

通过映射方式定义的,那么它是显示的表示,然后它是什么,你不知道,通过这个式子来看,你不知道对吧,然后问这个点是不是在里面,你更是无从下手,那么除非什么呢,除非你从这个式子你看出来了哦。

它定义的其实就是一个球,那定义的一个就某个单位球,然后这个单位球呢这个这个任何一个点,那我自然就知道它是什么了,那当然了,那就是说除非你把这个形状给画出来之后,你才能知道它是什么对吧。

也就是说对于显示表面什么变得难了呢,就是这个在里面在外面这个事情变得难了好吧,那所以说有不同的表示方法,为什么要用不同的表示方法呢,在自然大家就已经可以看得到了,为什么呢。

因为这个有一些问题很适合用影视的方法来表示,有一些问题他就适合用显示的方法,所以咱们根据需要来取对吧,好那没问题,咱们总结一下这个几何,到此为止应该已经很难了对吧,我们说了这么多种不同的几何。

然后我又说了这个显示和影视到此为止为止,这个这个我们总结这个目前为止没有什么好的办法,能这个完全的解决几何的问题,我们得根据需要去选。

这就是为什么作为这个呃皮克斯的这个这叫什么senior research scientist,就是说这个嗯资深的这个这个呃科研的科学家,然后然后这个david他就说他这个痛恨这个这个这个面啊。

这个或者说曲面,然后在他这个他没有想到这个东西这么难,这个东西怎么这么难啊,就是这么个意思,然后这个大家可以看到作为这么一个级别的人物,他会这个做出这样的感慨,那当然就说明几何确实很难啊,没问题好啊。

ok那么我们刚才总结的是什么呢,就是说我们根据需要来选择我们到底要用什么样的表示方法对吧,那咱们就可以这个看一看这个到底这个不同的这个表述方法,到底能带给我们什么,那么刚才这个提到我们有这个显示和影视。

然后通过这个公式的这个写法,但是呢这个表述方法呃,对几何的表示方法远远不止这么些,那咱们从这个影视的方法开始,我给大家多介绍几种好吧,这个影视的表示方法还有哪些种。

这个大家可以看到有很多很多很多不同的方法啊。

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

这里给大家举几个例子,第一呢要给大家说的是这个最最最最简单的,就是也就是说呃最最直接的吧,也就是说刚才给大家已经这个覆盖了一部分了对吧,我们就用这个不同的这个这个呃这个数学公式我就表述它好吧。

数学公式表示它有一个严重的问题,那就是不直观,大家已经完全可以看得出来,非常不直观,因为这个球写的还算是明白,圆环就已经稍微难一点了,右边这是什么,右边这个是什么,这个不知道,但是大家可以看得出来。

x和y和z的关系,他们要满足的一个函数,所以它一定是个隐士的表面,没问题好,那么他这个这个影视的表面,它表示的是什么呢,不知道,直到我看到他我才知道哦,他是一个星星啊对吧。

所以说对于一个新型这么一个简单的这个这个呃几何,我都需要这么复杂的公式去描述它,那当然他不是特别好,但是他这个对于一些简单的情况,他描述的确实非常到位对吧,所以通过这个这个这个算术方法直接表述。

它当然是一个简单方法,咱们直接忽略它好吧,那对于复杂的情况怎么办对吧,对这个奶牛你如何去写出一个这个这个式子去描述它,当然有人这个闲的哈,就是我知道这个这个有人用各种各样的数学公式。

什么matlab去画一些各种各样不同的形状,这个这个做得好,提出鼓励,然后这个我没这么坚持啊,这个这个这个对于这种复杂的模型,我相信大家也可以发现各种各样不同的曲线去描述它啊,然后没问题啊。

但是会很困难,那咱们这个给大家提到一个这个嗯,另外一个事情就是说这个几何这个几何的隐士表示呃,可以不只是这个嗯通过代数方法来来描述什么呢。

这里给大家举了一个例子叫做呃constructive solid geometry,人们管这个东西简称叫c s g,当然这里呢我就不太清楚中文怎么说了,咱们就管它叫csg好吧,所谓csg是什么东西呢。

很简单,它就是说啊通过一系列这个几何的基本几何的基本运算,然后我来定义新的几何,那比如说这里a和b一个圆柱,一个球,它就是基本的几何,那什么叫他们的布尔运算很简单哈。

就是说我们定义比如说aaa和b的并是什么呢,就是这两个放在一块儿啊,然后以这么一个位置放在一块,形成了一个这么一个集合哦,它就是a和b的b,那a和b的交同样道理也可以理解,就是他们公共的部分对吧。

公共的部分如果这个同样对于这种摆放来说,公共的部分就是这块,然后他们的差也可以定义,就是从a中间减去这个b所占据的a的部分,或者同样道理b中间也可以减去a里面的部分,得到另外一块对吧。

就是说我们可以定义这么简单运算,通过这些运算和一些简单的这些这些基础的集合,我们就可以形成一些复杂的集合,什么意思呢,比如说这里这里大家这个看到这么一个一个形状哈,然后大家看这里到底发生了什么。

说白了他就这个就是这么几种,那x y u v w这么几种基本的几何做个什么事情呢,x是一个方块和这个y是个球,先做一个交操作,也就是说这两个的这个交出来的操作,像是一个这么一个像是一个筛子的形状啊。

然后呢对应这边我有两个这个圆柱,我可以把它叠成一个十字架,这是一个病操作,然后我再跟另外一个方向形成一个这个三个方向的这个这个轴啊,然后形成一个这种十字架,然后这两个十字架之后呢。

我把左边这个筛子形状减去十字架形状,是不是就得了一个镂空的筛子的形状对吧,也就是说我可以通过这一系列的方法得到这么一个这个这种基本操作,那这种操作得到了这个非常非常广泛的应用。

所以这个这个这个呃呃这个max maya啊,这个auto c a d啊,各种各样的东西都支持这么一种方法,这个是非常非常常见的操作,然后也就是说呃通过这种方法,我自然可以把简单的几何给变成复杂的几何。

而这种几何我我完全没有说这个这些这个呃不同,他们的点都都都在什么位置对吧,我就说只通过这么一些这个它们之间的相互关系啊,最后我还可以把写真给表达式啊,这个几何是这么一个几何,然后写上这个表达式。

所以它当然是一个这个影视的表示方法,然后咱们再回到他的名字啊,cs g好,然后呢还有一个这个这种表示方法呃,然后呃这里简单给大家说一下吧,好吧,就是说呢这个呃我们管它叫做这个这个这个定义。

一个叫做距离函数的东西,那用这个东西来表述几何,那这是什么意思呢,就是说啊我我这个对于任何一个几何我都不直接去描述它的表面,我去描述任何一个点到这个表面的最近距离,然后这个事情怎么理解,咱们马上再看。

我们先看它的一个例子对吧,然后这里大家可以看到什么呢,看到两个这个球,然后当这两个球这个这个逐渐靠近,逐渐靠近对吧,大家可以看到这个这两个球发生了一个形状上的,所谓的这个这个融合对吧,最后会形成一个球。

特别是中间这个非常有意思,然后他们拓扑结构会发生一些变化对吧,这个事情是怎么做到的,这个事情就是通过对几何的这个这个嗯所谓距离函数做这个呃blend,或者说融合形成了一个一个一个呃结果。

那这是什么意思呢,我们刚才说这个距离函数,我们这里再重新说一下,这个距离函数是指空间中的任何一个点,到你想要表述的这个几何形体上面的任意一个点,它们之间的最小距离啊,这个这个距离又可以是正的或者负的。

如果我认为有一个点在这个物体表面外面好,那那这个点它的这个最小距离算出来之后啊,我加个正号,它是正的,如果有一个点在这个物体内部,那同样也可以算出这个内部的一个点。

它到这个物体的这个表面或者边界上的最小距离,并且我认为这个距离是负的,那我可以这样定义,也就是说我把任何空间中任何一个点都定义出一个值来,然后然后是这么一个意思,那么我把这两个不同的物体啊。

它们两者的这个距离函数都算出来之后,然后我就可以把两个距离函数给做一个不ending,然后也就是融合,然后我们再把它恢复成原来的这个物体,就可以得到这样的一个变化,所以它非常适合做这种这种工作。

这里给大家举一个例子,就是说呃啊这样哈,稍等一下,我先说一个事情,这个这个这个这个好吧,好像没什么办法,我尽快啊,然后这个嗯,好那么咱们现在先看一下这个具体的例子哈。

然后这个例子就是应用这个距离函数的一个例子,大家应该可以看到这两行啊,这个是什么意思呢,大家可以看这个输入和输出是两张不同的图,我们认为它是一个表示某种几何的一个边界哈,假设有一个物体啊。

然后这个挡住了这个你能看到的这些这个视口,整个的左边整个1/3,然后另外有一个物体或者说这个物体经过一些移动之后啊,它挡住了左边的2/3,然后这个嗯我希望把这两个呃运动,或者说这个球出在这个这个物体啊。

它这个从左到右移动的时候的一个中间状态,那么我们来看哈,如果说我们考虑这两个这个不同的图,如果我认为它们就是两个不同的图好吧,然后我要想把它两个融合起来,我做一个简单的线性的这个bland,也就是融合。

那会得到一个什么呢,也就是说左边它覆盖的这个区域啊,还是会被覆盖掉,在这个地方,我会直接把这两张图叠在一块,然后求平均啊,然后我会发现左边这1/3部分他还是会这个挡住的,然后中间这1/3部分呢。

因为a这个图里面啊这个没被挡住,然后b这个中间挡住了,所以他算是一个这个这个ban被挡住这么一个状态吧,然后右边这块自然是谁都没有挡住,那么如果把它作为一张图。

然后把两张图给做一个简单的这个所谓线性的这个bend,然后我可以得到什么呢,我可以讲我我可以得到一个图什么呢,就是左边我可以认为挡住了黑的,右边没挡住白的中间呃不对,中间得到一个是灰的诶。

那我得到这么一个状态了,那也就是说它并不能表述这个这个一种所谓的运动信息,比如说左边这个a这张图这1/3左边是黑的,右边是1/3白的,然后b呢2/3黑的100/3的,那我想要得到什么。

我想要这个得到它一个准确的一个运动的过程,我希望他两个不land之后得到的结果是左边一半是黑的,右边一半是白的对吧,我希望得到这个,但现在不是,我们如果把它理解成两张图,黑白的图。

做一个bl得到一个黑的灰的白的,那怎么办呢,怎么办才能把它做对呢,那就是说我们先求出来这个所谓有效的距离函数,那这里s表示signed啊,我这这里说清楚是因为它有正有负,其实就是这个距离函数一回事啊。

就是a呢我求出一个距离函数了,什么距离函数大家还记得吗,这个比如说我认为这个边界,那这就是物体的一个表面,那我说距离函数是什么意思啊,任何一个点到这个边界的最短距离,那就是说任何一个点往下做垂线呗。

这个对吧,最短距离,那我知道靠近这个这条边,那我得到的距离函数都是值比较小,接近零啊,如果在它右边我认为是正的,在左边认为是负的啊,然后我就可以这个这个靠近它的值呢是比较小的,远离它的值是比较大的。

然后像这里这些值就比较大,所以它是距离函数,是这么一个变化方式哈,我用不同的这个线就是为了表示这么个意思,然后然后这个对于a可以这么做,b也可以这么做,我可以得到在这个附近啊,它有一个接近零的值啊。

然后在这个离他比较近的地方都比较接近零,然后离得远的地方远离零,然后根据它的正负,我们再把它做做出来,那么也就是说我们得到了这两张图,这两张图是一个渐变的颜色啊,就是这么个意思。

然后把这两张图我做一个这个bland的操作,然后我就会立刻得到这个呃,大家都知道,还有这个,比如说像这个位置和这个位置它正好正负性是相反的,然后我这个在正中间的时候不land出来的值一定是一个这个零。

然后左边还是负的,右边还是正的,那么如果我把这个这个东西给恢复成原来的一个一个这个这个呃形状,就是恢复成这个呃,不是sdf,就是通过这个sdf恢复成原本它对应的一个形状。

那么我知道零的地方就应该是是它的这个边界非零的地方,不是,那也就是说我通过blend两个对应的s d f,我就等于是在不烂他们的边界,对不对,在这里我就可以真的不断的出来这么一张图。

我最后得到结果左边是黑的,右边是白的,没有问题,也就是说啊这个s d f非常有有用的对吧,然后就是说这个这个呃正负的这个这个方向我们说清楚呃,在外面在里面这样就可以了,没问题。

那就是说啊这是一个这个这个例子,就是说我们可以对这个所谓距离函数做一个blending,那么现在大家这个这个道理,这呃这个例子就比较好理解了,那么我为什么有这么两个不同的这个这个函数,这个对吧。

就是两个物体,为什么我把他们两个做bend,我可以渐渐地得到这么一个最后的这个结果,道理就在这儿,就说我其实我分别把他们两个对应的距离函数求出来,在这个三维空间对应在这里是个在平面空间内。

任意一个点我都知道它们对应的距离函数,然后把它们不拦起来,再恢复成这个原本的这个面,所谓恢复成原本的面,我说的清楚,就是说这个sdf的值是零的时候呃,那个就是他们的这个面所在的地方,就是这么个意思好。

那么这个距离函数可以做什么,大家就觉得这个可以看到这是一个例子,这一这个例子呢同样也是这个shader toy的这个例子,之前给大家呃看过一个蜗牛,对不对,那个蜗牛他就是用这个距离函数表示的。

就是它没有实际的这个几何形体,它的几何的表示都是隐式的表示,然后呢它这个几何和几何之间如果要做一个这个比较,这个圆滑的一些过渡啊,它中间就是靠这个距离函数把它不烂起来,那距离函数非常厉害。

它可以表示各种各样的东西,大家看到这个瓢虫,可以看到这个这个蘑菇,然后可以看到这个草还是草叶对吧,就是说他这个表示能力非常强的,所以说这个嗯是这个距离函数是一个非常非常有用的东西,好吧,这也就是说啊。

也就是说这个影视的表示可以有很多种,那么我们既然提到了距离函数,我们说啊距离函数blender出来之后得到了一个函数,我最后如何再把它恢复成这个表面呢,很简单。

我就把这个距离函数对应的零的位置全找出来对吧,距离函数如果是fx我认为它等于零好,我就可以把这个这个对应的这个位置呃给找出来,我就知道哦,这个函数等于零的时候啊,那对应的就是物体的表面没问题。

是的对于说我知道这个距离函数的某一些表示方法,那对于一些特定的情况,比如说我把这个这个嗯这个比如说距离函数啊,它不太好写成这个某一种这个解析的形式,就不容易拿式子去写这个sdf没问题。

这个距离函数只要我能够通过某种方法表述出来就可以了,比如说这里大家看到的叫做水平集方法叫level set,他的这个这个想法跟距离函数其实完全一样,仅仅是什么呢。

仅仅是它的函数的表述是写在这个一个格子上的,大家可以看到这个函数在不同的地方有不同的值,然后呢在一个格子上的不同位置,我写好它的这个这个值是多少,我只需要找到那个在中间某一些地方,它的值是零的。

这个这个地方我就可以把这个,这我就可以把整个这个函数所试图描述的这个物体表面给提取出来对,所以道理就在这儿,它的区别和之前的这个距离函数的区别,就无非就是说这个函数本身通过什么形式来表示。

但我要的结果呢还是这个最后的函数等于零,那么大家可以看出来,如果函数等于零呢,得到这条曲线,函数等于0。1得到另外一条曲线,函数等于别的形成另外一条曲线,那这个概念其实早就大家早就在用了。

这个在地理上得到了广泛的应用,这个叫做等高线,对不对,就是说这个东西就是这个这个就是为了描述一个函数,在在在这个不同的位置有个相同的值,特别的就是这里对于水平集来说。

我们关注的是这个函数在什么地方等于零,那当然这里大家之前咱们已经学过双线性差值了对吧,对于这么一个例子来说,很简单,我当然知道这个它在什么地方应该等于零,我们得解得出。

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

对,没问题好,那么这里就是这个这个水平级水平机,也没有人说一定得定义在在二维上的一个格子,可以定义在三维空间中的格子,而这就和咱们之前说的这个纹理联系上了,如果我们有一个三维的纹理。

表述的是人这个不同位置呃,人体的不同位置,它的这个密度可以这么这么理解,那我从这个三维的信息如何去提取出物体的表面呢,我可以让就是说这个密度这个函数fx他得到了这个密度等于某个密度,比如说五点对吧。

然后我找到所有的这样的这样这个这个位置满足这么一个密度函数,等于相同的密度的诶,我就可以找到一个表面,那这个就是水平级的在三维空间中的一个应用。

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

当然又和纹理结合在一块,所以这些知识都是这个互相融合贯通的对吧,水花跟水花这个结合在一块了,这种东西我们要如何去描述它,同样道理,这个也可以通过水平集的方式,或者说通过前面的这个距离函数的方式呃。

道理是一样的,我们把这个水滴和水滴就可以这个blend融合在一块对吧。

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

然后并且提出融合在一块儿之后,它的表面长什么样,没问题,然后呢这个应该差不多了哈,我这还有一点点例子,就是这一个这是什么呢,几何还有一种特殊的描述方法叫做分型,叫fractal。

然后这个分型是什么意思呢,分型是指自相似的意思是什么意思呢,就是说它这个这个就是说自己,然后它的一个部分和它的这个整体长得非常像,然后这个其实和我们计算机科学里面说的递归完全是一个道理哈。

然后这个就比如说大家看雪花啊,大家如果看过科普文章,大家就知道这个雪花呢,但如果你这个放大了看,会看到他的这个这个是六边形,每一条边上其实它又有一些六边形,然后再看这更小的地方,它每条边又有一个六边形。

就是这么个意思,就是他不断在重复,那么这里呢着重给大家说中间这个例子,中间这个东西呢它有名字的,这是一种植物,它是一种这个这个西兰花啊,它是一种西兰花,它有名字叫broccoli,然后这个名字非常奇怪。

然后呢它有一个这个呃呃这个明明显的一个性质啊,什么性质呢,一个一个的这个这个这个格子,如果你放大去看它,它又有好多小的,所以它自己这个自带三形啊,当然对于这个自然界来说,它不可能分行。

到最后他还停不住对吧,也就是说这个它它是这个自然界的一个这个分型的一个例子吧,就是非常有趣的一个例子,这个分型呢这个有不少人研究这个东西,如何去描述这个这个分型的几何,如何去这个这个表示出来。

在图文学上的应用不是特别多,但是这个它会引起很多这种复杂的情况,就比如说咱们说这个romanesco,这呃这个嗯这个这个哦对等一下哈,我这里说的不对哈,对西兰花来说,统称叫做叫做broccoli。

这个这这一种特定的西兰花叫roman nico啊,是这个意思,然后然后就是说对于这个romanesco来说,它最复杂的地方就在于它会引起强烈的这个呃叫什么来着,就是就是就是在渲染的时候会引起强烈的走向。

就是这么个意思,因为它的这个变化频率实在是太高了,所以说这个这种类型的几何对于这个之后的渲染,对于描述来说都是一个非常大的挑战,好吧哦,当然有同学反映这个看上去会有密集恐惧症啊,这个行吧。

不多给大家看这个这个例子了哈,然后我们简单总结一下,今天差不多就可以了,然后这个呃说了什么呢,就是说啊这个影视的函数,它这个通常表述起来都很容易对吧,要么拿一个函数直接来表示。

然后呢要么是通过一些这个并不是特别明显的方式来定义的,比如说我们定义这个这个这个呃这个距离函数的时候对吧,然后就是说正常情况下,它这个都不是说明确的把这个呃,不是这么个意思对吧。

就是这就是为什么它是隐士的,然后它的好处是说他这个通常会写的比较容易,然后写一个公式我就可以描述一个形状,那当然对于存储是非常有利的事情,那么它还支持这个查询到底在里面在外面,咱们刚才已经说了。

判断一下对应的函数在里面,这个小于零还是大于零就可以了,然后呢我们之后会给大家说,引这个嗯,用隐函数描述的这个影视表面,是很容易做这个光线和它的这个嗯求交的,当然对显示的来说也并不难看。

就是说这个呃不管怎么样,咱们之后会给大家说这个事情,比如说这光呃这个平面,或者说这个球如何和光线求教啊,这个意思之后咱们再给大家说,然后呢诶呃呃稍等嗯嗯ok然后这个就是说正常情况下来说。

这个嗯我们想这个严格的描述一种什么样的物体,比如说那种心情在任何一个地方,他应该都有一个正确的这种弧度,用这种这种呃影视的表示方法是非常好的,然后这种呃拓扑结构,其他东西它都是很适合用来描述啊。

当然它的问题咱们这个之前都已经说清楚了,比如刚才说那个奶牛对吧,很难拿一个什么样的这种这种很规则的一种函数去描述它对吧,然后这就是为什么我们需要用到这个显示的表示,然后那这块呢咱们就不再往后说了。

显示的表示其实内容挺少的,咱们就直接这个下节课提一点,然后就可以直接进入到后面的这个呃曲线和曲面这一块的介绍了,好吧,那这就是咱们今天介绍的几何部分的内容,然后总结一下就是呃打纹理的应用说了一说。

然后这个关于凹凸贴图和这个位移贴图这块还需要更多的知识,这里面我们先强调一下,就是这里面如果要实现这个作业的话,还需要好好参考一下我们的这个呃常见问题,呃好吧,这是这个。

然后呢我们关于这个几何这一块儿啊,说了各种各样不同的几何,说了影视和显示,然后我们又说了这个影视的这个各种各样不同的表示方法,特别的说了一下距离函数对吧好,那咱们今天这个就说到这吧好吧。

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

然后这个这个这个啊好。

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

那咱们把这个时间呃教会给技术秘书同学啊。

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

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

GAMES101-现代计算机图形学入门-闫令琪 - P11:Lecture 11 Geometry 2 (Curves and Surfaces) - GAMES-Webinar - BV1X7411F744

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

感谢大家的支持,咱们今天这个我们上一次已经说了对吧,这个课程过半,今天是第11节,如果顺利的话,咱们20节结束,然后如果还还需要多讲一些,我就再多安排个一两课,然后咱们今天讲几何的第二部分。

我们来讲这个呃这个这个曲线和曲面好吧,没问题啊,然后咱们这个继续进行嗯,在课程之前啊,我们先说一下几个上啊,一个是我考虑到大家这个这个作业三,最近这个这作业三任务比较重。

然后大家写作业三会出现一些问题啊,或者干什么,然后考虑到这些事情,我们把它延期了两天,然后延期到北京时间周四的晚上好吗,嗯ok那没有问题好哦,我看到有同学反映说。

希望我讲一下关于这个tb n到底是怎么样运作的对吧,然后这我们作业里面会出现涉及到这个这个嗯凹凸贴图和其他的行,没问题,那这节课这节课够呛啊,我看一下不行的话,我就星期四哦。

那就是国内星期五可能来不及这样吧,中间如果说我没时间讲的话,我画几张图吧,然后作为这个课程的这个这个这个这个辅助的这些内容,然后再把它给放出来好吧,这样总归让大家能明白一点,就是这个计算确实不太容易哈。

这块在作业里面我们也刻意把这个给略过,所以如果大家真的想多了解一点,没有问题,好吧啊,那这是一个上,然后呢嗯这个最近这个这个新冠病毒在这个北美现在越来越严重了。

然后上周三我们这边开始这个这个学校开始停课,然后之后到周末就开始要求这个这个要封校的,然后不能去了,然后我们下学期的课也是在这个嗯这个这个这个远程进行,然后这个在北美的小伙伴们注意安全,少出门好吧。

多囤点粮食,然后这个啊我现在呢大家看到这个背景跟之前就不一样了对吧,所以我只能在家里面这个这个这个呃直播,然后呢这个家里面的网络和这个光照条件都不如学校,但是这个没办法,就先这样吧。

这看着显得我阴暗一些,对不对,这个还是不错的啊,ok那是今天的这个这个课程之前我们说这么几个事儿啊,然后我们回忆一下上节课我们提到了几何入门对吧,我们说了一下这个几何呢,这个呃各种各样不同类型的几何。

然后呢几何我们区分主要是两大类,一类是这个影视的几何,一类是显示的几何,然后影视呢给大家说了很多,然后包括这个什么距离厂啊,包括了这些这个这个呃这个这个呃level set呀,各种各样不同的方法。

然后就是去定义各种各样影视的这种几何,然后今天咱们这个开始说显示的集合,然后今天大概是这么几个内容吧,显示的几何先大体说一下,然后我们开始说曲线与曲面,如果有时间的话,这个能说完不行。

咱们就拖到下一节课,你要佛系一点啊,然后嗯大概是这么个安排方法,那么咱们这就开始好吧,从这个呃显示的几何啊开始,那么我们上节课提到说影视的几何可以有好多种不同的表示方法。

同样道理显示的几何也也是有这个各种各样不同的方法去表示,那么我们可以看一看,这里呢大概做了一些总结吧,有很多不同的这些方法,比如说什么三角形面啊,然后什么这个贝塞尔曲面啊,还有各种细分曲面。

这都是什么意思呢,然后还提到一个点云对吧,然后这些呢咱们这个一给大家介绍一下,首先就是说给大家介绍一下最这个简单的吧,算是最最最最简单的这个显示的这个呃物体的面呢表示什么呢,叫做点云,那点云很简单。

也就是说我们不考虑这个物体是一个表面,而是它表面上的一堆点,我把每一个点都给表示成一个点,那只要这些点我表示的足够细对吧,然后我自然而然就看不到这个这个点与点之间的缝隙。

我就可以看到一个表面这么一个概念,那一个点的表示呢自然空间中x y z就够了,所以你就是一个x y z的一个列表,非常简单,那咱咱们大家看这个右边这个例子哈,这个大家立刻就可以看到这个嗯,这是一个雕塑。

然后呢他的这个上半部分大家可以可想而知,这个这个点云的密度啊非常大,然后这就是为什么大家已经可以看到这些这个物体的表面,然后呢随着这个点名的密度降低,再往下的这个过程中,大家看到当这个点源稀疏的时候。

大家就不太容易看出这个是一个这个面对吧,所以点云呢如果你要把它给表示成一个这个非常复杂的模型,那你就得需要特别多的点,特别密集的点,就是这么个意思,然后呢点名当然从这个道理上来说。

它理论上可以表示任何不同类型的集合,只要你的点足够密就可以,对不对,然后通常呢人们这个做一些这个三维空间中的扫描啊,或者干什么,得到的输出应该都是一堆的点云,然后之后自然而然就会涉及这么一个问题。

给一个点云如何,咱们把它变成三角形面,这是有很多这个研究在做的好吧,然后这个嗯这就是我刚才说的啊,点名经常会被这个嗯这个之后变成这些这个多边形的命啊,然后呢正常情况下,如果你的点云密度很低。

就像这个雕塑的下面这块,那自然而然就不太容易把它画出来,所以所以这就是为什么人们平常不是特别多用点语,除了这个呃扫描出来的这种最原始的这种数据啊,然后大家这里看到了另外一个典型的例子,然后左边是一堆点。

然后这个我们可以把它变成各种各样不同的面,然后呢我们有各种各样不同的设定方法,然后自然而然就可以得到一个看上去比较连续的面对吧,那点源很简单的表示方法啊,一堆点,然后呢我们用的最多的一种。

这个显然嗯这个大家如果接触过这些什么三维的建模啊,或者什么大家都知道嗯,在图形学中得到最广泛应用的就是这种多边形面,然后特别的是三角形或者四边形的面,然后呃这个在整个图形学中得到非常非常广泛的应用对吧。

然后这些呢比较好表示任何的面也是一样,我可以把它拆成各种各样小的三角形,然后大家可以看到这个类似胶囊这么一个例子啊,也可以看到在两个这个这个球冠的这个部分,然后这个三角形这个长得比较这个规则一些。

然后在中间这个这个这个中间仍然用三角形表示,让三角形长得细长一些,但是肯定是可以的对吧,然后就是说我们完全可以用这个三角形或者四边形,去描述各种各样复杂的这个物体,然后呢这个呃显而易见啊。

这个三角形什么东西呢,它自然而然就涉及到连接关系,一个三角形和另外一个三角形怎么样连的对吧,然后这些嗯自然就会造成比这个电源要更多的一些困难,然后自然而然这个人们去研究这个研究的比较多啊。

这里简单给大家介绍一下,当然我们刚才已经提到,这是最几乎是嗯这个在图形学中得到最广泛应用的一种显示表示的。

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

然后呢这里既然提到三角形面,然后顺便给大家讲解一下,这个我们平常在图形学中是如何表示这种用三角形面形成的物体,那么这是什么意思呢,大家可以看这个嗯,这里给大家指出的是一种特定的嗯这个文件格式。

这种格式呢呃一个文件存储一个物体或者一个场景没有关系,然后这个文件格式啊叫做wave front object file,然后人们简称叫object file。

或者它的后缀是点o b j和那个编译出来的o b g不是一回事儿啊,这个这个文件呢就是说是一个文本文件,然后文本文件里面呢它其实说了什么呢,他就只是把这个空间中的这一堆点一堆顶点。

然后一堆法线和一堆这个纹理坐标分开来表示,然后再一块把它们给组织起来,形成一个这个模型,那这是什么意思呢,咱们看下面这个例子啊,这是一个文件啊,一行显示不下,显示成两部分啊。

然后这个文件呢其实描述的是一个立方体,咱们知道一个立方体,那它总共有八个空间中的点,然后这个空间中的点分别是什么呢,用这八行这种格式这个v,然后x y z z xyz就表示每次加一个这个点容易吧。

这就定义八个点,然后呢这个大家知道这个呃这个嗯一个立方体它有六个面,也就是有六个朝向,也就是说这个立方体上只有六种不同的法线,所以说它这个文件同样定义了六种不同的法线,大家说这里有八行,其实不是。

这是因为自动的建模啊,有很多冗余的地方,比如大家29 30行是一回事啊,不考虑这个数值精度的问题啊,一回事,然后就是说其实是定义六个法线,然后呢我们再定义12个这个纹理坐标对吧。

然后这个当然这里也有荣誉,大家忽略它没有问题,因为这个就是说我每个面我都要定义一个这个呃,这个嗯不同的这个这个呃四个点的纹理坐标对吧,然后当然它中间也可以也可以共用,那不是12个了。

应该是最多是24个对吧,一个面有四个点,然后就是说涉及到这些纹理坐标,中间涉及到共用的问题,它不用定义这么多,那么我先把一系列的点,一系列的这些法线,一些一系列的这些呃呃这个纹理坐标都定义好之后。

然后我定义它们之间的连接关系,也就是说哪三个点会形成一个三角形,这个怎么定义呢,用这个f来定义,就定义一个face this呢,它这个它的格式是这样的,就是呃v的坐标,然后v n的坐标。

反向的坐标和这个v t它的坐标就说是坐标,其实就是它第几个数啊,比如说这里它是v一点v2 ,你知道v8 是这个意思,然后也就是这里就告诉你啊,我们用第五个顶点,第一个顶点和第四个顶点形成一个三角形。

并且这这三个顶点上分别用第一个法线,然后第二个法线,第三个法线,并且这三个这个这个嗯顶点上分别用这个呃啊我说反了哈,第二个应该是说是这第二个参数指的是这个第几个这个纹理坐标哈。

第三个是指这个嗯第几个发现,所以他就是通过这种关系啊,把每三个点,然后给这个联系在一块,并且定义他们用什么样的这个法线和纹理坐标,那当然这样一来我们就可以这个定义一个完整的这个这个嗯物体了,对不对。

然后就通过这种形式定义很多不同的这个嗯这个三角形面,然后当然这样的话其实挺省的对吧,因为每个三角形,比如说每两层三角形共用一条边的话,那我们不用定义这么多,这重复定义这些这个顶点对吧。

我们共用这个顶点就好了,没问题,那这就是这个常用的一个文件格式,我们来定义这个嗯嗯一个一个一个一个用这个三角形形成的一个网格。

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

然后在空间中,然后形成一个什么样的物体啊,然后嗯今天差不多咱们就从这个呃曲线开始,然后咱们把这个显示的几何,然后给说清楚好吧,刚才是几个不同的例子,下面咱们从这个曲线这一块来这个明确的这个说明说。

在这个嗯图形学中啊,我们到底还有什么其他不同的方式来定义各种各种各样不同的。

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

这个曲线局面,然后咱们从这个一个例子开始看好吗,然后嗯这里可以大家可以先看一个动画哈,这个动画是什么呢,这个动画其实这个反映的应该是一个某个什么高新技术园区的这个,这个建造啊。

然后然后这里大家主要着重需要看到的其实是这个嗯,这个摄像机当然一个虚拟的对吧,然后他在一个空间中沿着某一条曲线去运动,并且呢还可以转换它的这个不同的方向啊,或者不同的这个就是说它这个不同的朝向对吧。

然后向上方向什么东西都可以这个自由的发生扭曲,它会沿着一个这个某种这个曲线去往前移动对吧,这些曲线我们当然可以定义好它,然后定义好它之后,我们就可以让一个这个这个不管是物体也好,不管是相机也好,跟着走。

对不对,然后就是说那我们既然要定义好一个曲线的曲线,势必是这个呃通过某种形式来描述,咱们待会描述好吧,然后呢这里再给大家举另外一个例子,那么在这个三维建模的一些软件这里呢。

这是一个这个玛雅这么一个三维建模的软件,然后这个软件呢呃可以定义一些这个这个曲线,呃,比如说大家看到的这个三维空间中的一个曲线,然后呢我就可以让任何的模型沿着这个曲线去移动。

这就是这就是刚才那个这个摄像机啊,如何去移动的一个一个制作过程嘛,就是外完全一个呃完全是一个意思好吧。

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

然后就是说嗯这里呢这个这就是一些曲线上能够得到的一些应用,然后同样道理,咱们的第一节课其实就说过这个事情啊,就是说嗯这个用这个曲线我们可以定义一些字体,然后字体呢我们可以加入一些所谓控制点。

大家可以看到,比如说这个点诶,然后这个点,然后这个点这个点,这四个点呢形成了一个能够定义这么一段曲线的一个一个方法,对不对,然后我刚我这个第一节课啊,我还提到这个事情。

说我们这个嗯如果可以无限的放大这个曲线的某一个区域,我可以看到任何地方它都是这个光滑的,不会说我出现放大了之后出现这种格子这种情况对吧,那这是怎么回事呢,这就是我们今天要说的一个贝塞尔曲线。

也是一种显示的几何表示方法,好吧,那么这里咱们就进入这个贝塞尔曲线呃,然后这个这边呢英文普遍念作basia curve,显然它不是一个英文的单词啊,然后这个这就是为什么叫做贝塞尔曲线好。

那么贝塞尔曲线其实是这个做了一个什么事情呢,首先咱们搞明白啊,它是要用一系列的控制点去定义某一个曲线,然后这些控制点呢它会这个定义这个曲线满足的一些性质,比如说啊这个这个他要满足这个曲线呢。

他在这个一开始从t0 开始,并且沿着由p0 到p一这么一个方向为切线往前走,然后同样道理呢,这个曲线会在p3 结束,大家看到这四个点定义的贝塞尔曲线啊,这个曲线会在p3 结束,并且最后结束的时候。

它一定是沿着p2 p3 这个方向往外走,然后大家会发现啊,这里有一个这个有一个这个系数三对吧,这是怎么回事,就是说为什么他的这个切线长度也有讲究啊,那这个大家待会儿咱们学的这个代数部分立刻就会明白好吧。

那咱们咱们现在先把这个给说明白,就是说这通过这四个点我可以定义这条曲线,它的起始点和终点一定得在p0 和p3 上,并且它的这个这个这个起始的切线和结束的切线一定都是p0 。

p一方向和p2 p1 p3 方向好,那么这样的话我们就可以得到一条唯一的曲线,只是这么一个曲线,当然了,这里有一点跟大家说明白啊,就是说这个控制点并不要求这个这个呃曲线一定要经过这个控制点。

这取决于我们怎么定义它对吧,我们只定义说这个这个曲线一定要经过这个题指点好吧,是这么个意思,这就是为什么得到这么一条光滑的曲线,好吧,这就是这个呃贝塞尔曲线。

那么最重要的事情是说我们怎么样去画一条贝塞尔曲线,对不对,给这个大家如果给定了一些点啊对吧,一些控制点呃,这里刚才大家看到的例子是四个点,然后咱们还这个呃有其他的例子,比如说这里看到的三个点。

然后呢这个我可以用任意多个不同的点,但是两个这个定义就只能定一条线段啊,然后如果说我们用任意多个点,我们如何去画出一条贝塞尔曲线好吧,这就是这个我们这个现在先要给大家介绍的一个概念。

叫做这个decastle dio算法,然后这个中文我实在是没本事翻译啊,这个基本上来说就是这么呃这个这个呃这么一个念头,然后呢这个显然也不是这个这个英文的名字啊,然后这个大家可以看到这两位大佬。

这个贝塞尔和这个呃比卡斯特这两个人,然后嗯那我们回到这个算法上来哈,我们要干什么,给定一系列任意多个的控制点,咱们怎么把一条贝塞尔曲线画出来,对不对,那怎么画出来呢,呃这个很简单啊,有一个确定的算法。

这个算法只要来听明白,然后一直做就没有任何问题,那咱们现在先把这个事给说明白啊,我们现在给定三个控制点,它生成的贝塞尔曲线是有名字的,叫做二次贝塞尔曲线,就quadratic basie好吧。

那么怎么样画一条线呢,大家应该还记得这个这个说,首先他一定要从b0 开始,他一定要在b2 结束,然后b一决定了它要往哪哪方向,one大大概是这么个意思对吧,那大家可想而知。

应该是画出一条这么一个弯曲的曲线对吧,然后大概是这么个意思呃,而事实上呢就是这么回事,然后只不过有一个更加精准的方法来控制它,怎么控制呢,咱们假设哈这条曲线我可以定义它的起点是在时间零。

然后它的终点是在时间一,那么我想要画出这条曲线,实则就是什么呢,实则就是我要把它在任意一个时间t在0~1之间的时间,t这个曲线的点对应在空间中的是这个平面上哪个位置,然后我把它找出来就好。

说白了也就是说给你一个时间t在0~1之间,你告诉我这个点在哪就没问题,那么这个decasting算法告诉我们的就是这么一个算法,怎么样找这个点啊,大家记得哈。

这里就相当于是我们把画整个一条这个曲线的算法,转化成了找一个点啊,大家给任意一个时间t怎么找这个点呢,很简单,大家看到这三个输入的点啊,形成了两个线段什么呢,b0 b1 b1 b2 对吧。

然后假设方向就是按照他输入的顺序,b0 到b1 ,b一到b2 ,然后呢我们不是已经得到了一个时间t人家这个给定的对吧,然后我在b0 b一上,我认为b0 是零,b一是一,那时间t是多少。

比如说像现在这个t大概等于一个约等于1/3吧,那我就在b0 b一上找到的1/33的位置好,找到这么一个点,同样道理,我在b1 b2 上我也找这么一个1/3这么一个位置。

这个点这个这个就是说t大概等于1/3这个距离啊,找这个时间t是多少好那这样一来呢,我就找到了呃,三体三个点形成了两条线段上的两个点对吧,那就是说原本三个点对吧,经过这一步过程中,我们得到了两个点。

那么我们把这新得到的两个点连起来,然后我再认为这条线段又是从0~1,那我再找这个t时间t是多少,这里t还是基本上找个1/3位置,大概在这个地方,然后再点上一个点。

这里呢我们就发现哦这两个点形成了一条线段,我找到了一个点,那找到这里就结束了,我们不可能找到更多的线段了,那么这一个点就是这条曲线,就这条贝塞尔曲线在时间t在的这个位置,好吧,没问题吧。

好然后这个有同学说,为什么这个这个贝塞尔算是显示表示呢,因为上节课咱们提到显示表示是要么是直接定义,要么通过参数来定义,那么这个t自然就是一个参数了,对不对,然后就是通过这种方式来解释好吧。

然后我们这里这个这个任意一个时间t,我们都可以用类似的方法找到它,那么我怎么画出一条完整曲线呢,我只要枚举所有可能的时间t,当然大家说这个t是个连续的量,不可能枚举的对吧,那当然这个只要能画一个点。

理论上来说我们就可以画任何其他的点没问题,所以我当然可以把整个一条这个呃这个这个线画出来啊,好那么我把所有的时间题都找一遍,我自然就可以找到对吧,整个这这条曲线,所以这是一个很简单的算法啊。

是一个这个大家听上去感觉就是一个很递归的一个算法,没错吧,就相当于我们这个每一段整啊,一直找,直到找到最后一个点,那么咱们同样可以这个回顾一下这个算法,咱们看下下面一个例子啊。

下面一个例子给定了四个不同的点对吧,用这四个点我们定义一个贝塞尔曲线,那么这个贝塞尔曲线同样要从这个开始到这个结束,它要经过b0 和b3 ,那么中间这两个点用来控制它对吧,那怎么做呢,同样道理。

我们同样用这种递归的方式来做,那假设说我找一个t,它大概是这个0。5左右,那我就相当于是找这条b0 b一上面的0。5左右,然后呢再找b1 b2 上的0。5左右,然后同样道理b2 b3 上的0。5左右。

然后我把它连起来,这样的话呢我就把这个问题原来四条线段对吧,现在我呃呃原来三条线段啊,四个点三条线段现在变成了三个点,两条线段问题规模减小了,然后同样道理呢,我把这个新生成的这两个线段上同样找t等于0。

5左右,然后呢这这半边也找t等于0。5左右,再把它连起来好,现在变成了两个点,一条线段,那么最后要干什么,这个大家清楚,最后这一条线段再找它的时间t,这里大概又是约等于0。5的时间t。

那么这里呢大家就可以找到一个这个在时间t等于假设说0。5,这个时候它的这个贝塞尔曲线它所在的位置,那自然这个点我们就可以把它点出来好,那么这个算法当然非常简单了,对不对。

然后就是说它是一个很显然是一个递归的算法,然后从这个从这个这个呃很多个点,每一次我让他少一个对吧,每一次我就找他们形成了线段点,一个点,那当然就少一个点,然后这不断做下去,直到最后剩下一个点。

那就是这个贝塞尔曲线上的点,那么这个过程呢可以通过这个呃一个这个动画来表示,比如大家看这里啊,这里大家可以看到这个给定一个时间t,这个第一步我们可以找到两个线段上的这个呃这个时间t,然后形成了一条线段。

这个绿线段,然后我们在这个绿线段上再找时间t,这样的话在不同的时间上诶,我们就可以把这个过程不断的做,我们就可以做出这个正确的结果来,那当然对于四个点完全一个道理啊。

大家可以看到这三个紫色线段上找三个点,形成两个绿色线段,两个绿色线段上面,然后在在这个找两个绿色点连成一个连蓝色线的蓝色线段上面,取蓝色这一个点我们就可以画出这么一个整个的贝塞尔曲线,对不对。

然后所以这是一个这个呃其实是一个很直观的过程,然后呢呃这里咱们就这个给大家这个动画演示就看到这里好吧,然后当然这些控制点的移动,会引起这些这个这个这个这个这个贝塞尔曲线本身的移动对吧,没问题好。

那么咱们这个嗯算法已经说明白了,但是这是一种直观形式的解释,对不对,那么这个我们通过这种直观形式的解释,我们看能不能推出一些这个代数上的一些形式,就是说啊大家这样想,首先这个贝塞尔曲线怎么来的。

它它是由我们这个不同的控制点对吧,咱们假设说四个控制点,那是由四个控制点决定的,呃,这个贝塞尔曲线在时间t上,它在哪里,所以嗯任意时刻给另一个时间t,那么贝塞尔曲线上的任何一个点。

一定都都得通过这四个控制点怎么样操作来得到,对不对,所以相当于是我们把这四个控制点的位置和时间t放在一块儿,我们一定有一个代数的表示方法可以写出这个这个嗯贝塞尔曲线呃,他在这个时间t它的点在哪。

那这就是咱们要做的事情,那咱们看一看啊,比如说仍然是四个不同的点,b0 b1 b2 b3 对吧,呃b0 b1 b2 b3 ,这是输出的输入的这四个点,然后呢这个呃我们怎么做的来着对吧,每两个之间。

然后我们找他的时间t,就相当于是在他们两个之间做了一个位置的线性差值,对不对,就相当于是这个t乘以b0 加上一减t乘以b1 ,就是这样得出这个b01 这么一个点,这个点对吧。

然后这每一层就相当于我们之前这个找个线段求它的时间t的点,没错吧,然后找这个第二阶段,找第三个阶段求出这两个点,然后这两点呢,然后我们再把它合成这呃一个点这两个点,然后这个线段我们再找出一个点。

然后最后这两点合成一个线段,找出这么一个点,所以它是一个整个是一个这么一个线性差值,线性差值,然后然后最后得到最后一个值的这么一个算法,那咱们可以显示的把它写出来,那比如说我们知道这个b0 坐标值的。

b一坐标值的,然后这个时间t呃,这个我们可以写得出来,然后就是说呃这里考虑时间t啊,t是这个靠近左边的这段距离,靠近左边质量距离,所以应该是线性组合起来,应该是一减t去乘以左边,这个加上t乘以右边。

这个呃为什么,比如t等于零的时候,t等于零,它就应该完全是b0 对吧,t等于零,完全指最左边,t等于一,完全指最右边,那也没问题,这样写写才是对的啊,就是说用一减t乘以左边的,加上t乘以右边的。

那可以找到在这条线段上的某个时间t的位置好,那么我一开始用b0 b一得到b01 ,然后b1 b2 就是这条线得到b11 ,那么得到这两条线段好吧,然后啊我们这这两点啊,这两点连成一条线段之后。

我再找他的时间t那很简单,我把这两个点呃,新得到这两个点再做一次线性差值不就可以得到这个b02 t对吧,就是这个点就是咱们要的最终的点,那咱们这个过程我当然可以把它展开,对不对。

这个b01 怎么求出来的,在这b11 怎么求出来,在这咱们展开之后就会发现哦,这个点呃,呃这里啊首先跟大家说,这跟四没关系啊,这不是指平方啊,这这只是一个表示方法,表示第二次这个这个这个计算了哈。

就是就是第二层,相当于是然后这里会发现啊,我们要的这个最终的这个点给定时间t在这个贝塞尔曲线上,给定时间t的点,它是输入的b0 b1 b2 的一个组合,没错吧,然后这就是很符合咱们刚才最早的分析。

任意一个时刻,贝塞尔曲线上的任意一个点,当然得由这几个控制点的坐标来决定,当然还得跟t有关系对吧,然后就是说这个几个控制点是如何组合起来的呢,大家可以看到这个这个式子看起来很熟悉的,对不对。

这个式子看起来分这个非常像这个一的平方的一个展开时,则什么叫一的平方,就是一减t再加t,然后再括号平方,大家会把一减t当成另外一个数,比如当成s那就是s平方加上2s t加上t平方。

这可不就是它的这个这个这个这个自己的某一个展开嘛对吧,就是相当于这一点体再加t,然后它的平方的展开,那同样道理呢,大家说如果说有四个点怎么办,那咱们继续往下写,对不对,然后这个点我知道。

然后另外一条这个这条边上的肯定也知道,一个就是b呃,我想想啊应该是b12 对吧,然后我就可以得到b03 对吧,那我同样可以解开,解开之后大家就可以看到这个系数写的应该是1331对吧,这个就很熟悉。

为什么熟悉呢,这个其实就是相当于s加t的n次方的展开式,然后这里呢我们做一个总结对吧,就是说啊它是一个这个多项式嗯,什么意思呢,咱们把这个事情给说明白啊,就是说给你n个控制点。

然后呃呃不给你n加一个控制点,然后这个这个这个这个点分别是012,一直到n啊,n加一个控制点,我们可以得到一个n阶的贝塞尔曲线,这个贝塞尔曲线在任意时间t,它都是之前给定的这些控制点的线性组合。

然后呃这个说线性没问题,是线性组合没问题,然后呢这个这个它组合的系数就是一个多项式,这个多项式是跟时间的一个呃有关的一个多项式对吧,我们刚才说这个这个贝塞尔曲线在任意时间极限点,是这个控制点的组合。

怎么组合,用这么一个多项式来组合,这个多项式就叫做伯恩斯坦多项式,然后这个多多项式呢非常非常简单,其实就是描述二项分布的这么一个多项式,我刚才已经已经说了对吧,就相当于s加t的n次方,那如果是三个点。

那也就是说二阶的这个就是n等于二啊对吧,n等于二,所以是s加t的平方展开之后,那自然就是s平方加2s t加t拼装,再把s换成一减t不就行了对吧,这个伯恩斯坦多项式说的就是说这个任意一项是多少。

那么大家可以看到这个i呢对应就是从零一直到n,它相当于这个多项式,这个他他在这个就是说这个121还是1331,是这这么一个呃,就是它有它有多少项,就是这个意思。

然后分别乘到这个呃对应的这个控制点上就可以了,那么这个咱们再把这个规则简化一下,很简单,就是说这个呃我们不考虑多少层了,我们现在就直接把这个式子写出来,那么任意接触的贝塞尔曲线。

任它上面的任意一个时间t呃,这个点的位置就是由伯恩斯坦多项式作为系数嗯,对这个呃给定的控制点的加群没问题哈,那这样的话就没问题了,然后这里有一个例子哈,这里呃例子想说明什么呢。

想说明通过这么一个简单的这个这个推导哈,然后咱们就可以得到一些这个很不错的这个性质,比如说我们完全没有必要限制我们这些控制点在平面内,在空间中,我仍然可以得到一个这个贝塞尔曲线。

那我只要把这个不同的这个控制点输入成这个三维的坐标不就行了吗,然后我同样用伯恩斯坦多项式去对它进行这个差值没问题吧,哎所以说这个非常好,那这个呃如果我把它展开嗯对吧,任何一个这个控制点。

然后我们这个不管它是什么,那就是说在时间t他一定会通过这个这么四个不同的系数,把这四个这个b0 b1 b2 b3 可以组合起来,形成这个呃贝塞尔曲线上的一个点好,那这就没问题了。

这就是说把这个问这个之前的这个d cotto算法,用这个数字把它给表示出来而已,没有什么这个特殊之处啊,然后这里多看一眼这个伯恩斯坦多项式啊,波恩斯坦多项式我刚才说了,就是说这个这个多项式呢。

其实是一个就相当于对一自己的这个n阶展开,所以说它这个多项式呃,在同一街上把几个多项式的值加起来就是0123啊,比如说它有这个这个三阶,有四个不同的多项式,分别对应i等于0123。

然后它加起来肯定都等于一,这就是为什么咱们从这个图上看,给任何时间t啊,画一条竖线,那四个竖线的交点的值,这个y坐标啊加起来肯定得等于一,没问题,然后呢这个这个这个曲线大家可以看到是一个相当对称的。

这两个这个这个这个比如说这个b一跟b2 就是对称的,b0 跟b3 就是对称的诶,这个反应在组合数学上大家就知道ni和呃,就是说这个从n项中取,而像呃的组合是等于这个从n个数里面取n减a项的组合对吧。

所以说从这个事情上来说,就是也是可以解释的,没有问题好,那么嗯这就是这个伯恩斯坦多项式啊,挺简单的嗯,但是基本上来说啊,就是这么一种思路,就是说我们通过一些定义一系列跟时间有关的多项式。

来对这个不同的控制点进行插值对吧,这就是一个差值嘛,组合也是差值嘛,一个道理,然后得出一个新的点,这个点就是我们定义的曲线上的点,这个概念不止应用在贝塞尔曲线上。

也应在这个其他的各种各样的这个更复杂一些的曲线上,咱们马上再说好吧,那么这里就是几何和代数上把这个贝塞尔曲线说明白,那咱们总总结一下啊,呃这倒不是总结哈。

就是说我们来看一下贝塞尔曲线有一些这个不错的性质,分别都是什么呢,啊首先这个咱们从最简单的开始,贝塞尔曲线规定了它必须过起点和终点,所以他在t等于零的时候一定在起点,然后在这个t等于一的时候一定在终点。

这没什么好说的啊,这个实际上是规定方法,那如果对于呃这个性质是特定的,对于这个呃这个三次的贝塞尔曲线,也就是给四个控制点的啊,就是说第二个第二个这个性质就是说呃一开始这个曲线往哪儿走,它的这个方向。

它它的这个起始的这个位置的切线一定是三倍的b一到b0 ,然后就是说这个咱们还是之前规定的这个事情啊,结束的时候一定是这个最后的一个线段的这个朝下是这个意思,而这个三倍啊只和这个嗯。

因为你只是因为我们这里有这个四个这个控制点,如果呃控制点不一样的话,这个并不是三啊,并不严格,是三好,那么嗯这里呢有一个不错的性质,这个贝塞尔曲线,贝塞尔曲线的一个一个好的性质,就是说它在仿射变换下呃。

它是有一个好性质是什么呢,就是说我可以直接对这个不同的顶点做仿射变换,然后我我再重新对这个变换之后的顶点画一条贝塞尔曲线出来,这个贝塞尔曲线一定和另外一个贝塞尔曲线是一样的,哪一个呢。

就是说我已经通过原始的这个这个控制点,然后画出一条贝塞尔曲线,然后我对这个曲线上面的每一个点做仿射变换,嗯,这样这样两个这个方式得出的啊,贝塞尔曲线是一模一样的。

这也就是说这个给了我们一个很好的性质是什么呢,那也就是说如果我想对一个贝塞尔曲线啊做仿射变换,那没问题,那我只需要对它的这个几个控制点做仿射变换,我再重新画出来就好了。

对仿射之后的这些控制点重新画一条贝塞尔曲线就好了,所以它有一个非常好的这个这个性质,这也不用你一直把这个曲线上每个点都给记录着,这个不错,但是呢这里大家看到是什么性质呢,在仿射变换下有这么个性质。

但是这个呃并不能说这个对其他的变化也是如此,比如说对于投影就不是这样啊,大家在这个空间中某一个平面上画了一个这个这个呃贝塞尔曲线,然后呢我把它投影到某一个摄像机看到的这个这个平面上。

然后这时候我再重新对这个投影过后的这几个控制点,再画一条贝塞尔曲线,那可就不是原来的贝塞尔曲线了啊,记得哈就是说这里呃专门限制了得是仿射变换投影是不行的好吧,然后还有一个性质非常有趣。

而这个性质是什么呢,就是说啊这个这个性质叫做突破性质,什么叫凸包呢,这是一个在这个计算几何上得到了一个广泛应用的一个概念,然后这里简单给大家解释一下啊,在解释之前先给大家说一说啊。

就是说呃这个突破性质对于贝塞尔曲线说的什么意思,就是说你画出来的贝塞尔曲线一定得在几个控制点,就是所有的控制点形成的凸包内啊,那这就好说了啊,那咱们看这个例子啊,这个什么是这个凸包图包。

其实概念很好理解啊,它有它有很多这个这个定义啊,比如说它有一个定义,就是说呃能够这个包围这个一系列,给定的这些这些这些几何形体的最小的凸多边形,那这个要求挺高的啊,最小又得是凸多边形。

然后这个定义其实不直观啊,这里给大家一个直观的定义啊,什么呢,很简单,这个比如说啊大家想象这个平面上或者一块板上面,大家定了很多钉子啊,这些黑点就是钉子啊,呃定这么些钉子呢,然后你有个橡皮筋。

大家知道橡皮筋呢这个东西可伸缩对不对,然后假设说你可以把这个橡皮筋啊拉得非常大,先把所有钉子都给都给包住啊,就是外面这一圈儿呃,呃这个包住,然后你突然松手,你突然松手会发生什么呢,这个橡皮筋会收缩。

对不对,会收缩,最后呢这个橡皮筋会收缩在这个这个这些物体形成的某一个外框上,这个框大家就可以理解成是这个这个图暴简单了,就相当于是这么一个过程嘛,这样好想想对吧,呃呃这就是说我们得到这么一个图标。

这个是什么意思呢,就是说我们回到刚才说这个这个图包性质哈,呃脱发性质是什么意思呢,就是说呃任何一个贝塞尔曲线,你把它画出来之后,这个贝塞尔曲线上的任何一个点就是在任何时间体啊。

一定都在给定的这几个控制点所形成的凸包里面,就是这么个意思,那如果我有四个点,那四个点大家可以形成一个这个类似这个梯形这种形状哈,就是多边形四边形对吧,然后就是大家画出来的这个这个呃贝塞尔曲线。

一定是在这个四边形之内的,那么还这个我们立刻可以应用这个图标的性质哈,咱们回到这个图标的性质上来好,那么这个比如说啊我给大家一系列的点,这些点排列很有意思,正好是从左到右一个一个排列排列在一条线上。

那这个比如说第0号,第1号一直到第n号排排列在一条线上,那这些点我说他是他们是这个我要画的贝塞尔曲线的控制点,那么我问画出来的这个贝塞尔曲线是长什么样的呢,那这个时候大家可以立刻告诉我答案,为什么呢。

因为这个时候有突破性质,那我给定了一系列控制点,都在一条线上,那很简单的图包肯定就是这条线自己,那么我们说贝塞尔曲线又有图包的性质,那贝塞尔曲线无论如何不能超过图包的范围。

那么这个贝塞尔曲线一定被限制在这条线上,所以这个贝塞尔曲线一定是这条线自己,对不对,会得到这么条直线对,所以说这个这个嗯就是一个简单应用啊,然后就是说贝塞尔曲线有这么一个不错的性质。

就是你你是可以知道它绝对不会超过这个凸包的范围内,谁的图包给定的控制点形成的图包啊,ok那么就是这么个意思,那咱们这个下面来说下面一个话题吧,就是说贝塞尔曲线咱们已经说了,给定任意多个就给你十个点。

你肯定可以画出一条贝塞尔曲线来,但是它有一定的问题,这就是说我们为什么要引入这么一个概念,叫peace wise,被在而去,现所谓peace wise就是相当于是这个逐段的啊。

贝塞尔曲线相当于我一段一段简单来考虑,那为什么要这么做啊,这里给大家看一个例子,这里n等于十,也就是说给了11个点,对不对,然后这个呃稍等哈,1n等于12345678 90 11没问题啊,11个点。

然后n等于十,然后我们就可以画出一个贝塞尔曲线的,没问题,那咱们这个这个十个无非就是多一点呗,十个n等于十,形成了十个这个线段,然后十个线段呢每个片段都取时间t,然后我全连起来,形成了九个线段。

然后再回到这个一直做到一个线段,这就找到了一个点,那咱们这个工作费时一点,总归能画出来,对不对,画出来之后我们得到这么一条曲线啊,这两条曲线就是说大家看到是对的,没有问题,但是它并不直观。

你可以看到这个它并没有往这边这个扭曲对吧,也没有往这边去,它基本上来说在中间它这个变成很平很平滑的一个这个曲线,是这么个意思,那也就是说这个曲线呢不好控制,不太利于用这些中间的控制点来控制。

当你的控制点多的时候,就不太容易这个这个得到一些你想要的形状,不那么好操作啊,当然形式肯定行啊,这个时候呢人们就发现说,我干嘛要一次用这么多的这些控制点去定义一个贝塞尔曲线呢。

那我能不能说我用这个每一次我用很少的控制点,我定义一段贝塞尔曲线,并且我把这些贝塞尔曲线给连起来,那是不是可以,那就没问题,那这样这样的话呢,这就是人们发明了这个这个这个所谓peace wise的方法。

就是逐段的定义,那么特别的来说,这个逐段定义,大家非常愿意把这个逐段的贝塞尔曲线定义成每四个控制点,可以定义一条贝塞尔曲线,也就是说大家喜欢用这个peace wise cubic。

大家喜欢用这个三次贝塞尔曲线,四个控制点,那么什么意思呢,大家看这条曲线就可以看得明白啊,大家可以看到这里有一个控制点,起点没问题啊,然后整个这条曲线呢是由不同的贝塞尔曲线对起来的,怎么体现呢。

在这里这个点上它显然发生了一个拐弯嘛,剧烈变化,它显然不会是通过这个原始的这个正确点一下,求出来的一条贝塞尔曲线对吧,这个点也发生了一个拐弯对吧,然后就是说它是拼起来的,怎么拼的呢,每四个控制点。

然后定义一条这个贝塞尔曲线,哪四个呢,这个起始点这一个点啊,这一个点这一个点,然后以及这个点,那那么这四个点就可以形成一条这个诶光滑的贝塞尔曲线,诶形成这么一段,那同样道理,我通过这个点。

然后以及这个空间中某一个肯定在这啊呃的一个控制点,再通过这个控制点,然后再通过这个控制点,这四个又可以形成这么一段,那同样道理,我后面可以继续再形成更多的段,只不过呢人们为了这个方便这个这个呃来看啊。

咱们平常不愿意把这四个点给连一块,这四个点连一块看起来很难看,所以他们这个这个中间这个点啊,这个并不把它给画出来,就是说这这两个点是控制点,这个起点和这个这个终点也仍然是控制点,它们地位完全一样的。

没什么区别,就是0123这个顺序仅仅是这里为了显示他没有把它画出来而已,好吧,然后呢这种定义方法就得到了非常广泛的应用,因为大家可以把这两个控制点啊,中间两个控制点当成一种这个控制杆一样的东西。

可以拉着这个这个这个曲线哎,往不同的方向去对,如果大家玩过这个photoshop对吧,这正是这个photoshop里面的钢笔工具给大家带来的。

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

这个这个画曲线的这个能力,然后咱们在这个给大家一个例子哈。

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

这个我确认一下啊,我不知道大家能不能看到我这个嗯这个这个网页哈,这是头一次在这边打开,我自己也看一下这个啊,好没问题啊,没问题,那是这样嗯,就是说嗯大家可以看到哈。

这个就是以呃这里画出来的就是一个这个分段的啊,分段的或者逐段的贝塞尔曲线,而且是分段的三次贝塞尔曲线,也就是每四个控制点是一个这个形成一一小段三次贝塞尔曲线,那么咱们看这一段哪四个控制点呢,按顺序来啊。

起点它,然后这个然后这个算是第二个点,然后这是第三个点,这是第四个点,然后这四个呢会形成一个贝塞尔曲线,咱们还可以这个拖拽它,你看比如说这个这四个点1234形成一个贝塞尔曲线对吧。

然后呢这四个点1234又可以形成一个这个贝塞尔曲线对吧,然后这个这个呃所以说这个通过这种方式啊,咱们这个每四个点咱们定义一个贝塞尔曲线,然后就可以把它连起来,那么自然而然大家肯定要问这么一个问题。

那我怎么保证我连起来的曲线还是光滑的呢,比如说在这个地方它就发生了一些转折,对不对,这个地方折了当然更厉害,那么现在呢先告诉大家这个结论怎么样才是光滑呢,首先他们这个无论如何。

肯定是这个物理上是连起来的,我们说光滑不光滑,是指它的这个切线方向是不是光滑,就是所谓说如果以为是蚂蚁,它就爬啊,爬到这儿它不用转向,它自然而然往前走,他们这个就是有一个光滑的过渡,那么这个怎么保证呢。

大家还记得这个三次贝塞尔曲线的性质对吧,就是说最后这个曲线的切线一定是这个往这么一个方向啊,往这个方向来的,什么方向呢,就是由这两个点定义的方向,由这个第三个点,第四个点定义的方向。

那同样对于第二段来说,那它的起起始方向一定是通过第一个点和第二点定义的一个方向,并且他们前面有个系数三,所以说如果我们把这两个控制杆啊,相当于是把它给拉到诶贡献这个状态。

并且他们又是和这个中间这个点等距离的话,这个时候我们就说哦好,我们得到了一个光滑的曲线,然后这个这样的话,你看不管我这个这个控制感怎么怎么怎么牛对吧,然后都可以得到在这一点唉他们两两段的切线对上了。

没问题,那有同学会问说我这样算不算对上对吧,这样就是说如果有个蚂蚁在这儿爬,爬到这儿的话,突然爬得快了些,但其实他这点方向也没变化对吧,那这种通常咱们不算。

咱们会把它认为说如果认为两个曲线在这个切线意义上延续,我们认为切线不只是方向一样,大小也得一样,所以这两个距离得是一样的,这个得拖出去啊,拖不出去算了吧。

这个这个就这样吧啊这这时候就差不多基本上认为是连续的好吧,那那就是说啊我们要求的就是说它的导数要连续,也就是说布置方向还是这个呃这个大小。

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

那咱们回到这个好。

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

回到咱们的这个ppt里面啊,好那咱们这个继续啊,既然我们提到了连续性,咱们在这里多给大家说一句对吧,这个连续性是什么意思呢,就是说如果你这个给定了两个这个贝塞尔曲线呃,那左边一段。

右边一段大家可以看到都是由四个控制点构成的,那如果说这个呃叫什么呢,在这个控制点上呃,这这两个在几何上这两个曲线都通过这一个点,那么我们就说这是一种最简单的连续对吧,我们说曲线连续。

我们刚才说的是切线上的连续,我们现在先说个最简单的情况,几何上得连续对吧,就是说他们在这个点只要接触,那就是连续,那我通过我的这个这个分段的这个贝塞尔曲线的定义呢,这一点肯定可以保证。

当然这一点呢有它的名字,只要说第一段的终止点等于这个第二段的起点,我们就管这种连续叫c0 连续,那这个c呢表示continuity就是连续性,连续性叫c0 连续,然后这就表示几何上只要挨在一块。

不管它形成多么大的锐角,这种没关系啊,只要挨在一块,这就是连续c0 连续,那么我们再定义一种连续,就是说它的切线我希望也也也能够连续对吧,那切线怎么样才能连续呢。

那我们刚才说这个这这这两段距离要是一样的,呃对吧,然后这个a n就是这个这个点等于b0 ,当然是了,然后他们两个就等于等于什么呢,等于这个前面这个点嗯就都在这个位置啊。

这个这个位置自然是左边这个点和右边这个点他们的这个中心位置,这就是为什么可以这么写对吧,然后就是说白了就是说这两个控制点离这么一个公共的点,它们的距离要是一样的,并且方向也是一样的。

就是说这个在呃贡献方向相反,距离一样,这个时候我们管这个连续性,就是因为它是切线连续嘛,我们就管它叫c一连续,那么大家可以认为就是一阶导数的连续对吧,然后这就是我们定义这个这个不同的连续性。

当然有同学问这个这个那么再高阶的导数,二阶导数或者什么什么这些呢,有然后人们管它叫曲率连续,有很多各种各样不同的连续性的要求,有时候呢大家会觉得说哎这个c一连续看起来已经挺好的了。

但是有时候这个在制造上大家会觉得说仍然不够,我们得保证说c2 连续,那自然而然我们也可以定义不同的方法对吧,我们刚才提到了这个代数的表示方法,然后我们刚才这个又说这个啊这个这个这个就是说c0 连续。

相当于是直接这个呃两个函数在值上连续,然后呢如果c一连续就是导数连续不续,那c2 连续,那就是二阶导数连续,那自然而然我们就可以这个把它们通过代数形式写出来的,是没有问题的,好吧。

这里呢简单就给大家介绍到这里,基本上来说这个如果大家再往后学习,这就已经够了,作为这个这个呃入门啊,好那咱们介绍了两种不同的连续性,那么这里呢这个已经等于是把这个贝塞尔曲线相关的内容说完了。

这里呢先说一下有一个重要区别哈,我们这门课说这个贝塞尔曲线的时候,说的是一个反的顺序,这个之前呢这个在大家如果接触过其他的图形学课,嗯,大家会看到大家是这个贝塞尔曲线,先从代数定义上面来。

然后如何去推导公式,然后我们在这个做这个几何上面,这个怎么样把它画出来,用这种方法,然后咱们这次是从几何开始到这个代数上,然后希望这样的话能够好理解一些,因为这个贝塞尔曲线它涉及到这个g函数就不容易。

就是我们说的那个伯恩斯坦这个这个多项式啊,这个就不容易,所以咱们先直观的来看好吧,然后呢嗯这门课咱们马上会说到这个事情,就是说关于曲线部分不做多这个解释,然后呢嗯这里简单给大家介绍一下贝塞尔曲线。

当然不只是这个这个这个图形学上应用的曲线,还有各种各样别的曲线,比如说这种叫做splin的曲线,这种splay呢呃中文叫样条啊,我应该加个中文在这儿的呃,样条呃。

这个什么样的那个这个这个这个就怎样的样啊,调试这个这个条目的条一条两条的条,然后呃样条,然后呢什么意思呢,相当于是对曲线的一种总结啊,就是说这个定义很清楚,就是说一个连续的曲线,然后是由一系列的控制点。

这个这个控制的,然后呢它能够满足一定的这个这个连续性,就是这么个意思,在任意一个地方他都会满足一定的这个连续性,几阶的连续没有关系啊,然后这个取决于具体的这个这个呃例子。

然后大家可以看到这是一个这个早期啊,人们如何去画一条曲线,他们会运用一个树枝一样的东西啊,然后拿各种各样不同的东西把它给固定住,固定住,然后就是就保证了说这个呃样条会经过这些点对吧。

然后这个中间怎么样弯曲,那自然就交给这个这个树枝自己了对吧,然后就是说啊呃一个简单总结就是说一个可控的曲线,这就叫样条好吧,然后样条里面呢用得多的叫做这个b样条,这个b样条它是一个缩写啊。

叫basis supplies,就是指基函数样条,然后基函数呢咱们刚才提伯恩斯坦多项式的时候没有明确提,就是说我用我我我这个啊可以理解成用伯恩斯坦多项式。

在时间t它的几个不同的像对这个不同的这个控制点做一个加权平均,我也可以理解成我用这个控制点的位置,对这个伯恩斯坦多项式这个进行进行一个加权求和,那么这个波斯坦多项式我就就理解成是一个基函数。

就相当于由不同的这个函数,通过不同的不同的这些方式组合起来,可以形成别的函数,那这个函数就叫做基函数啊,就是basis的意思,那么就是说啊这个b样条到底是什么意思呢。

就是说它是一个对这个贝塞尔曲线它的一个一个呃相当于一个扩展,它比这个贝塞尔曲线的能力要更强,为什么呢,因为贝塞尔曲线刚才咱们看到一个例子,n等于十的情况下对吧,11个点,我其实动一个点,如果我动一个点。

整个一条曲线在任何一个位置都会发生变化,而这个在设计上经常来说大家不太喜欢这样的性质,大家想要什么呢,大家想要的一个性质是说,我我我如果说我觉得其他这个这个这个一条曲线啊,其他部分都挺好的。

就有一个地方我需要改一改,那我在这个周围,如果我就动一个点的话,那整个曲线都要改,那可不是不太好嘛,那就是说啊我希望有一种性质叫做作为局部性,那么局部性是什么意思呢,就是说这个这个我改变一个点。

我知道这个这个控制点至多影响这条这条曲线影响到哪个范围内,好吧,就是说这个这个b样条就有这么一个功能,那大家肯定会说,那之前说这个贝塞尔曲线,如果我用这个分段贝塞尔曲线,那可不就有这个局部性吗。

是没问题,就是说就是说大家希望提出一种更加容易控制的,我不需要分段对吧,我用很多个点,我只用点就可以了对吧,然后我中间要改,我就只用拖拽一两个点,那是非常好,没问题,就是说b样条它有这么一个好的性质。

就是局部性好,那么这里呃这个不再多说哈,然后就是说关于这个b样条,咱们就说到这里,为什么,因为b样条极其复杂,很有可能是整个这个这个这个这个图形学里面啊,最复杂的一块,如果大家需要学的话。

这个咱们这节课啊,这这这个这个呃叫什么入门课,我们这个呃不是我们的,基本就是我我这个想法我是这么觉得,就是说通过学习这个贝塞尔曲线,你已经有足够的能力去掌握这个,如果说这个b样条到底是怎么样运作的。

然后不管是从几何上还是从代数上分析方法是完全一样,只不过它的这个g函数要更加复杂,然后算起来也更加复杂,包括这个b样条,以及包括比它更复杂的一个东西,叫非均匀有理,b样条叫nerves,嗯好吧。

然后这个这这些东西呢,其实其实呃nervous相当于是b样条的一个呃更延伸的一步啊,然后就是说嗯通过学习到这里,关于贝塞尔曲线如何分析,你肯定是有能力去继续去学这个b样条,那么到此为止。

咱们这节课这这这这这个课咱们就不多说了好吧,然后嗯并且其实关于这个这个样条这块儿还有更多的东西,比如说我嗯有两个这个贝塞尔曲线,把对在一块儿,然后我要把它变成一个高阶的贝塞尔曲线,这个怎么做对吧。

或者说我高阶的贝塞尔曲线,我就会把它给拆开对吧,然后然后或者说我原本有100个控制点控制了一条贝塞尔曲线,然后我现在只希望有90个点来控制一下,我希望得到的曲线跟之前的曲线差不太多对吧。

像这些问题如何去解决,一些在这个曲线上常见的一些操作,这里我们就没再说了,好吧,只是简单的给大家提一下这个关于这个曲线这一块的知识,以及分析方法,那如果你想多学的话,很简单,这里有传送门对吧。

这个这个呃这是我之前在清华的导师,这个这个胡志明老师他的这个一门一门课,然后很早了,但是关于这个曲线曲面这块说得非常的深入透彻,也非常难啊,这个大家这个欢迎去这个访问这个这个地址,然后大家可以看一看。

如果大家有兴趣,可以学到更多的呃关于这些呃样条的这些这些知识,好吧,那这里咱们这个这这一块儿关于曲线,我们就说到这儿好吧,那今天呢我们这个有一点时间可以先把这个嗯,这个呃曲面先简单的说一说啊。

那没问题啊,咱们就这就简单开始,那么说曲面啊,显然他这个会比这个曲线什么东西要稍微复杂一点,但是咱们这个其实理解上倒是更好理解一些啊,首先就是说对于曲面来说,我们如何去得到它。

我们知道它也是一个显示的这个呃这个物体的表示方法对吧,那我们自然可以把这个曲线的概念给延伸到一个这个平面上对吧,比如说像这里这个嗯这里给大家看到的就叫做贝塞尔曲面,然后这个贝塞尔曲面。

比如说左边那个大象,这个还是一个分块的,或者说这个也是这种这种分段的吧,就是贝塞尔曲面,大家可以看到一个一个这个块儿把它给拼起来,然后并且中间肯定不能有缝对吧,然后这这些要求应当如何去满足对吧。

这都是几何上要研究的一些比较困难的问题,包括右边这个茶壶也一样的,可以可以看到整个一个壶身,它是这个通过一些一应该是一整个这个这个贝塞尔曲面去描述的好吧,然后这个这是一些例子吧。

然后我们现在仔细来看一下,就是说用这个贝塞尔曲面的曲线啊,如何去得到贝塞尔曲面对吧,然后这是这个概念上的延伸,虽然容易,但是具体怎么做,咱们先搞明白,首先呢对于这么一个块儿来说,这个块来说。

它是这个是一个嗯一个曲面啊,怎么理解呢,给理解成一个平面,然后中间这个有一种力把它给这个这个拉上去啊,是这种感觉,然后呃这么一个意思啊,然后它是怎么得到的呢,它是由16个控制点,说白了是4x4个控制点。

然后得到,然后呃这个大家可以看到上面这些不同的黑点啊,这些不同的黑点,然后我也可以理解成某一种这个力,我可以直拽着这个呃表面,然后它得到一定的形变,没问题,那具体是怎么做的呢,就是非常简单。

其实就是相当于是还是之前咱们说的双线性差值的理解啊,在两个方向上,我分别应用背在而曲线就可以了,那咱们看这个动画啊,首先我在平面上定义4x4这么个控制点,我认为它有四行对吧,我认为它有四行,每一行诶。

我拿出来四个控制点得到一个这个曲线,没问题,这个曲线在时间t啊,然后这个不同的时间t,然后它会这个在不同的位置上,对不对,然后这个然后如果说啊我们把这个得到了这四个不同的点。

认为是另外一个贝塞尔曲线的控制点,我们可以画出一条这个蓝色的这么一个线啊,就是这么个意思好,然后这个线在不断的扫这个过程中,在呃这个给定另外一个时间t,在这个不断扫过这个这个呃空间中的过程中。

就会得到一个平面,所以没问题呃,不平面啊曲面,然后就是说你你也可以任意的改变他的这个贝塞尔这个控制点的位置,所以没问题,说白了其实就是说水平方向做一下,然后这个得到了四个点,再把它们当做控制点。

然后在竖直方向再做一下,当然通过这种方式,我们可以定义非常非常复杂的这个曲面对吧,然后嗯对这里这个示意图呢就说明了这个意思,就是四四条这个线分别做这个呃这个这个贝塞尔曲线,然后呢我把这个得到了四个点。

再当做控制点,生成另外一条贝塞尔曲线就可以了,很简单的事情对吧,然后当然了,这里面又忽略了很多这些计算过程啊,比如说呃不是计算过程啊,有很多复杂的事情,比如说这个你不同的贝塞尔曲面怎么样拼在一块。

才能保证它的边边界严格,这种严丝合缝的,这个放在一块儿,它不会去这个露出11111条出来对吧,就这种,然后这些呢自然就是说嗯不太容易,咱们这课上就不说不不多说了啊。

然后嗯然后这里呢我们就简单说一下这个这个具体怎么样做,其实刚才这个过程已经比较明确了对吧,然后这里我们要找到这个嗯这个贝塞尔曲面上的任何一个点,那么我们通过刚才的过程来看啊。

其实是我们需要两个不同的时间t对不对,在水平方向上走,我找同一个时间t然后呢我找到了四个点之后,这四个点要连成一个曲线啊,还得有个时间t所以说其实它得需要一个二维的一个控制的东西。

所以我们管它叫uv就可以了,或者叫t1 t2 没关系,然后呢我们就完全可以用这个这个这个某一个u对吧,某一个u然后沿着这个呃四条得到了这个呃曲线上,我找到它这个呃时间u应该都是在哪儿。

这样我就可以得到四个这个蓝色的点,那么我再给任何一个这个时间飞,然后呢我就这个在这四个蓝色的点形成的曲线上找时间v,那我就找到了这个最后的这个点,它所在的这个位置,那这个点的位置。

那自然就是这个曲面在uv这个参数下面的位置,那么大家就可以看到这么一个事情啊,我们把一个参数uv都在0~1这个范围内,就可以映射成这个曲面上的任何一个点,那这自然就是说为什么贝塞尔曲线是显示的表示。

因为它是通过参数映射过去的,没问题吧,那这样的话就是说和之前的知识咱们就联系到一块儿了,呃这个怎么做是非常简单,写得也清楚啊,啊这这个刚才大家在动画里面看到了这么一个这个举个例子对吧。

然后就是相当于是这四个线上,我我分别得到一个点,再连成一个这个新的线,就是这么回事,好啊,那没问题嗯,这样的话呢我们这块儿这个涉及到贝塞尔曲面这块儿,简单的给大家说了一说啊,大概是这样。

然后呃还是一样啊,刚才我们提到这个事情,说,如果大家希望多学一点,这个这块知识,然后大家欢迎大家参考这个更难的课程,这个这个胡志明老师的课程好吧,然后嗯这里呢呃我们已经说了这个贝塞尔曲面。

当然咱们一开始就提到说这个用来表示空间中的这种这种这种呃面啊,他们的这个几何形状用的最普遍的一种方法,还是得用这个呃所谓match也就是网格对吧,然后我们用这个三角形的网格也好,用这个四边形的也好。

然后咱们这里呢以这个三角形的为例呃,最简单的一种网格,然后呢,我们既然用三角形来描述这个各种各样不同的空间中的这个表面,那自然而然对于它形成的网格,我们会有一定的操作,涉及到什么操作呢。

这就是我们所说的几何处理,然后这一块呢有这个这么几项操作,这是这个呃,希望说给大家的好吧,呃分别是什么呢,分别是这个呃这个嗯就是网格的细分,所谓细分是什么意思呢,大家可以看到。

比如说这个牛它是用了这么些个三角形这个描述的,那我如果用更多的三角形,是不是可以得到一个更光滑的一个物体表面,那这个就是网格的细分好,然后还有一个它的逆过程,那我用更多的这个这个面。

我可以表示更细节的一些东西对吧,然后呢我如何我我如果用更少的面呢,那我可以节省很多的存储,如果我有一个这个模型,我觉得这个他用不了那么多三角形,我在保持它的基本形状的情况下。

哎我能不能用更少的三角形来描述它,那就非常好对吧,当然它肯定有损失,但是这个损失如果能在一定的接受程度内,如果能提出一种好的办法控制它的损失,那就非常好,还有一种这个这个面上的操作呢。

这个操作简单提一下,就是说这叫mesh regularization,所谓regularization就是让它更正规化,所谓这个正规化的意思呢,其实就是说让这个三角形呢不至于出现那种特别尖。

特别长的那种三角形,然后就是说在这里基本上都变成一个跟正三角形相似的一些三角形,就是从这个例子上面看出来,这些三角形现在呢基本上大小形状什么都差不多,这样的话会有一些很不错的性质啊。

也就是说嗯关于这个在这些面上就是有很多这个不同的操作,然后咱们这个放在下节课给大家说三角形网格呃的这些具体操作好吧,然后也会给大家举一些例子,那咱们今天基本上来说这个呃这个速度应该是没问题。

然后基本上来说就是把这个曲线这一块嗯,简单说了一下这个关于贝塞尔曲线这块的嗯,几何和代数理解,然后这块呢呃很快会有作业反映出来,就是说让大家画一条贝塞尔曲线,非常简单的事情。

就是说只要正确实现这个decastle这种算法就好了,然后嗯没问题,那咱们下一节课呢再给大家继续这个话题,把面呃这个这个这个这个呃网格这块儿给说明白,然后咱们再继续后面的内容,然后我再安排一下。

看要不要说一些更复杂一点,困难一点的内容,还是说咱们直接进入到后面的这个这个呃光线追踪这个话题里面去,因为后面很快就要就要用到咱们这个几何介绍的这些知识,好吧,那这个今天呢咱们就说到这儿啊。

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

这个挺简单的这个话题,那咱们把这个时间现在交还给我们的呃技术秘书同学好啊。

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

这样好。

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

GAMES101-现代计算机图形学入门-闫令琪 - P12:Lecture 12 Geometry 3 - GAMES-Webinar - BV1X7411F744

今天大家可以看到我们要说的是这个嗯。

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

几何的最后一部分,其实呢我原本想想说,这节课主要来讲光线追踪,看速度吧好吧,然后我们现在先把几何这部分说完,然后今天再说一说这个shadow mapping这块的事情,然后再提到光线追踪这么一个思路。

好,仍然是感谢大家的大力支持,咱们今天第12节课好,那么在这个课程开始之前,几个事情要宣布一下好吧,一个是这个我看有很多同学啊,这个把这个作业三的啊,这个小奶牛拿出去炫耀啊,非常不错啊。

这个欢迎啊非常欢迎嗯,大家都很喜欢吧,对不对,我觉得一开始做出来这个这个奶牛,这个还挺好玩的对吧,然后另外一个事情是这样的,嗯我们的作业一啊,就是嗯这样先说一说背景,就是有同学反映啊。

后来加入这门课能不能提交以前的作业,是这么一个事儿啊,答案是完全可以,然后我跟助教们商量出来了一个方案,怎么做呢,就是说咱们这个正常作业还是正常,这个嗯发出去正常提交没问题,如果你错过了前面什么作业。

我们讲过这个课呢,本来就不是什么嗯,这个强制性要求大家要做作业,对不对,然后如果大家之后要补没问题可以,然后如果之前做的早的同学们,这个这个也不会有什么那损失,我怎么觉得对吧嗯行。

然后就是说后来愿意补的同学呢,我们以现在的情况是在呃,这周已经放出了作业一的补提交,然后之后我们每一周会,这个放出另外一个作业,比如下周我们就可以提交这个作业二,然后这个作业三之后顺延,这么安排好吗。

然后我们正常的作业呢不受影响呃,还是该怎么着怎么着好吧,呃,这个算是之后大家应该如何提交,作业的事情好,然后呢这个上一节课我们提到说呃,这几个轴怎么样计算呃,我想了一下,我原本是担心什么呢。

担心大家说这个不知道怎么计算,会耽误大家做这次的作业,但是后来我看了一下这个助教提供的代码,以及我们又聊了一聊,嗯,觉得应该是以现在的这个作业里面的注释,肯定是可以把这次作业呃完美的做出来了。

然后关于tnb的这个计算呢,我就放在之后的pass string这块的内容,说到这个呃,局部的这个着色框架这个里面来说好吧,这个就是现在的安排,然后呢,当然不可避免的说一说这个大事情啊,大新闻啊。

图形学时隔32年之后,终于第二次得到了图灵奖。

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

当然是重大的好消息,对不对,嗯,然后我们来看一看这两位得主,嗯,嗯at cmo和pet heroh,然后我们很快就会说嗯这两位的工作啊,这个非常巧合,这节课我们就会说到cmo的一个工作。

叫cinema clark subdivision,然后之后我们在pass string里面呢,还会提到pet以及他的学生,which做出来的贡献这一块呢,之后我们就再详细说我一个个人的理解哈。

就是这次嗯,把这两把这个图灵奖颁给这两位获奖人啊,这个当之无愧啊,如果说sutherland也就是第一位图形学,就算是图形学的创始人,然后第一次得到这个图灵奖。

这个算是made computer graphics,那么这两个人就可以认为是made computer,graphics great,如果没有这两个人,就没有当前的计算机图形学。

然后大家之后会这个更多地接触到,这两个人的工作哈,然后特别是什么呢,特别是我这么说吧,他们都会都有很多,这个这个家喻户晓的一些算法啊,比如说cl cl clark的这个这个曲面,这个三角形面积分呃。

这个呃不是三角形面啊,就是说这个表面细分啊,然后嗯pet呢他这一套整个一套的嗯,pass string的体系,以及嗯以及和这个render man,工业界的做出了这个极大的贡献,可以这么说。

你得到了广泛的应用,render man算是第一个这种商用的,这种超强的这种渲染器,当然直到今天仍然得到非常广泛的应用,所以说没有这两个人就没有呃,计算机图形学今天的怎么说呢,算是繁荣吧,没问题。

虽然说科研上这之后再跟大家吐槽吧,对吧没问题,所以说大家可以看到第一位内,computer graphic,这两位made computer graphics great。

我希望若干年之后能有人made computer graphics,great again啊,然后就是这么个意思吧。

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

好简单,给大家说一说重大利好消息啊,然后呢再给大家炫耀一下,这个我思考了一下,到底要不要跟大家说,结果决定还是得跟大家说,因为如果不趁着图灵奖这个多说两句对吧,任性一回,哪有这个机会说这个啊。

我们呢嗯这个图灵奖获得者pet哈尔汗,其实如果论辈分,论这个科研上的辈分,他算是我师爷,为什么呢,因为pat harry had他带了一个博士生,叫做ri ramamoth,也就是我的导师。

然后他这个所以说从这个角度上来说对吧,grand advisor这样说,所以这是这是一方面啊,这个我非常值得炫耀的一件事情啊,我师爷得过这个这个计算机界的诺贝尔奖,对吧,这样想嗯,然后呢。

嗯还有一件事情也炫耀一下,pet的另外一位学生projeep s,他现在是也是在uc sb当这个呃教授,然后很难想象啊,现在在世界范围内很难找到第二所学校,有两位同时做rendering的老师。

这个非常非常困难,所以说这个在uc sb,我们这方面当然是非常强的,这点我毫不否认,然后嗯当然了,这话有广告嫌疑,不过这个事情说明白啊,广告是一方面,另外一方面想加入同性学的研究,可是非常难的。

上完这一门课肯定是不够,这咱们这门课叫入门,对不对,哈哈哈好,没问题,所以说啊这么一说,这个就显得近了很多对吧,而且2014年我见过pad海尔汗,我和他握过手,对不对哦,这个是不是不能说会被封。

对不对啊,无所谓了,就这样了,就说到这儿啊,好哎呀啊,那咱们这个呃他就吹到这儿哈,多说了就不好了啊,行啊,那咱们回到咱们上节课嗯,结束的地方,我们说到这个back to geometry哈。

我们提到说对于这个三角形面什么呀,我们不是说有一系列的处理方法嘛,对不对,对于三角形面上我们有各种各样的操作,我们可以做这个呃三角形面的细分,增加更多的三角形或者简化减少对吧,然后或者是说这个正则化。

然后让这些嗯嗯曲面变得更加呃,并且是三角形面变得更加规则,然后我们分别来看一看啊,这个嗯嗯嗯咱们从什么开始呢,就从这个最基本的这个操作就是三角形,我如何增加它的数量,让整个这个我要表示的曲面更加的光滑。

大家知道如果我用了三角形,数面数量非常少,那变成当年很早期的那种什么,最终幻想七第一代的时候,在ps上的时候,然后人物的头发啊,手啊什么东西全都是三角形,看得非常这个棱角分明这种。

然后当然大家希望用到更多的三角形,然后随着现在的这个显卡的发展啊,三角形的数量,基本上来说不是什么超级大的问题,就是说现在的显卡,基本上可以处理很多的三角形,然后呢嗯这样一来,就是说我们有一个这个模型。

然后我们希望它这个细节更丰富,我们当然可以引入更多的三角形,然后像这里大家看到的,这就好像把一个图像,然后我增大它的分辨率一个道理,但是呢让他这个看上去有更多的细节,这些东西嗯对吧,是这么一个思路。

然后嗯这个第二个操作咱们刚才说了对吧,就是呃网格的简化,嗯,就是说啊如果说我现在有一个网,网格非常非常复杂,而他拿的其实挺远的,我们不需要这么复杂的这个网格,那怎么办呢,那我就用少一点的网格数量。

然后我去掉一些呃这些边啊或者三角形啊,或者什么,但是呢我仍然要维持之间,它们互相之间的连接关系,对比如说我这个去掉了某一些点之后啊,不能让这个牛角的部分,比如这里断掉了对吧,这肯定是不行的。

所以说我们得有一系列的方法去指导,怎么样,我们去做这个细分好吧,呃要简化啊,ok好,那么呃好在呃另外一个话题呢,咱们刚才跟大家说,这三角形呢有可能有大有小,然后也就这个细长这种啊,这种情。

其实会对这个渲染造成很多,各种各样的不变,那么通常应对这种情况,我们会把这个模型呢做一些这个呃,正规化或者正则化,就是让这些呃面变得更好,就看上去更像这个三角形,那正三角形每个三角形啊。

然后这里大家可以看到,其实这个算法做的并不太好,这耳朵这边明显的缺了一块吧,和左边这个相比没错吧,所以说就是在改进这个三角形本身,质量的时候,同时不能丢失这个模型本身的表示质量,就是这么个意思,好吧。

这三种这现在多给大家说一说,说一点,那么咱们从这个细分开始说啊,细分呢自然是一个非常非常重要的操作,然后我们之前什么时候提到的细分呢,我们之前在说这个呃displacement map的时候。

就是位移贴图,说这个的时候提到过这个细分,为什么呢,说我们可以在物体表面上应用一个贴图,这个贴图表示了它的相对的位置移动,对不对,然后像或者说我们定义一个相对的所谓,高度长。

然后我要把这个高度长的这个不同的高度,应用在不同的顶点上,然后我就可以得到一个呃复杂一点的模型,顶点被移动过了的模型,就真正做出一个凹凸的感觉,而不是用凹凸贴图去模拟,没错吧。

然后我们说到我们需要用很多的三角形呃,才能赶上这个纹理本身它的频率,这是对的,所以说我们需要用到很多的三角形,我们需要做细分,我还提到说,我们是有办法可以做动态的细分的,但不管怎么样。

我们是得做一个细分,那么这个细分怎么做,那当然首先第一反应是,这个引入更多的三角形,对不对,那怎么样引入更多的三角形呢,呃这就是我们之后要说的各种各样的算法,当然引入了更多的三角形之后啊。

大家可以看到不只是引入三角形,比如说我可以把这一个三角形,可以拆成很多很多三角形,但是这样的话并不能足以,让这个形状发生改变,我们所说的细分是两个事情,第一分出更多的三角形。

第二让这些三角形的位置发生一点变化,使得我的原来的模型变得更光滑一些,也就是说从这个模型中引入更多三角形,之后,会变成这么个三角呃,这个这个形状,让这形状引入更多的三角形之后,变得更像圆。

是这么一种感觉,好吧,所以其实我们说表面细分是两步操作好,那么这里给大家说清楚,那么以这个所谓loop subdivision为例,就是loop戏份,然后这个细分呢我们刚才说其实两步操作。

第一把三角形数量增多,怎么增多呢,特别对于这个loop细分来说很简单,一个三角形给你一个三角形,你连接它们的这个三条边的中点,是不是就可以做出一个中间的一个三角形,而且这个中间三角形。

把原本三角形又分成了上呃,这个左下和右下这么三个三角形,所以说形成了四个三角形,这么一拆就可以拆成四个,这就是loop subdivision做的这个拆分方法,那行行完成了这个三角形数量增多之后。

怎么办,我们要调整这这些三角形的位置,对不对,那调整三角形的位置,其实就是调整这些顶点的位置,然后特别的对于这个loop细分呢,这大家的做法就是说这个呃,嗯把这个三角形的顶点区分开呃,区分成什么呢。

区分成新的顶点和老的顶点,那什么叫新的顶点,新的顶点就是我,我们在这些bn的中间取了这些点,那原本在原本的这个模型里面不存在对吧,那区分成这么三个新的顶点,那以前旧的顶点或者老的顶点啊,这还在。

然后loop细分,他所说的意思就是说哦,对于这两种不同类型的顶点,我们分来改变他们的位置,让他们有一种不同的规则,来改变他们的位置啊,那这当然是可以的,那么在我们继续进行之前呢,先给大家多说一下啊。

这个图形学中有很多这种,这种不同的命名方法,大家看到这个loop细分,这是什么意思呢,这个这个千万不能理解成是循环细分啊,这个loop和循环没有任何关系,这是为什么呢,这是因为发明这个算法的哥们儿。

他他他的这个family name就叫做loop,所以它叫做loop subdivision,很简单的说法,然后这个和循环什么没有任何关系,大概就说到这儿,然后嗯那我们说啊嗯增加三角形很简单。

我们就这么一连就可以连出四个,那下面就是如何把老的顶点和新的顶点,分别移动它们的位置来调整,让这个模型变得更加光滑,就是这么个意思好,那么大家可以看到这几个例子哈,从左边一个近似于六边形的圆环。

一个螺丝帽这么一个感觉,然后通过细分诶,最后它会这个形成某一种这种形状,引入更多的三角形,就变得越来越光滑,越来越光滑,没问题啊,然后那咱们看一看,如何把这些细分类的三角形,来调整它们的位置对吧。

这就是关键,那么他怎么做的呢,很很简单,有个明确的算法怎么做,我们先看怎么更新这些新的顶点的位置,那新的顶点咱们刚才说了哈,哪些是新的顶点啊,这些边的中间对不对,就是新的顶点,咱们现在看一个。

那就是这个白点,这个白点肯定就是某一个新的顶点,那咱们如何调整它的位置呢,咱们这样想,首先呢这个顶点一定在一条边上,然后这个新的顶点吧,咱们本来就是这么取的嘛,然后呢只要这条边表示的不是物体的边界。

那它一定会被不同的三角形所共享,像这里就是两个三角形共享这么一个白点,我们说的是一般情况啊,有很多特殊情况,边界情况我们就不说了,像这里呢,呃这个点它一定被这两个三角形所共享,我可以找到这两个三角形。

那么找到这两个三角形之后,我们把共享的这条边上面两个顶点叫做ab,然后呢,把这两个三角形这个不共享的这个顶点啊,叫做c和d啊,至于谁是谁没什么关系啊,那么我下面这个loop,细分定义的一个规则是什么呢。

就是呃我要去把这个白点啊,先生成了之后,我现在要把它的位置调整到什么呢,调整到3/8的a加b,a和b的平均位置啊,乘3/8,加上c和d的平均位置乘1/8,至于它为什么是这么回事啊。

这个其实就是一种简单的加权平均,对不对,然后他为什么会取这些直指,当然就是具体的这个这个算法,它是如何设计的,咱们就不说了,我们就说这个算法如何执行,很简单,找到这四个点的位置进行一个加权平均。

大家可以看到他是认为啊,这个a和b通常会离这个白点近一点,所以对这个白点它的这个贡献会大一些,然后c和d呢通常离他远一点,对他的贡献小一点,所以说白点的影响就是受制于这个,a和b更多,c和b更少。

所以听上去挺有道理的对吧,我这么一更新这个白点的位置诶,他就达到了一个让这个呃,这个新出现的白点,能够这个平滑的一个作用,什么叫平滑,咱们之前说过图像上的平滑,对不对,就是取一个窗口求平均,所谓平均。

这种操作就可以让这个面也变得平滑,没有问题,好吧,就是这个点的值是什么,可以这么理解,是它周围几个值的平均,那当然就会让整个面变得平滑好,这是对新的顶点,那对于旧的顶点怎么操作呢。

大家可以看到这个公式非常非常的复杂,然而呢非常好理解什么呢,首先啊呃我们先确定一点,他是对这个旧的顶点如何做位置的,更新那旧的顶点咱们可以看到啊,比如说像这里,大家可以看到这有六个三角形对吧。

六个三角形对在一块儿,这个顶点它连了六个三角形,中间,这些虚线的表示的,就是这个我们拆出来这个新的顶点,新的三角形,那么咱们不看它,咱们就只看这个老的这个这个顶点,那么这里呢呃为了更新他们的这个。

这个这个老的顶点啊,它的位置,那肯定大家想,肯定要跟这个周围的这这这这些点有关系,对不对,然后呢呃跟周围的这些点有关系,所以肯定周围的这些这些,它所相邻的这些呃原本的老的顶点啊,肯定都会有所贡献。

那这这里呢这个loop细分,它提供了一个这个新的规则,就是说啊他一部分他去相信这个呃,周围的这些相邻的这些老的顶点,他们的平均值,另外一部分他也会愿意相信自己,就是说他这个自己本身,它也是个老的顶点啊。

我不能完全就听周围的这几个顶点使唤,对不是这么这么一个意思,就是说啊,他这个一部分情况下保留自己的这个位置,这么一个属性,另一部分情况受其他的影响,怎么影响,那咱们现在定义几个事情。

第一呢我们定义一个and就这样一个数,这个数很简单,什么呢,就这个顶点的度,这个我不知道大家学过图论没有啊,就是说学数据结构,学这些东西肯定都会接触到对吧,什么是顶点的度,很简单。

就这个顶点连接的这些边的数量,那么在这里再清楚不过了,这个点连了六条边,那么这个顶点的度就叫六,就是n等于六好吧,然后呢,这里再定义一个这个另外一个数叫做u,这个u是什么意思呢。

就是说考虑到这个顶点的度呃,跟这个度有关系的一个数,就是仅仅仅是这么一个数而已,好吧,那他们最后这两个这两个概念在一块儿啊,我要如何去应用来更新这个旧的顶点,这个白点的位置呢,那大家看啊。

我们刚才说思路是这样的,一方面,这个白点他要相信自己原本所表示的,这么一个位置,另一呃就这个位置就是original position啊,另外一点这个白点呢,他还愿意去相信周围的它这些邻居。

它所相邻的这些老的顶点,他们的位置的平均好吧,然后就是说他可以相信这个自己,也可以相信周围的顶点的平均,那么这个中间我怎么样通过加权的方式,把这两个两个,这个相近的程度给合在一块儿呢。

那我就用这个一减n乘以u,来这个对他当前的这个顶点的位置,进行加群,用这个u去对这个周围的这些呃,邻居的这个位置之和或者位置平均吧,进行一个加权,然后那咱们看一看这个加权说明了什么哈。

呃我们可以看到说这个呃如果这个顶点啊,这个n咱们就单对这个n来说,如果一个顶点它连了很多不同的三角形,比如说连了20个三角形,那就说明了它其实就完全可以,这个由周围的20个三角形来决定。

这个各种各样的信息来更新他自己,那也就是说这一个点自己就不太重要了,他连了很多别人的三角形嘛,对吧,这样这个意思,然后如果这个点它只连了都两个三角形哦,那就说明这个顶点非常重要。

然后这个顶点呢这个如果我要更新它的话,那我可能更多要相信他自己,那这个说明的这个呃这个更新的这个规矩,就是这么回事,就这么定下来了,很简单的一个一个道理啊,然后嗯所以行没问题。

就是说这就是说这个loop细分,如何去更新这个老的顶点,好啊,那现在这个基本问题就已经解决了,对不对,大家想一想啊,陆夫细分先产生很多新的顶点,然后这些这些新的顶点呢,这个得到一部分的这个这个更新方法。

很简单更新,然后以前的老的顶点呢,根据这种方式也更新他们的位置,那么这么更新一下,我们就可以得到一个这个所谓路途细分,得到的结果,那就是一个三角形拆成四个,比如说大家看这个三角形啊。

这个在这个人太阳穴上的这个三角形,这里对应大概就是被拆成大概是这个啊,可以看到确实是拆成了这么呃这么一个诶,四个三角形的一个形状,但是呢这些顶点的位置,都经过了一些细微调整。

比如说原本这个左边这条边它就是贡献了,现在它显然这个点就移除了这个平面,一点点对吧,能看出来这么一点,这样的话就能让整个模型得到一个光滑,所以说啊再次印证这么一个事情,就是说loop细分做两个事。

第一先细分,第二再调整没问题,那再做一次,再做一次就会形成这个情况,那当然是就越来越密,然后最后得到这个越来越这个,这个呃光滑的结果没问题好吧,那loop细分大概就是这么个意思。

那咱们现在呢给大家介绍另外一种细分方,法,大家可以看我专门这个highlight了一下啊,呃co clark subdivision,大家还有印象的话,ed cmo今年的这个图灵奖得主之一。

然后这应该是他的一个,非常非常这个广为人知的一个呃操作啊,然后什么意思呢,就是说他和这个另外一个clark,他们两人发明了一个这个网格的细分方式,然后我们这里为什么要提这个事情呢。

我们不是有loop subdivision吗,对不对啊,事实上是这么回事,我们刚才教的这个loop细分啊,我们既然说一个三角形,拆成四个三角形对吧,那也就意味着我先假设这些面是这个。

表示这个物体的网格就是三角形网格,那我才能用loop细分来做,如果它不是三角形网格,像现在大家看到这个网格有四边形,有三角形,有这种,就是说对于一般的情况,这种cma clark的细分。

就可以把这个网格细分的非常好行吧,然后这是什么意思呢,咱们看一看啊,就是说啊嗯我们先看这么一个网格,我们定义一些这个概念很简单,我们定义这个cold face,也就是四边形面,我们还可以定义呃。

non quad face,也就是非四边形面,那非四边形,那当然只要不是四边,那它的都不是这个四边形,那比如说这里两个三角形的面,它就叫做非四边形面啊,这好理解啊,这个定义。

那咱们再定义另外一个概念叫奇异点,叫extraordinary vertex,所谓奇异点是什么意思呢,很简单,它的定义也是极其的明确度,不为色的点都叫奇异点,好,那是那这个do啊。

刚才咱们才给大家说do是什么意思啊,一个顶点和它相连的边数就叫do,比如说咱们看这个点,我现在鼠标所在的这个点,他连的自然是四条边上下左右,所以它的度是四,它的度是四,所以这个点不是齐一点。

那咱们看这个点,这个点呢他连了五条边,上下左右还有一条斜着对吧,连了五条边,所以这条这个点的度是五五,不是四,所以说这个点就是七一点,那它是奇异点,那同样道理,这个点也是奇异点好。

那我们现在定义这两个概念,定义这两个概念其实挺简单的,这个这个判别方式啊,那么我们用这两个概念之后,就可以这个对这个cal clark,他们这种细分方式做一个分析,那咱们来看啊,呃这是怎么做细分呢。

我们想一想啊,首先我肯定得引入更多的这个点,或者说边对吧,然后我再调整它们的位置,那么我们现在来说怎么样引入不同的点,很简单很简单,怎么做呢,每一条边我都取它的终点,每一个面我也取它的这个中间的一个点。

并且我把边上的这些中点,和这个面上的终点都连起来就可以了,呃这是什么意思呢,咱们看这个例子啊,比如说大家刚才看到这是个三角形,对不对,这是三角形,然后三角形有三条边,123哎,我都取这三三个点。

这三个点三条边的中点,然后这个面呢我也中间取一个点,可以是它的重击,可以是其他什么点,反正之后要调整位置啊,就是说这里先取一个点,然后那我把这个边上的点和面,中心的点都连起来。

那大家看左上角原本这是一个四边形啊,这是一个四边形,然后这里呢在这点上,这四个这个边上的中点,并且在四边形中间取一个点,和这个边上的中点都连起来啊,那这部分操作其实挺好理解的,没问题啊。

经过了这部分操作之后,这个网格自然而然就便秘了对吧,那么现在是这样,就是说大家看到这里,其实已经调整了位置的这个网格哈,咱们先忽略这个概念,就是说关于连接关系,我们先把这个建立起来。

这样就增加了更多的网格呃,或者说顶点,然后我们要调整它的位置,但是呢在这个调整位置之前,我们可以用刚才定义的这些非四边形面,和这个奇异点的概念,来分析一下这个所谓cmclark细分。

它有一个什么样的性质啊,那么现在我们问这些问题啊,经过了一次细分之后,现在还有多少个奇异点呢,大家可以看到啊,之前我们定义七一点度不是四啊,呃这个就都叫奇异点,那么原本说哦,我发现这些格子上的点。

全部还都是非齐一点,然后这两个原本的度为五的,奇异点还是齐一点,现在度还是五,那我发现啊,我引入的新的这两个点,他们在三角形中间点上的这个点,由于它要和三条边相连对吧,所以他们两个的度都是三。

所以这就造成了,说我会引入两个新的奇异点,所以现在会变成总共有四个奇异点,其中两个奇异点是原本的奇异点没动,另外两个奇异点是因为我去划分了三角形,造成的奇异点,没错吧,好我们可以回答这个问题。

现在有四个奇异点,那么现在奇一点的度都是多少呢,那我们刚才已经分析了,原本都是五,现在还是都是五,然后现在这个这个点的度啊,呃这些新的奇异点的度是多少呢,我们刚才自然而然说三。

因为它要和三角形的三条边相连,对不对,那也就是说大家会发现这么一个问,题,什么时候是起一点,只要我在一个非四边形面内,点上这么一个点,由于我要和它的每一条边都相连,所以形成的这个点一定是齐一点。

否则的话它和四条边相连,那它的度就是四对吧,然后只要它这个原本的这个面,比如说这里是三角形,它不是个四边形面,那么我一定会在它中间点出一个奇异点来,诶,那这个我发现了。

它和之前的这个非四边形面的数量有关系,对吧,那么这个这里再多问一句,现在经过了一次细分之后,还有多少个非四边形面呢,大家会从这张图上一数发现诶,四边形面全部都消失了,因为现在所有的面都是四边形。

比如说原本三角形内那拆成了一个四边形,然后两个四边形,然后当然左下这是第三个层次的四边形,哎也就是说我经过一次细分之后,所有的非四边形面都消失了,我们再多说一句,也就是说所有的非四边形面。

其实引入了这个每一个非四边形面,都会引入一个奇异点,并且他们在引入奇异点之后,这些非四边形面都会消失,就好像是说这些非四边形面,在一次cma clark细分之后,都变成了嗯一个奇异点对吧。

就是这么一个意思,所以说我们这个呃chema clark细分,它有一个这么一个性质,就是说在你细分之前,如果你有多少个这个呃非四边形面,在一次细分之后都会变成一个奇异点,相当于是增加奇异点的数。

但是如果我们再继续做下去的话,大家会发现这经过一次操作了之后,就已经不再有非四边形面了,这就告诉我们,以后提一点数就不可能再增加了,这也就告诉我们说,cat a clark细分在做第一次的时候。

增加了非四边形面数,这么多个的奇异点之后再也不会增加,比如说我们再做一次细分,大家会看到这里仍然还是四个奇异点,因为在第一次细分之后,就已经不可能再有c4 边形面了,唉所以它有这么一个性质好吧。

然后这是一个这个这个有趣的事情啊,然后大家会看到在细分的过程中,然后这些点都会发生一些位置上的变化,对吧,那么同样道理啊,这之后这个再继续细分,然后位置上再发生一些变化,就会变得越来越光滑,没有问题。

那么呃这些这些顶点啊,涉及到一些新的点啊,然后这些老的点啊,在边上的点啊,在这个面里面的点啊,他应该如何去更新,这里呢其实是有公式的,但这里这个我说清楚,就是这里的课程上。

我们肯定不做要求给大家这个这个写出来,如果大家有兴趣的话,自己写着玩是可以的啊,然后就是说嗯cma clark,现在我们已经知道,如何去增加新的变数和边和点了,我们现在就要调整它怎么调,很简单。

它呢是把这些点区分成三类,第一就是说你的新的点嗯,这个是点在这个面中间的这个新的点,就是现在咱们看到这个f,他这种应该如何更新,然后它的更新方法很简单,然后第二类,他认为这些这些在编的中心的这些点。

咱们不是说把一个面的这个中心,和这边的中心都连起来吗,边的中心也产生新的点啊,所以编的中心,它有另外一种方式来更新他们的位置好吧,然后这也就是说新的顶点啊,他考虑的更细,它考虑成了两部分。

这个这个边上的点和这个面上的点,然后呢这个呃他以前的这些老的点对吧,叫叫叫这个啊,old的vertex这种对吧,然后它应该如何得到更新呢,那他就是用它周围的呃,相邻的这些面的。

这面中心的点和这边中心的点,以及和他自己的位置在一块儿,在做一个某种平均的这种更新方式,所以大家可以看到啊,虽然来说它这个定义就看上去很复杂,其实无非就是说我这个呃,只产生了一些新的点之后。

然后新的点我定义一系列的规则,让他去求,而让他去成为这些以前的哪些点呢,平均基本上就是在做这么一个意思,所以本质上来说和图像的这个模糊操作啊,别的什么东西没有什么这个重大区别啊。

然后基本上来说通过平均的方式,得以让这个整个一个平面呃,这个局部都会得到平滑,所以整个平面就会变得平滑,没问题啊,所以啊cdm clark呢这种方式,然后它可以产生各种各样不同的,这个呃这个细分的结果。

然后我们再回到刚才说,我们为什么要说cao club细分呢,是因为loop细分只能用作三角形面,而cal clark细分,是可以用作各种不同的面的,比如说像这里,大家看到这个下面这一行。

它这个很显然就是四边形面进行细分,而且大家看得清楚,比如说这一个面啊,细分了之后呃,正常这个应该是中间点,一个点和四边都连接,连接了之后,它会更新它的位置,像这些点,大家可以看到上面这个这个四边形。

就会变得越来越圆,然后一直这么做下去,它会收敛到一个看起来很平滑的一个结构,好吧,就是这么一个意思好嗯,然后呢当然了,有一些这个嗯,模型上面它会有各种各样的缝呃,或者说这种不连续的地方,比如说像这里。

这里有一个明显的这些这个这个变化,不是里面是往这个方向,外面往这个方向对吧,然后这个跟之前的这个模型是有关系的,而且这一块是有明确的理论分析,是可以做出来的,就是说会在哪些地方形成风。

然后这个呃最后收敛了之后,它的结果会怎么样,就经过无数次的细分啊,这种会得到一个什么样的结果,这些也是这,大家就嗯在这个方面进行了一些,这个科研的内容好吧,那嗯到这儿就应该差不多。

这涉及到曲面细分就已经说明白了,现在呢给大家放个这这个动画,这个动画呢是嗯早期的呃,这个皮克斯做的这一个这一个简单的动画,这个动画呢大家认为这是呃最早的,如果不是最早的一个,就是最早的一批吧。

应用呃应用曲面细分技术做了一个动画,当然大家可以看到这个图形啊,跟现在的这些比如冰雪奇缘二什么的,完全没有办法比对吧,但是其实挺不错的对吧,然后呢,嗯就是pika呢,一直是做了很多这种很小的一些短片啊。

最近这也有各种各样新的,我记得前2年还有一个叫做pepper的一个短片,做的是一个水鸟啊,然后这个也就地上有沙子呀,做的是各种栩栩如生的,这个效果哈,然后嗯皮克萨直到今天。

一直是算是能够引领这个业界技术的,这个公司就非常厉害啊,然后这个动画的名字呢叫做gary’s game好吧,然后大家可以看到这是这是gary啊,gary他在自己跟自己下棋。

然后啊而且一个有着双重人格的典韦,然后正常情况下呢,这个呃,好吧,就是大家能够看到的是这个gy’s game,这么一个短片,然后我看到的是什么呢,嘿嘿嘿诶,我看到的其实是呃,这个这个这个动画应该叫做。

reinforcement learnings game,哈哈哈呃好吧,这个可不就是这个现今的这个,可不就是这么做的吧,自己跟自己下棋同,从而提升自己的这个水平对吧,嘿嘿嘿嘿。

或者说我们管它叫alpha goose game,嗯,嗯呵呵呵呵,哎行吧,总之是挺有意思的一个这个短片啊,在这里呢不给大家放到最后,大家至于结局是什么呢,大家自己去找吧好吧,然后a就到这儿好。

那咱们说到这儿啊,这嗯可以啊,那咱们嗯继续进行下一个话题,嗯现在我们给大家说这个曲面的简化,当然是一个很重要的操作,对不对,然后呃曲面简化大家还记得啊,就是说我要减少三角形的数量,有一些三角形太多了。

然后我想少一点,提高一下这个程序的性能,那么大家看这么两个例子哈,左边这个骷髅,然后他用了3万个三角形来表示它哦,当然了,大家可以从着色的上面来看,大家可以看到。

这里着色用的是flat shading啊,就是说虽然他用了3万个三角形,flat shading,还是会给你看到这一块一块的效果,如果大家用逢时点,肯定能够效果做得更好,然后呢。

呃这里再回到这个面的这个概念上面来,那么3万个三角形效果挺好的,然后嗯把它简化成3000个三角形之后,就说啊我用3000个三角形,其实来说表示的效果还不错,那如果大家仔细看这个鼻子上面啊,这个地方多少。

这个连接会稍微那个一点差一点,然后其他很多地方都可以看出来,比如说这个牙齿,这个牙齿这个在这个牙龈内部,这块就没有之前表现得好对吧,然后就是说啊,3000个三角形,大概能够表示他们这这么一个呃呃样子吧。

就这么说,然后如果我用300个三角形,那他就会发现哎这下这个差的挺多了,但是呃我说句实话,这个这个整体上来说,它表示的是个什么,我还能看得清楚对吧,是这么个意思,所以还是不错的。

那如果咱们用30个三角形,那就肯定是什么也表示不出来了对吧,所以呢这就说明什么呢,这就说明说,我当然是希望用更多的三角形来表示,这个几何物体对吧,人们当然希望用更多的三角形,但是这个呃有一些情况下呢。

如果说我这个游戏我为了提升它的性能,然后不希望它这个呃顶点太多,然后顶点多了,那么一方面这个变化呃,这个顶点的变换要花时间,另一方面着色要花时间,很多东西都会都需要花时间对吧,然后负担不起。

特别是在移动移动端的这些计算上,然后这是一方面,就是说我们有时候不得不去用这个,简化的模型,这是一第二,其实啊其实来说在什么场合下,用什么复杂程度的模型,其实有讲究的,一个最简单的例子。

就是我刚才其实提到这个事情,对于这个骷髅来说对吧,他这个这个嗯叫什么来着,我们现在看着它挺大的,是因为他在离我们挺近,那如果我们想象说对于这个货罗来说,我们呃这个仍然是用这么多个三角形。

但我们离很远很远去观察它对吧,很远去观察它的话,那我根本不需要,我去把这么细节的东西给建模出来嘛,比如说这里我就觉得3000个三角形,几乎和三个三角形我无法区别,然后呢,我觉得300个三角形之间。

离近了看效果挺惨的,但是离远了看它挺小的时候,效果还不错对吧,除了李涯这个缺失,这个有点厉害啊,就是说嗯就是说啊,这个取决于说我们在不同的情况下,会选用不同复杂程度的呃这种几何模型。

其实这是一个很好的做法对吧,比如说物体离得远的时候,用这种呃三三百个,然后离得稍微近一点,我用3000个,离了再近一点,我有3万个,但是这个事情呢嗯和两个事情有关吧。

第一和我们之前所说的mmap是很有关系的,对吧,所谓mile map就是给了我们一种这个图像,它所谓的层次结构,那如果东西这个一个像素离我们挺远,它覆盖了一个很大的这个纹理上区域诶。

那我自然而然用用这个呃mp map,也就是说平均一个更大的位置,那就够了,我根本不需要去把这个整个每个,这个最底层,最最细层的这些像素都平均出来对吧,这是这个这在这个意义上来说,几何,这嗯。

所谓层次结构的几何和层次结构的图像嗯,在这个意义上是差不多的,但是在另外一个方面上来说嗯,几何的层次结构是很难做的,特别是说涉及到这个几何呃,不同类型的几何之间的这个相互相互,怎么说呢。

变化咱们就比如说我说离近了,我用3万个,离远了用3000个,那我在什么时候做一个切换,那我切换的时候,会不会大家能够看到有一个这个,这个很明显的这种变化对吧,那这个我就不希望别人能看到。

我希望它有一个平滑的过渡,那这过渡要怎么做啊,从一个几何形状到一个几何形状,我们又没有三星性,三线性差值这么些东西对吧,所以说呢这块儿其实是一个这个目前来说,仍然在图形学界这个造成困扰的一个问题。

作为几何的层次结构不好做啊,好那么这里呢就简单把这个概念和mp map,咱们联系起来,知道有这么回事就可以了,然后呢也就是说我们做网格简化,绝对不只是说我们因为计算能力上的妥协。

有一些情况下确实是没有必要用到,这个非常复杂的模型的,好吧好,那没问题呃,这个概念说明白,下一步就是怎么样去计算它对吧,怎么样做网格的简化,那这个首先大家想肯定是不能直接,比如删掉为三角形。

我删掉的三角形可不是这个物体上留下来,各种动物嘛对吧,这肯定是不行的,那怎么做呢,这里给大家提供一种方法啊,这里说清楚某一种方法,这里给大家说的叫做边坍缩,就叫做edge collapse好吧。

然后嗯这个edge collapse的意思很简单,比如说你找到一条边对吧,一条边连着两个顶点对吧,把这两个顶点往容易捏给捏成一个点好嗯,这条边就不再存在了,对不对,那这个操作就叫做边探索。

然后很简单的这个道理哈,那么嗯这个边摊错在实际的做法中间啊,却没有那么容易,然后呃比如说什么呢,比如说我要探索哪些点对吧,就是这个意思就是哪些边算是重要的,我不应该把它捏在一块,哪些边不重要。

我可以把它捏在一块儿啊,这个问题我们靠什么来回答,就是这里要给大家提到的,叫做qugic arrometrics,就是二次误差度量,所谓二次误差不是说做两次啊,而是指一个平方这么一个意思。

那么怎么理解这个概念呢,大家可以看左下角这幅图,左下角支付都算是一个一维的简化情况啊,咱们认为好,如果我有一个这个原本的这个形状呃,四条线段,五个顶点连起来,那么我现在把它简化成这个中间三个顶点。

我都不要了,我就留一个好吧,我我留一个顶点,这个顶点我应该把它放在哪儿,我应该把它放在哪儿,才能保证说,我这个这个蓝色的这个三角形啊,这个网格的蓝色三角形,和原本的这个灰色的这么一个多边形。

基本保持它们轮廓形状的一致对吧,这是个好问题,那怎么做呢,那很简单,大家第一反应先做个平均试试,那这个点和这五个点都有关系,那咱们求五个点平均放这儿,放这儿,大家会发现原本这个面挺鼓的嘛,凸出来的。

然后现在变得非常平,然后那肯定就不对,那也有同学说好吧,那这个点其实是用来代替上面三个点,那三个点球平均好不好呢,那么球会放在这回,放在这儿呢,我会发现无论如何啊,这个蓝色三角形还是会比这个呃。

这个原本的多边形,这个要小对吧,就比他小了一圈,那肯定是大家不喜欢,那怎么办,那么人们就发现了一个新的这个办法呃,引入一种误差的度量,就叫做这个二次误差度量,什么意思呢,我希望这个找这个点。

我希望把这个点放在某个位置上,可以最小化二次误差,什么叫二次误差呢,所谓二次误差很简单,二次误差和这个我们所说的l two,距离非常非常相似,什么意思呢,这个点和原本的这几个的边呃都有关系的。

和几原本几个面啊,这算是退化的一维情况呃,这一个新的顶点和原本几个面都有关系,那么我现在就要求这个点,到原本的这么几个面,它们的距离的平方和好吧,然后我希望把这个点放置在一个位置。

使得这个点到和它相关联的,面的距离的平方和达到最小,所以大家听这个过程就非常非常,这个这个清晰的一个呃什么呢,一个优化过程对吧,优化过程我想我不是不知道这个点在哪吗,行没问题,我去优化它的位置。

我找一个最优的位置,使得这个点到其他这个原本的,它所连接的各个面呃的平方和距离最小,呃对吧,那么这里就是它的这个二次误差,的这么一个度量,很简单吧对吧好啊,那么呃我们刚才说啊。

就是说这个呃回到这个这个事情上来,有了这个二次误差对吧,我们我们要算这个呃,我们要去如何坍缩这些编,这是现在一个重要的一个一个事情,那说说明什么呢,说明如果我有一条边,我要是把它给坍缩了之后对吧。

我会变成一个点,我可以移动这个这个点的位置,使得这个坍缩对这个面对原本的这些面啊,造成的影响最小,也就是说我坍缩任意一条边之后,我形成的那一个顶点,我都可以把它放在一个最优的位置。

求出一个最小的二次度量误差,那么现在我可以这么做,怎么做呢,我对于整个一个模型有那么多条边,我都假设假设我如果坍缩这条边,并且我把这个坍缩了之后的点,放在一个最佳的位置上呃。

会得到一个多大的二次度量误差,也就是说每一条变我都可以假设,如果我坍缩它都会有多大的误差,那么现在自然而然,大家立刻就可以想到一个算法了,对不对,说我对于一个模型我想简化它。

我可以通过边坍缩的方式来探索,我探索谁,那我肯定减这个呃,二次度量误差最低的,最小的边开始探索对吧,我从最小的开始,然后我再探索第二小的,再探索第三条,哎,对,然后如果我们可以把这个过程也给做出来。

那就不错,那自然而然就造成了一个这个,我们的一个这个核心算法,那就是这么做,就是说我们如何去选呃,不同的边那很简单,我就先把每一条边都打上一个分数,这个分数就是它的二次度量误差有大有小,我们从小的开始。

然后一个一个的来做探索对吧,再简单不过,但是这里面有若干问题哈,一个是大家如果回到刚才这一页来看,如果我探索一条边呃,很简单的事情,可是坍缩了一条边之后呢,有一些边要跟着这条边变化,比如说大家看这条边。

这条边原本接近数值的,现在变成几乎是平等了对吧,然后其他的这些边,只要原本跟这些边的这些顶点相连的,这些边啊都会受到影响,那这些边发生了变化,那这些边是不是他们的24度量误差,也得重新算了,可不是嘛。

对不对,就是说啊我坍缩了一条边之后,会影响其他边的24度量误差,那这个问题其实就就造成了一定困扰啊,如果说我把之前所有的边,它的二次重量误差算出来之后排个序,我从小到大来取就行了,现在发现不行。

我从小到大取的时候啊,我会引起其他边的一些变化,那怎么办,那现在咱们想一想,我们现在要做这么一个操作,第一我要从一堆这个啊,二次度量误差或者一堆边中间啊,选二次多量误差最小的一个,也就是说取最小操作。

第二当我取完最小之后,我要对它所影响的这些边,它的二次度量误差做更新,也就是说得有某一种数据结构能够保证,我可以取到最小值,瞬间取o1 ,对不对,取最小值,我又可以动态的以最小的代价去更新。

其他的这些受影响的这些嗯这些元素,那么大家想这已经说的很明了了,对不对,大家如果上过这个算法与数据结构呢,大家就知道,这个时候我需要用到的数据结构,就叫做优先队列,或者是对这两个概念是一模一样的好吧。

然后这是什么意思呢,就是说允许你求最小,并且允许你动态更新任何一个点的值好,那么这就是我们要的这个结果了,就是我每次取最小更新了这个呃,其他他受影响的这些编,他们的二次动员误差之后再取最小再更新,嗯。

这个受影响的再去对焦,这么来做对吧好,那没问题,这就是一个很简单的堆结构,这是第一个问题,第二个问题是,其实啊我们这么做到底对不对对吧,我希望找到的其实是一个这个在全局上。

能够表示说这个原本的这个这个物体啊,它整个轮廓的一种简化表示,任意一个位置,一条边附近,我都找他的,这个相当于一个最优的做法,也就相当于我们在不断地通过,对局部做最优解的方式,试图找到一个全局的最优解。

这种方式其实是一个典型的贪心算法对吧,这并不是一个,这个这个能够保证有这个,全局的最最优性质的这么一个做法,然后呃当然了,对于实际的物体来说啊,就是说人们为什么会用这个方法,实际上物体来说。

你很难构造一些这个超级复杂的这些,这些呃场景,使得说我一定会证明说我这个贪心算法,它这个呃就是和嗯就是最优,实际上的最优解相去甚远,这种啊就正常情况下大家都认为说啊,我们这么做其实效果就挺不错的。

那就这么做吧,然后这就是目前大家如何去应用,这个二次度量误差,很简单吧,就是每一条边自己会有一个,然后然后呃,我们只用这个动态的把它组织起来,就可以了,好那么到此为止啊,这块呃理论部分差不多就说明白了。

然后呢咱们看一看这个实际的操作,大家可以看到,对于上面这个这个实际的奶牛模型啊,然后呃如果我们去一条变一条边坍缩,然后我们可以得到一个哎,越来越简化的模型,到了最后最后即便只有64个三角形。

它还在试图很努力的去保留,他的这个嗯这些嗯嗯很复杂的这些性质啊,这些腿啊,尾巴尾巴好像已经丢了啊,腿还是多少,剩1。248,这个地方尾巴就已经不太好了对吧,然后对于咱们这个作业里面这个小奶牛啊。

这效果还是不错的对吧,然后这里用多少三角形,我不记得了,但是大家可以看到一个事情什么呢,就是说简单的地方,就是这个牛的脸的部分啊,那他当然就会这个坍缩的边多一些对吧,因为那些边他肯定246点误差小。

然后探测多一些,会形成这个大的这个三角形,然后对于一些复杂的地方,比如说脖子这个地方,这些地方仍然是相对复杂,像这块这底下对吧,然后所以说呃这么一种二次量误差诶,很有意义的啊,所以说就是这么回事好。

那么呃这里就是就是这个啊,简化这么一个操作好吧。

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

然后我再给大家看一看这个这是什么呢,这是一个这是这是我当年我是学生的时候,我写的作业啊作业,然后当时做了一个,当时做了一个简单的open gl,做的这个gi,然后呢支持这个放大缩小啊,然后简化。

其实刚才最重要,就是刚才那个拖动这个轴哦,大家可以看到我这个简化,还支持一个叫做gel mouth的操作,也就是说在不同的这个简化的这个层次上,它可以得到一个平滑的过渡好吧,然后当然这个嗯。

视频里面有各种各样费操作,比如说给他展示怎么样商业移动这些东西,但其实就是说这个网格啊,咱们回到这个最早啊行,然后大家可以看到当时网格超级细,然后我通过这个简化简化到这么细数。

然后还可以达到一个相对不错的效果,好吧嗯大概就是呃这么回事。

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

给大家演示一下,这个是一个非常不错的东西,好那么咱们下一个话题啊,几何这块说的差不多了,然后咱们下一个话题,我希望这个说一说呃,之前咱们遗漏的一个话题,就是说啊,我们在光栅画里面是是是怎么生成阴影的。

哎大家会说,我这个怎么这瞬间切换到这么一个话题哈,是这么这么个意思,就是说啊几何部分基本上来说,咱们重要内容差不多涵盖到了,然后这次的作业呢,呃这个原本说我在想给大家做一个作业,就做。

比如说这个loop细分呢,但是一想这个loop细分,其实你最后要保持这个整个面拓扑结构,不太好写,所以这里就没给大家布置这个作业哈,大家把这个理论上理解清楚,就是说呃增加点调整点。

把这些步骤了解清楚就可以了,没什么问题,那么咱们下一个环节要说的就是光线追踪,那么为了说明光线追踪这块,我们为什么要用光线追踪,咱们从这个作为例子出发,我们把这个嗯,光栅画里面遇到的一些困难问题。

所谓一切涉及到这种全局的,光线传输的问题,这个都是光栅化不太好做的一个事情,那虽然不太好做,但是人们还是发明了时候,我在光栅化的情况下,如何去把阴影做出来好吧,那么呃这就是说。

我们这个这个整个一个这个逻辑性,是这么个意思啊,那么呃我们现在就来看这个阴影这一块,然后现在我已经预感到什么保不准诶,那这个无论如何讲到这个呃光线追踪嗯,嗯动机之前好吧,嗯那行,那咱们呃我就安稳说了哈。

就是说啊我们之前提到光栅画的时候,特别提到着色的时候,我们说着色是一种局部的现象,我就只考虑着色点,自己考虑光源,考虑我的摄像机对吧,然后嗯我要想算出它的着色,我完全不考虑其他物体。

甚至这个物体的其他部分,对这个着色点的影响,而事实上来说不对对吧,point和光源之间,那它就会挡住光,这个光线光线就到达不了你的shing point,自然算出来结果就应该是黑的对吧。

这就是为什么会有阴影,那我们之前所说着色解决不了阴影,现在我们就来解决这个问题,那然后呢我们限制在光栅画里面,那么人们发明了解决这个阴影问题的方法,就叫做shadow mapping。

有人管它叫阴影映射,有人管它叫做阴影图,都挺别扭的,咱们就管它叫shadow map好吧,然后呢呃这个它对应的结构叫做shadow map,然后咱们之后再再再慢慢说,那么先看这个例子。

这个例子呢是这个2018年的呃,算是第一批支持这个呃,实时光线追踪的游戏啊之一嗯,叫做古墓丽影暗影,然后这里呢给大家截了这张图嗯,这个其实是是rtx off哈,也就是说不是光线追踪生成的阴影,这里是嗯。

这里是就相当于是在光栅画里面,经典的方法生成的阴影,然后大家可以看到这个阴影呢,能够很明显的把这个人的位置感,给渲染出来,就是说如果你不渲染阴影的话,你会感觉有很多情况下,觉得东西都浮在空中啊。

这种东西是因为人们长久以来,这个这个对这个阴影,形成的这么一个认识啊,就是阴影能够给大家一些物体和物体接触,这么一个感觉好吧。

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

然后呢那我们回到技术问题上来,那怎么做这个这个shadow map对吧,首先呢我们提到shadow mapping,它本质上是一种这个图像空间的做法,所谓图像空间是什么意思,也就是说啊。

这里只要我用了shadow map,在生成阴影的这一步呃,我是不需要知道这个场景的几何信息的,那么这个是怎么理解呢,就是说我们马上再给大家说这个,具体过程好吧。

然后呢呃这个shadow map问题有自己的问题,就是说它会产生走样现象,这个在即便是当今的游戏,我们都可以很明显的看得到,这个阴影是会有怎样现象的,然后咱们之后也在给大家说。

那么这里先从最重要的地方开始,这个所谓shadow mapping,它的最重要的一个思想是什么,就是咱们先不说他怎么做的,最重要的思想就是说如果有的点,他不在阴影里啊,我们说的是点不在阴影里啊。

如果点不在阴影里,你又能看到这个点,那说明什么呢,说明你可以从摄像机看到这个点,并且光源也可以看到这个点,没问题吧,这样的话才是这个点不在阴影里,如果这个点在阴影里面,那就说明你看得到这个点。

但是这个光看不到这个点,没错吧,然后然后这就是这个阴影图,它的这个所谓这个shadow mapping,这个技术最重要的一个观察到的现象,就是说利用这种现象,我们就会把阴影做出来。

就是说啊这里大家可以看到呃,我说能够背呃这个光源所看到,也可以被这个相机所看到,那咱们就从这两点出发开始说这个过程,在这之前我们提一个事情,就是shadow mapping。

就是说经典的shadow mapping啊,就是说只能处理点光源,我们把这个事情说清楚,现在给大家介绍的就是,如何处理一个点光源投射下来的呃,阴影或者说方向光源没有问题,这种阴影呢。

通常都会有这个非常非常明显的,这个阴影的边界说明什么呢,要么呃这一点就不在阴影里,就是一个非零即一的过程啊,这种阴影我们管它叫硬阴影,然后我们之后呢,自然对应有一个叫软阴影的概念。

咱们之后再给大家说好吧,那咱们从这个概念开始,点光源下如何生成这个阴影,那咱们开始那么一开始要说的事情呢,就是说我们既然提到这些点,是能不能被光源,或者说你的相机所看到对吧。

那我们自然得想办法过去看一眼,就是这么一个意思,那么自然而然,因为所谓shadow map他就做了这么两步操作,第一他先从光源看向这个场景,就是说啊比如说有一个点光源在这儿。

然后我现在就虚拟的放了一个摄像机在这,然后对准整个场景,然后我可以做一遍光栅画,没问题吧,我就可以得到这个呃光源会看到什么,那这里大家可以看到啊,我看到了什么呢,从这个光源出发,假设呃这里有一个摄像机。

我看向这个场景,然后我可以看到各个不同的位置,比如说我往这个方向看的时候,我应该能看到这个点,但我肯定看不到这个点,因为下面这个点呢,没问题吧,我们知道怎么样做这个深度测试对吧,z buffer对吧。

然后呃这样的话呢,我就从呃这个光源,找到了一堆他所能看到的点,并且生成了一幅图,这个这个光源可以看到的图,而这个图呢我们不要做着色,我们做什么,我们把这个不同位置,他所看到的点对应的深度记下来,好吧。

就这么做,第一第一步操作从光源看向场景,记录你看到的任何点,它的深度是多少啊,也就相当于我只需要它的深度图好,这是第一步,那么呃这个第二步怎么做呢,第二步,我从这个我真正这个的这个嗯眼睛。

或者说摄像机从这个出发,再次看向这个场景,再次看向这个场景,然后呢我会看到另外一些东西,比如说像这里大家可以看到这个呃,这个眼睛呢它这个往这么两个方向看,可以看到这么两个点啊,这么两点。

然后当然其他点也都会看到,咱们以这两点为例,那么当你看到这个点的时候啊,你做这么一个操作,你会看到场景中有一个点在这里,你可以把它投影回这个呃光源,刚才看到的这个就是使用这个虚拟相机。

它的这个成像平面上什么意思呢,就是说如果我从光源看这个点,它应该出现在我的图像的哪一个位置上啊,就是这么个意思,然后你从摄像机看到一个点,然后这个点投影回光源,你就知道它之前记录在呃。

之前那张深度图上的哪个像素什,然后这个时候呢你就需要比较哦,我之前啊记录了这个光源,从它的这个虚拟的呃摄像机的点,到我看到了任何一个点,就是说我记录在这个图像上的,记录在这儿了对吧。

然后我记录了多长的深度哦,我记录了这么长的深度,橙色的线这么一个深度,然后呢我现在我从我的这个嗯摄像机呢,我看这个点,然后我同样我可以计算这个点,实际到这个呃,到这个light啊,它的这个深度对吧。

到这个光源的深度,那么我们会发现这两个深度肯定是一致的,那说明什么问题,那说明我这个点,是完全可以被这个光源所看到的,为什么呢,因为我们之前记录的光源往这个方向看,我看到的深度就是这个深度。

那就应该跟呃这个这个点实际深度一样,那就说明这个点是可见的,这个点可以被我的这个呃相机看到,也可以被光源看到好,那么我们再举另外一个例子,那大家看这个例子,这就不是了,比如说这个同样我我第二趟啊。

我从相机看向这个场景,我看到了这么一点,我看到这么一点,同样我可以去投影回这个呃,像呃,这个呃光源所在的这个虚拟相机,所呈现的这么一个这个呃这个这个图像上,我找到哦,应该是投影到这么个像素上。

但是我发现呢不对,我之前在这个像素上啊,我之前记录过它的深度是什么呢,应该是这个深度,这是因为我之前实际从这个光源,是往这个方向看了一眼的,我只能看到这个深度,现在呢我看到的这个点,它的实际的深度。

和我之前能看到的最大的深度是不一致的,然后这就说明什么问题呢,这就说明这个点,一定是我这个之前的光源啊,往这个方向所看不到的点,那光源看不到这个点,这个点可不就是在阴影中吗,所以说就是这么一个道理呃。

就是整个一个这个shadow map呢,就是这么一个道理好吧,然后我们总结一下,分两步它会生成这个呃,它会做两次不同的投影,第一次呢我认为光源这儿有一个虚拟相机,并且有一个虚拟的这个呃这个图呃。

或者说这个这个啊,最后要乘上乘出来的像啊,从光源往场景看一眼,记录出来不同位置,或者说不同方向我能看到的最大的这个,这就是就是说我能看到的深度啊,然后第二趟我实际从这个场景的这个呃,呃相机出发。

然后呢我再去渲染整个场景,渲染出来的这些场景的这个不同的点,我都重新投影回呃,我我的这个光源,然后我就知道我应该在这个哪个像素上,就是光源之前盛出来的深度,图的哪个像素上去寻找这个点。

然后我就会比较我之前记录的深度,到底是和我这个当前看到的点一致。

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

还是不一致,就是这么一个关系,那咱们通过一个实例来看这个事情啊,那咱们现在看这么一个呃,呃这个shadow map的一个具体的例子,大家可以看到这里有一个点光源,在左上角啊,然后左上角呢。

它自然会投影出这这么一系列的影子,在这个地板上没问题吧,然后这中间有这么几个球,然后这几个球呢虽然几何上很简单,但对于这个遮挡关系来说可不容易对吧,那么呃这里呢。

就是就是说我们如何通过这个shadow map的方式,呃,然后生成shadow map。

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

然后并且用它来产生这个阴影,那咱们开始一步一步来做对吧,然后在这之前我们先看一看啊,有没有阴影,当然效果会完全不一样,比如说这这里这个有阴影的情况下,然后这里是黑的,然后没有阴影。

就感觉所有东西都浮浮在空中对吧,没有问题好,那么咱们继续这个呃。

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

这这实际操作啊好那么我们说啊,第一步要做什么呢,是从光源看过去,从这个光源看过去啊,看向这个场景,那光源会看到什么呢,会看到这个,只不过只不过呢,呃我们嗯不考虑它的这个着色啊。

我们看到的确实是这么一种几何,没有问题,大家可以看到这个光源和这个绿色的球啊,这个绿色球就并在这里对吧,然后光源看到的场景它就长这样好,然后呢嗯实际上我们记录的是什么。

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

我们记录的只是深度对吗,这我刚才刚才说啊,这个光源看向这个场景,我只需要记录它的深度,然后这里深度图大家已经不陌生了,没任何问题啊,就好像是说我真正做了一遍,这个这个光栅化而已对吧。

然后记录了一个深度图,这是那个depth buffer或者z buffer。

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

没问题,那这个我肯定可以得到,然后呢我下面做这么一个操作,当我实际从我真正的相机,看向这个场景的时候,我会看到这么一个几何形状,然后这些几何形状呢我在不同的位置,我达到不同的像素,对不对。

每一个像素我都去连一根光线,连到这个这个呃这个光源上去,或者说啊每一个像素,它对应的这个实际位置,我都把它投影回这个嗯,光源刚才生成这个所谓shadow map上,然后我就可以知道我在哪一个。

shadomap上的哪一个像素可以找到呃,这个方向好吧,然后我就可以对比在shadow map上,我记录的深度,和它实际这个呃这个点与光源的距离,或者说深度它们之间的关系,然后这样一来我可以通过对比呃。

我我会知道哦什么样的点我可以看得到呢,那自然就是说嗯对于呃有一些点的深度,它和光源我之前记录的能看到的深度,比如说像这个这个球的表面吧,这个左上角这个球,它显然可以被这个光线看到,为什么呢。

是因为你现在看到的这个像素,你连向这个光源,你会发现哦,你要你要查这个山东map上记录的深度,和它实际到光源的距离一样的,没有问题啊,那就说明这个点可见,但是这一点呢这点并不是为什么呢。

这点呢实际深度右下角这个点实际深度啊,离光源非常远,这个对角线的距离对吧,然后呢,但是我在阴影图上记录,往这个方向看看的距离,基本上是差不多,这里对吧,然后就是说我之前通过用光源,往这个方向看。

我只能记录一个深度在这里,那就说明那实际深度是到这,然后我记录的深度只到这儿,那就说明这两个深度不一致,那就说明这个点一定是在阴影里,因为光源看不到它,那么这里很显然,大家会看到一个很明显的一个现象哈。

就是说看起来这个结果怎么那么脏啊,看上去这个这这一块儿,这个按说整个这个这这个朝向光源的,这半个面吧,啊无论如何都应该是比较清晰可见的,这种这种判定,它一定是这个嗯不在阴影里的对吧。

比如说像这里这半个圆,比如说像这里半个圆,为什么会出现这种情况呢,那这里这里就是说这个嗯这个shadow map,它本身会存在的一些问题,比如说刚才咱们已经提到这个事情了对吧。

怎么呃呃怎怎怎么来判定这个嗯,是否一个点在阴影里面呢,我们就判断他当前的实际深度,和这个记记录了的深度对吧,和第一趟通过光源看向场景,记录的深度是否是否一致,所谓是否一致,就是否相等对吧。

然后是否相等这个概念其实很困难对吧,因为在在这个呃实际的场景中啊,各种距离它都是这个浮点数,这种浮点数呢它本身涉及到精度问题,再加上呢,你其实看上去你是看看到一个像素对吧,从你的实际的这个呃。

就是摄像机看过去一个像素里面,它可能覆盖很多点,这些很多点,他们这个他们位置都有微小的差异,你联想这个光源之后,你得到的距离都会有一点点的不一样,但是大家知道浮点和浮点你要想判断相等。

这是非常非常困难的事情对吧,特别是考虑到有这么一些这个呃,各种各样的这些数值精度问题,那么自然而然,人们就想出了各种各样的办法,比如说呢呃以一个最简单的办法,我把这个嗯距离呢我不判相,等我判大小。

我说我实际的距离,只要大于你之前的这个呃,已经记录到的范围,已经记录了,我能看到的,这个这个这个最近的这个面的距离,那我就认为这个点在阴影里了对吧,那是可以的,当然是没问题的。

但是这样也仍然解决不掉问题,大家可以实际试一下,所以之后又会呃这个为什么,是因为有一些值实在太接近,不是这个1。000001这种,然后然后呃,像像这些地方,就会出现各种各样的数值精度问题。

所以又有人说我们引入一个所谓bus,或者是这个bias,怎么说呢,叫偏差吧,这,么说,就是说我不仅让它这个距离要大于这个,我记录了的这个位置,我还得让它大于这个记录的位置,加上某一个很小的一个数量。

唉这样的话是不是就可以保险一点,当然这些一切的数值精度问题啊,或者说计算几何这么一个范围内,呃,通过这这样一些这个这个所谓8s啊,或者说这个引入一些这些呃,简单的这么一些这个处理嗯,就数值精度问题。

这呃的这么一种方法吧,都不能本质上解决问题,仍然会造成各种各样的问题,然后这是一啊数值精度,另外一,点再给大家说一下是什么呢,因为我一开始从光源看向场景,我要把这个场景的深度信息。

光源能看到的场景的深度信息,记录在一个图里面,这个图叫shadow map对吧,咱们刚才说了,因为这个相同map,本身自己得有分辨率的对吧,我我是在这个光源往场景看了一下,我把它记录在这张图上。

那这个分辨率有多大,这就是问题对吧,那如果我用的分辨率特别大,那当然我精度挺高的对吧,因为一个像素覆盖了一个很小很小的区域,那如果我用的这个呃这个shadow map分辨率很低,然后我渲染整个场景。

分辨率又非常高,那就就变成了说我这个阴影的信息,其实记录的这个是是是怎么说呢,是是怎样的对吧,因为我们知道之前之前说过这个阴影,什么东西啊,这个就是如果我们把这个不同的场景。

是这个这个不同的三角形是什么东西,光栅化成不同的像素,然后它会形成锯齿对吧,然后形成锯齿,如果用一个超级低分辨率的shadow map,那我就会投影出来一个有锯齿的阴影,然后这个就会很难看。

你就有很多游戏,现在还会有这么一个问题啊,就是说涉及到这个呃,你这个shadow map本身的分辨率的,问题这是一个,当然你要用更大的这个呃阴影图的分辨率,当然可以,效果会很好。

但是这个肯定开销就会非常大,因为你等于生成了一个更大的图嘛,这样想,那么我们现在总结一下说呃。

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

这个shadow map呢,它本质上是一个呃是一个凉汤的做法,然后对吧,先从光语言往场景看过去,记录一个深度,在实际渲染这个场景,从我真正的这个摄像机,然后对于任何一个点,我来测试它是不是这个呃。

嗯它的实际到这个广源的距离啊,是不是和我之前记录的深度一致,就这么一个方式两趟,所以相当于是,他当然会引起更大的开销了,他要渲染整个场景两遍吧对吧,我们如果之前只做c的话,渲染一遍就够了。

那当然这就是一个呃很大的问题,然后呢我们刚才提到各种各样的问题。

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

只能做硬阴影对吧,这是一个问题,然后这个又又是说只能做这个什么的,会会有各种各样的这个数值精度问题,还有别的什么问题,这些当然工业界都在解决,但是这些都考虑进来,仍然不耽误这个嗯。

这个shadow map技术成为现在所有的这个呃,相当于3d游戏,几乎所有的3d游戏,以及早期的这些电影里面的一,个主流技术好吧,就是说它是一个非常非常非常得到,广泛使用的技术。

大家可以看到左边这个荒野之息里面啊,这这个林克的阴影,然后这个马里奥奥德赛里面的这个阴影,当然这里面阴影大家可以看到,相当于是一个软阴影,这阴影并本身边界并不锐利对吧。

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

会有这么一个呃效果,然后呢有各种各样不同的科研,这个呃思路啊,然后试图解决各种各样的问题,比如说这个现在呃,这个阴影图已经完全不止,可以做硬阴影对吧,然后当然大家可以可想而知啊,软硬硬这个怎么来的对吧。

为这个光源有一定大小,那有一定大小,那我算是从光源的哪儿看向这个场景呢,是吧,这是一个问题,然后嗯就是说阴影图的分辨率,这是一个呃,这个肯定是影响性能的一个重要指标,这就是为什么。

大家平常涉及到打游戏的时候啊,这个阴影大家通常都会看到,有一个叫阴影质量的一个什么一个选项,什么低中高极高之类的,呃,其实大多数情况下,指的就是说我这个阴阴影图或者说shadow map。

然后它的分辨率是多少,当然它分辨率越高,就越就是这个效果会越好了,当然就会变慢嘛,对吧嗯,好那么这是一个,然后我刚才说有各种各样的问题,然后浮点精度造成的问题,然后怎么样去解决这些啊。

大家都会有各种各样的不同的解决办法,然后现在直到嗯怎么说呢,直到10年或者5年之前吧,还有很多这个呃这个应用图,shadowmap这一块相关的研究,嗯,呃当然了,这个解决不了,本质上来说啊。

嗯用光栅化的思想去做这些,所谓全局的现象,这是这个困难的事情,好吧,这算是大家的一个非常非常好的一个努力,然后直到这个今天,这个还是有很多的这个游戏在用啊,好,那么这里呢呃我们为了引入下面一个话题。

我们就把这个事情给说完,我们刚才已经说到啊,这个阴影图他有着自己的问题,特别第一个问题他只能做硬阴影,理论上啊大家有各种各样的方法做人阴影,但是理论上来说,他这个方法就是设计来做硬阴影。

那么到底什么是硬阴影,什么是软阴影,这个我先给大家区分清楚,像这里呢如果我用一个点光源,大家可以猜测点光源应该在这个位置对吧,然后去照亮这么一个场景,我看他会这个投影出一个呃,非常明确的阴影对吧。

当然咱们现,在不再这么理解了,我们不再理解成物体会投影出阴影,而是认为这个点到底会不会被光源,看不到啊,这是不同的思路,那大家可以看到这个边缘非常非常锐利,因为对于点光源来说,要么可见,要么不可见。

所以这个阴影一定是一个非常锐利的边缘,那我们所说的软阴影是什么呢,大家可以看这么一个例子,哎大家看到同样一个场景,但是光源肯定有所变化,然后我就可以看到一些这样的现象,这些阴影呢还是有阴影。

然后只不过呢这个阴影呢它这,个会慢慢慢慢过度的,从有阴影到没有阴影对吧,它有一个这个它不再是非零即一,它有一个过渡在里面,那这种看起来自然就好看很多,当然了,软硬还有很多其他性质。

比如说越靠近物体根部啊,接触的地方它越硬,然后越靠近这个就越远离物体这个根部,像这里这个球就比较明显啊,这个地方就是相当于很硬的阴影,然后离得越远,它就变得越这个虚化嘛,相当于是就越软。

然后它有这么一些性质,就是说这些就是软硬啊,人们当然很希望这样,然后这样看起来真实很多嘛对吧,那到底,是怎么回事,所以人们就开始研究说软阴影怎么来的,说软硬啊,其实是一个这个自然现象,这个软阴影。

说白了其实就是在物理上所称的半影,然后叫做这个po,然后呃物理上的区分影子区分成两种呃,怎么理解呢,很简单,如果说你在一个地方完全看不到光源,那它这个地方就是叫做本影这个区域。

然后如果一个地方它可以部分看到光源,它就叫半音,叫做pana这个区域,然后如果说在这完全能看到光源,那就没有阴影对吧,那么这个现象呢,通过这个呃,右边这幅图大家可以看得比较明显。

这幅图是在说这个日食的现象啊,然后这日食大家都知道日食怎么形成的呢,是因为这个呃太阳月亮和地球,然后形成到了一条直线上,然后再有一些区域呢,你就会落在这个,太阳和月亮形成的本影区域内,说什么意思呢。

就是这块是颜色非常深的这个区域啊,这个区域里面大家如果站在,就比如这么一个小圈里面,大家会发现哦,这个月亮完全挡住了太阳,那我就什么也看不见,那这里就是完全的本影区域,那对于其他一些区域比较有意思。

像这里像这里呢,由于太阳它是有一定大小,的,所以说我在这个地方,我可以看到一部分的这个太阳,比如说我现在鼠标所在的这个位置呢,当然可以很清楚地看到,这个太阳的下半部分,但我却看不到它上半部分对吧。

会被这个月亮挡住,所以他能看到一部分,它就是在这个半影区域内,那么这个说白了,软阴影其实就是这个本影呃,扮演和这个影子之外这么一个过渡,所以没问题,那同样道理,咱们这个,这个其实就已经说明了一个事情啊。

就是说这个阴影程度,到底这个呃取决于什么,是取决于有多少或者说多大的光源,你能够看,到然后同样又说明另外一个问题,对于点光源确实是不可能出现软阴影的,就是说如果有软阴影,一定是因为光源有一定的大小好吧。

那就是说呃这一点说明白,那咱们说之后,如何去这个真正的做出正确的阴影呢,那咱们就是后面的这个后续话题了。

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

那到此为止啊,对于呃这块来说,咱们总结总结到这为止,我们说啊这个课我们会分为四个部分来讲,当然一开始着重说光山话,是因为有很多东西,这整个同行学都需要的知识,光栅化本身其实并不是占据太多课时啊。

光山话咱们说完了,着色之后,到目前为止,已经把这个如何生成阴影,给这个说清楚了对吧,然后就是说我们需要应用shadow map,做两趟光栅化就可以,这个通过深度对比的方式得到阴影好。

那这个阴影是这么做的,然后几何呢咱们通过前面几节课呃,不同的例子,然后呢这个这个显示影视对吧,然后我们又提到这个关于三角形面,如何去处理,然后咱们之前有提到曲线,各种各样的东西怎么做。

现在来说大家在看这个蝴蝶哈,大概就能看得更明白了对吧,这些控制点什么到底什么意思对吧,这其实就是这个呃所,谓分段的这个贝塞尔曲线对吧好,那么咱们下面一个这个这个课程啊,下面一个话题就会提嗯。

你就会提到光线追踪这一块,那么光线追踪这块在试图做什么,为什么我们要用光线追踪,为什么咱们之前这个不用这个呃,光栅化的方法继续做了对吧,那咱们说到这应该已经有一点这个眉目了。

因为光栅化有很多现象并不好做,然后光线追踪肯定能够提供更好的效果,那么呃它造成的代价是什么呢,咱们之后慢慢分析好吧,然后这算是课程第三块,第四块咱们开始说这个动画与模拟,这,块,这这就是整个咱们这门课。

也要带给大家的内容,所以说呢这个呃学通讯学呢,把握,这个很重要,就是说别学完了之后,说我们图形学学的是什么,学的是open gl啊,那就不对了哈,或者说通讯学学的是retracing,那也不对了。

所以说就是这个意思,就是说把握住咱们都交了哪些内容啊,然后把这些内容都给学到,这就是我这么呃觉得啊好,那今天到此为止,咱们下节课开始正式说呃。

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

光线追踪这一块好吧,那咱们呃,我们,把时间交还给技术秘书同学,然后之后呢大家要有问题,还欢迎大家踊跃到嗯,这个咱们的论坛上面去呃。

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

去问,然后我这个想办法给大家及时回答好吧,ok行啊,好谢谢大家啊。

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

GAMES101-现代计算机图形学入门-闫令琪 - P13:Lecture 13 Ray Tracing 1 - GAMES-Webinar - BV1X7411F744

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

亲爱的同学们,大家好啊,今天是咱们的第13讲,然后开始说光线追踪,特别的呢,咱们今天要讲的一个内容叫做weighted的风格,光线追踪,所谓waited style,然后这是什么意思呢。

这个待会儿大家很快就会知道好吧,然后光线追踪呢这里是咱们的这个第三块内容,大家可以看到下面这四个块嘛对吧,然后我们已经说了光栅化几何,那么今天讲光栅光线追踪好吧。

然后这一块呃还是刚才这个如果同学压着点来啊,估计没听到说我这个光线追踪,我打算稍微这个讲的深入一些,讲一些稍微现代化一点东西,因为什么呢,因为咱们这个以前的图形学课,就是国内的同行学科。

基本上就只讲到这个这个waited style,这个光线追踪,而这个得出来的结果并不是非常真实对吧,就是说这个并不是现在这个最现代化的一些解决方法,然后呢我希望多讲一点。

倒是嗯这个难度上也希望能够控制住,然后把这个内容给讲到,然后尽量让它不太难啊,之后几节课咱们这么安排,那么今天从west style开始说,那么课程之前咱们还是说几件事情,一个是关于作业四。

目前已经252分,提价非常好啊,这个这个呃大家非常积极踊跃啊,提出表扬啊,那么作业一咱们上一次已经说了对吧,以后会按照每一个星期开放一门之前的这个呃,开放一个之前的这个作业,按照顺序往往后顺延。

上周呢是开放这个咱们作业一的这个重新提交,然后目前已经有80分,然后可见这个有同学中途加入啊,然后这个现在做这个作业积极性还这么高,这个我非常开心啊,感谢大家的支持啊,那么呃有一件事情啊。

就是说国内的这个有一些学校说是联系我,说这个能不能用这门课上课,以及说这个这个最后的评分也用我们的评分没有任何问题好吧,如果你需要这个成绩的话,呃,可以让助教或者是自己联系我。

然后呢我会给到我们的这个这个作业成绩的这个数据库的嗯,就是比你这个这个访问权限应该就差不多了,然后至于说啊,至于说不同学校,你这个这个比如说重新提交算不算这个分数啊,这要扣分啊,还是怎么说。

这个我就不管了好吧,这个自己自己解决,然后因为咱们这个网课来说,那我肯定是不会去扣什么分数嘛对吧,只要大家愿意去做,没任何问题,正常的这个作业时间安排,主要是为了让大家这个能够能够嗯。

就算是按照这个课程的节奏把作业做下来对吧,然后实在是没赶上之后补就是了,对吧好,那么咱们今天这几件事情宣布就说说到这儿,然后咱们看啊,这个课程我们刚才说了,已经开始说到第三部分光线追踪。

那么大家看最左边一列对吧,咱们上节课提到这个事情啊,光线追踪和光栅化,这是两个不同的这个成像的方式,主要体会一下到底他们有什么区别,咱们为什么需要两个不同的这个方法。

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

对吧好,那么咱们这就正式开始嗯,首先呢我们既然要说光线追踪,咱们肯定得有一个理由对吧,我们为什么要引入光线追踪呢,那就是说我们之前在谈到光栅化的时候,一定定是他有些问题解决的并不好,对不对。

我们应该想想想什么办法这个嗯把这些问题解决掉,那到底是哪些问题呢,咱们看一下啊,嗯光栅化它最大的问题就是说它不是很好去表示一些这些全局的效果,就是所谓global effects呃。

这下面给大家这个简单的列举了几个,咱们上节课提到说如何用这个shadomapping的方法去做阴影,咱们也提到这个方法,假设后面是点光源,然后只能做硬阴影,当然后面有人把这个嗯问题改进了一下。

然后能够把它给改进的,能够支持软阴影,像这里大家看到的这个现象很明显,软阴影对吧,这个阴影这个随着离物体越远越来越模糊,然后这个啊阴影啊当然是一种全局的效果,然后咱们这个折腾半天对吧。

用这个两趟不同的渲染渲染这个模式,然后解决了这个嗯点光源嗯形成的硬阴影问题,所以说呢整体来说光纤光栅化做这个阴影还是挺困难的好吧,那么第二个问题是什么呢,就是嗯这种嗯glss反射。

所谓glc应该是这怎么说呢,就是说嗯这种反射呢,它嗯就说这种物体的表面啊,它又有点像这个镜子,但又没有镜子这么的光滑,就好像一些打磨这个嗯打磨的比较光滑的金属。

大家知道这个中国古代是用这个铜镜去照镜子对吧,像这种铜磨得非常光滑,之后,仍然和现金的镜子不能比,然后像这种的这种材质啊,我们就管它叫做glossy,然后glossy呢就是表示这个有那么些高光。

这么这么这么一种有反射的这种效果,但是它其实又有点这个本身的粗糙性啊,在这这种情况就是glossy的反射,那么这种反射呢很显然大家可以想象啊,这个光线怎么反射对吧,光线打到一个物体。

然后反射是必要达到另一个物体,然后再打到人的眼睛,那就会发现啊,这种情况下,光线在场景中这个谈了两次,对不对,就是第一次打到一个物体啊,然后反射到另外一个物体上,又是另外一个点,然后再打到人的眼睛对吧。

就比如说啊这个大家看这里其实光源来自于什么呢,这是一个屋子啊,光源就来自于这些大的窗户,然后这些这些光线呢可以照到哪儿,比如说照到这个这个这个地板嘛对吧,要照到这个地板,然后呢它这个会经过漫反射。

会反射到某一个位置上面去对吧,然后他有可能反射到某一堵墙,又会漫反射,然后再在这个场景中不断的弹射,不断的弹射,最后才打到人的眼睛里面去,所以这个从这个角度上来说啊,我们其实那这个对他的正式的定义。

咱们之后也会再说啊,就是说现在的理解很简单啊,就是说光线这弹射不止一次,就是在在到达人眼之前弹射不止一次,那么在这种情况下,光线可以弹射很多次到人的眼睛里,那这个要怎么样去做出来,对不对。

比如说我们之前做公开化,然后我可以做一个这个所谓着色对吧,这是嗯肯定是考虑这个光线只弹射一次对吧,从光源到这个着色点到人的眼睛对吧,我们之前还做过这个嗯blame for这个这个模型对吧。

所以说像这种情况,当光线弹射很多次的时候,这种情况光栅化就非常非常的低效,就不好不好,在这个做这些效果,当然不是说不行啊,人们还是很聪明的人,这个发展出了很很多这种不同的方法。

然后使得光栅化可以支持这些效果,但是都挺嗯嗯就是说比较麻烦之一,然后另外一点是也不能保证这个物理上的正确性好吧,就是说呃光栅化的局限怎么说到这儿。

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

然后呢,我们为什么要用光线追踪,然后我们刚才提到这光栅化有有一些问题对吧,然后光栅化呢通常情况下咱们不说具体问题,大家会认为光栅化是一种很快的,但是一种很近似的渲染方法。

然后比如说大家看到这个这个车子啊,这个车子是这个游戏绝地求生大逃杀里面的一个车子叫bargain啊,然后这个车子然后大家可以看到嗯,对于目前这种渲染来说啊,一一看,首先没有阴影,这可能是画质调比较低啊。

一个这个背后的这些石头什么东西,这个模型细节程度也非常低,然后纹理什么也看不太清楚对吧,然后大家一看就知道,这当然是一个这个很原始的这种这种这种渲染的这种结果啊。

然后就是说呃为什么大家这个只能做到这么原始的效果呢,是因为这个游戏本身地图非常的大,然后整个渲染这个对gpu的这个要求非常的高,所以说他们对画质上不能做更多的这个这些要求。

所以说啊这个光栅化本质上来说它是一种这个快速的近似,然后质量相对较低是这么个意思啊,然后嗯咱们对比一下呃,我们要提到的是光线追踪,那么光线追踪呢是一种准确的方法,但是一个但是它也是也有问题的对吧。

它并不是说能够替代所谓光栅化的一个一个一个做法,嗯,他呢有最严重的问题就是会非常慢,咱们第一节课给大家提过这个问题对吧,这个呃光栅化通常咱们是瞄准实时的应用来的,所谓实时每秒钟生成超过30帧的图对吧。

那这个光线追踪它其实更多被用来做一些所谓离线的应用,叫offline的应用,也就是说大家看到的这些电影啊或者什么东西,大家可以这个你可以想象这个嗯电影的这些制作商就是迪士尼。

然后他们会花大量时间生成好这个电影,然后把它制作成这个视频,然后之后再放给你看,就是说生成这个过程会非常慢对吧,然后然后有多慢呢,咱们之前说过一针吧,一针就需要花10k,也就是1万个cpu小时。

然后大家可以想象一下,就是正常情况下对于一个多核的cpu来说,可能稍微降低一点吧,比如说咱们可以照这个呃这个一一千这个cpu小时来算,生成一张图,那对比一下咱们这个光栅化它的这个速度。

那显然就是没有办法可以比的对吧,就是说它是一个非常非常慢的做法,然后呢这个大家看到这么一个例子也是哈,这个例子有双重意义,一个是这哥们儿非常慢对吧,然后另外一个意思是说生成就单说这幅图。

这个这个疯狂动物城里面的这一幅图就会花非常非常多的时间,然后所以说呢这个质量对吧,质量和这个呃速度通常就是一个所谓我们说trade off,就是通常啊图形学里面大家应该已经接触过很多次了对吧。

咱们做m s a a对吧,然后提升抗水质量,但是或者造成结果会让结果变慢对吧,这里是完全是一样的,图形学生有很多理由难的问题啊,像这里这个光线追踪和光栅化的比较也是如此,好吧呃那这个光线追踪呢。

这里算是一个简单的和这个光栅化方法的对比,那么它嗯嗯这一点呢为什么要提前说呢,就是说大家知道说这个它是一个比较慢的方法,大家在做做作业的时候就会体会到啊,然后另外一点它是一个质量非常高的方法。

然后这这个是完完全全符合物理规律,能够给大家带来这个最真实的这个渲染结果的一种方法,好吧,那么咱们从最基础的光线追踪算法开始,那么嗯是这么回事,就是说啊在定义这个光线追踪之前对吧,怎么做对啊。

之前咱们先把光线给定义下来对吧,我们追踪的是光线对吧,那么光线是什么呢,那咱们现在看这里呢有简单的这个三个这个想法啊,然后呢就是相当于是我们在整个一个图形学中啊,嗯基本就是这么假设。

首先光线是沿着直线传播的,这个按说是没什么问题对吧,但其实来说严格意义上来说,这个光线这个其实它是一种这个光波,对不对,然后它有波动性,然后在一定程度上我们需要考虑它的这个波动性质。

但是对于咱们这个课来说,咱们就说这个光线其实是这个呃沿直线传播没问题好吧,然后呢嗯那么第二点呢,这个光线和光线啊它不会发生碰撞,你比如说有两个光线从这这这两个不同方向过来对吧。

然后它发生了某一个点上发生交叉,不耽误两个方向,两个光线各传播各的中间不会发生碰撞好吧,这一点当然还是不对的啊,但是我们仍然这么假设没问题,然后呢这一点非常有意思呃,或者说重要是什么呢,就是说光线啊。

它是嗯肯定是会从这个光源被发出来对吧,达到场景中,然后在场景中不断地经过反射折射啊,一系列的这个操作之后,最终进入人的眼睛对吧,我们之前不止一次提,为什么我们可以看到这些图像。

是因为有光线进入了我们的眼睛,所以光线肯定是从光源出发,最后到达我们的眼睛,那么整个光线追踪就在试图做这么一个模拟的过程,那么这里呢所谓嗯光线追踪,其实它应用了一个光线的一个呃传播的一个性质啊。

这个性质是什么呢,叫做这个这个啊reciprocity,大家可以看到是这么一个性质,这个性质是是说什么意思呢,就是呃光线的可逆性啊,什么叫可逆性呢,就是说啊我可以理解成这个呃从光源发出光线。

然后在场景中打着这个这个不断弹射打到人的眼睛里,我也可以认为我的眼睛是可以发出一些这个感知的光线,然后然后这个打到这些这些这个物体上,最后最后打到光源上面去,没有问题。

就是说如果我在这个场景中找到了一条光路,也就是说啊,如果光里面可以通过某种办法看到我的这个这个相机,我的相机也有也会反过来这个看到这个光源,就是把所有的这些光线的这个方向都给变成了反过来的。

仍然是一条可行的光路啊,这个我们之后会更多的理解啊,然后这里呢这引用一个一个这个是一句诗哈,就是当你凝视着深渊的时候,深渊也在凝视着你,当然这个这个可不是从黑暗之魂里面出来的哈。

这个这这句话原本是尼采说的,他写的诗啊啊ok然后嗯这就反应了说啊,当你比如说你能看见一样其他什么东西,通过镜子或者什么东西,如果对面有一个人在你看到那个物体附近,它一定也可以看到看到你。

这就是说把这个光线的这个传播方向全部给倒过来,我就假设说从这个呃从我的相机可以发出各种各样不同的这个光线,然后呢呃我同样达到这个这个光源也可以形成一条有效的光路,这就是这个光路的可逆性好吧。

那么光路的可逆性呢,其实很早就有人研究这个问题啊,就是说大家可以看到这个早期啊,这个在这些欧洲这些这些当时这科学启蒙的时候啊,然后有很多人会这么认为,说我们看到的东西是怎么回事呢,是因为我们的眼睛大。

大家看这个这个呃下面的标题哈,就眼睛会发出这种所谓感知光鲜打到这个世界中去,然后这个光线会被物体挡住,那我可不是看见东西了嘛对吧,然后当时这个理论咱们现在看起来很荒谬啊。

但是这个大家可以看到有很多名人都在支持他,这是一个著名的这个叫什么这个这个这个就哲学家哈,然后这里这个呃柏拉图有呃欧基里德和托勒密啊,然后这个大家还可以看到。

有50%的这个美国的大学生也支持这这么一种言论啊,这个当然了,这是一个对这个对对这个世界的这个错误描绘啊,但是在这个光路的可逆性下,我们确实是可以这么理解的。

而这也就是所谓光线追踪这个追踪这个这个词的意思,我们做光线追踪实则是从这个呃从我们的相机出发,或者从眼睛出发,然后往这个世界中去投射光线,然后把这些光线在世界中不断的这个呃这个这个呃弹来弹去啊。

然后最后在这个连到一个这个光源上面去,然后我们实质上是这么做的,所以说呢当时大家肯定不会想到,这个是因为光路的可逆性造成的这个事情,不过呃现在看来一定呃有一定的道理对吧好,那么咱们这个继续这个话题啊。

那么我们刚才说啊,嗯光线追踪利用的就是所谓光光线呃,这个可逆性,那咱们从这个光的光源出发是一种思路,那么这个所谓呃我们的光线追踪呢,那既然要追踪对吧,那我们从它的这个最后终点开始。

也就是从我们的这个眼睛或者相机开始,然后怎么做呢,这里就是说首先我们要做光线的投射,怎么投射呢,很简单,我们假设啊我们现在在往一个这个虚拟的世界中看。

然后我们面前放了一个这个所谓的呃这个这个就成像的平面啊,就是在我们的眼前,然后成像平面被我们化成了这个不同的这个像素的这个这个格子对吧,对于每一个像素,我们可以从摄影机连一条线穿过这个像素。

然后我们就可以打出去一根光线,然后这根光线我一定会达到这个这个场景中的某个位置,或者说和场景中什么东西都不相交,那如果它和某一个物体发生相交,我知道它就是说所谓我沿着这个方向看看到了哪儿。

然后呢我再把这个点和光源做一个连线,然后这是要干什么呢,这是要判定是不是说啊这个点是不是对光源也可见,也就是说我要判定他是不是在阴影里,如果他不在阴影里,也就是光源也可以照得到它,诶。

那我就形成了一条有效的光路,什么呢,从光源到这个点,再到我的眼睛,那我就可以计算这条公路上带的能量,我自然就可以把这个这个最后我看到的颜色算出来,这部就是着色对吧。

所以说这个呢所谓光线投射就是在做这么一个事情,怎么样去生成这个这个不同的光线啊,那咱们看一个这个这个实际的这个例子哈,就比如说这里啊,在咱们说这个之前啊,就说我们提光线追踪呃,这个整个光线追踪啊。

其实有一些假设的,比如说我们认为我们的眼睛永远是一个这个针孔摄像机,也就是说眼睛是一个点,是一个位置啊,就是我们不考虑实际的相机应该要应该要怎么样处理,就是说嗯有一个这个大小的镜头。

这种这种呢我们之后说路径追踪的时候会给大家说,然后光源这里呢我们也假设是个点光源,然后对于场景中的这些物体呢,我会认为说这个光线打到它之后,它会发生完美的折射或反射啊,是这个意思。

就是说比如说我这个光线有一个打到这个球,然后它会沿着这个镜面反射的方向,这个被反射出去啊,我们认为它的反射会就是这这么一种完美的反射或折射方式,那么这是前提,那咱们先来看看啊。

就首先我我们刚才说所谓光线追踪,那么从眼睛开始往场景中的这个,我们前面看了成像平面中的任何一个像素呃,投射一根光线,然后这根光线呢会达到场景中的某一个位置上去对吧,然后这里大家会看到哦。

我连这么一条光线,我会达到这个球,然后呢这里我们就管它叫做i ray,就这根光线啊,就是从这个眼睛出来的,或者叫camera ra,然后这种情况这都是大家起的名字。

也就是第一个从这个眼睛到这个场景中连出的第一根光线好,那没问题,那肯定是对,每一个像素都是要这么做啊,咱们现在先针对这一个像素这么说好,这是艾瑞,然后呢,我们刚才说把这条光线投射出来之后。

它会达到这个场景中最近的一个物体,那对应就是这里对吧,找到这么一个点,但事实上来说这个光线这个呃它可以和很多物体相交对吧,然后那我们知道这些物体互相会产生一些遮挡什么东西。

然后呢考虑到这个我们人眼看到的肯定是最近的这个东西,因为它会遮挡到别人其他的各种各样的点,所以说这根光线呢,我们永远要考虑的是这个和场景内的物体的最近的一个焦点,诶。

这里也就是说啊呃也就是说我们只说了这么一点,怎么样去投射光线,其实我们就已经解决了呃,对完美的解决了这个深度测试的问题,大家可以想象一下,在光栅化里面我们费了多大的这个这个功夫啊,去做这个深度缓存对吧。

然后然后这个呃每个像素要记录不断记录它的这个最近的这一点啊,没有问题,就是说呃对于我们这个光线投射来说,道理是一样的,沿着一根光线我们记录它的最近的这么一个焦点,那怎么做,咱们之后再说好吧。

但道理就是最近的焦点自然会遮挡住别人那行,然后呢嗯咱们就可以再继续看这个事情,那么当我发现了一个点之后怎么办呀,求到了一个焦点之后怎么办,那么这个时候我就要考虑好,那这个点会不会被照亮对吧。

然后我们怎么办怎么办呢,就从这一点往光源连一条线,然后这就是我们要连的第二根光线,这根光线呢我们管它叫做shadow r,然后就是说我要判定这根光线,如果说沿着这条光线中间没有任何物体阻挡。

那我就知道光线可以照亮,而光源可以照亮这个点,如果有东西挡着,那我就一知道这个点一定是在阴影里,没错吧,那当然这里看到大家看到这个黑色箭头就是在这一点的法线啊,我们这个求出来的一个焦点之后。

自然任何一个位置我们都知道它的法线是多少,然后啊那这里就是说呢有了法线,有了入射方向,有了呃入射方向,然后有了出射方向,我们就可以算这两个着色对吧,这一点呢着色之后算出来之后。

我们就可以把它写入这个像素的值对吧,所以这是一个很简单的一个事情,那这里看我们把这个这个点呢这个颜色算出来之后写入这个像素,那就是这么做的对吧,然后怎么做着色呢,各种各样的着色模型。

咱们之前提过不临风对吧,各种各样的方法都是可以的,那么大家看到啊,这光线投射做的什么事情,每一个每一个像素首先投出去一根光线,从这个呃眼睛开始,然后和场景相交,求最近焦点。

找到焦点之后和光源连线第二条光线,然后判定是否可见,然后呃是否对光源可见对吧,是否在阴影中,然后我就算这个着色算着色之后写回这个这个像素的值,那听起来是一个很这个自然而然的过程,对不对,然后呢。

这个之前就是这么一种方法来生成这个,这个这个就是就是说和和光栅化能够得到这个近似相同的结果,但刚才啊有同学应该已经看到了对吧,我们考虑这个光线啊,打到这个场景中间这一个物体之后,求它求它的着色。

求它的阴影,没问题,然后呃这个不还是考虑这个光线只弹射一次嘛对吧,那我们说光线其实可以弹射很多次,那怎么办呢,那就是这里我们要给大家说的,也就是这节课的主要内容就叫做这个所谓witted风格呃。

光线追踪,然后它本身是一个这个递归的算法好吧,然后嗯这是什么意思呢,就是首先来说啊,这个命名是由这个turner waitted呃,是是是由这位这个这个也算是上古大神啊,他这个发明的这个方法。

他这个方法呢大家可以明显的看到,比如说呃这里看到一个这个玻璃球呃,一个玻璃球应该是左边这个球以及一个类似镜子的球,也就是左边这个球基本上是在做折射对吧,右边这个球基本上是在做反射,那咱们想一想。

那比如说光线打到这个球之后发生一次折射,然后进入了这个球内部,再发生一次折射出来,然后再打到某一个物体上,达到它背后的某个物体上,所以说这个wait的方法啊,它是可以做这种风格的。

这个呃这种光线追踪的那当然可以得到一个不错的效果,那就是这里大家看到这个效果啊,还是还是挺不错的,在那个年代哈,然后当年渲染这一幅图需要74分钟,然后06年的pc就只需要六秒。

现在来说对这个对这个场景来说呃,如果放在这个实时光线追踪里面,用我们最新的这个gpu啊,咱们应该可以做到嗯,几百帧,几千帧应该都是可以的好吧,每秒啊,所以这个硬件的这个进步也是很惊人的。

考虑到这个和当时的这个效果比较对吧,好,那么这个witted的风格光线追踪到底是怎么做的呢,那咱们这之后就开始说啊,那么这个我们还是从刚才的所谓光线投射开始啊,光线投射可以可以这个呃每一个像素啊。

我们找到最近的这么一个这个点对吧,然后呢我们考虑在这个点上,如果这个球啊本身是一个这个呃玻璃球,那我们知道当一个这个光线打到玻璃或者什么这种这种透明的,这种这种介质上,肯定有两种现象发生。

第一有一部分能量要被反射掉,另外有个能量要要折射这个进去对吧,然后这个但是这个比如小时候都做过这种物理实验对吧,有一个这个激光打到这个水面,然后大家会发现一部分要反射,一部分有折射进去。

这里一样没有问题,我们知道有多少能量会沿着它的反射方向诶继续传播,那也就是说啊,我们从眼睛投射出来光线打到一个点的时候哦,如果这是个玻璃的材质好,那我知道我对啊,我在这个点上应该要做一个镜面反射。

还记得咱们刚才假设吗,我们假设这个反射都是完美的反射啊,这里就是这个这个作威特的风格,他假设的内容好,然后这里呢这这条光线当然大家知道这是反射光对吧,没问题,然后呢嗯同样道理,这根光线咱们刚才说了。

到这里它是个玻璃球,它还可以折射进去对吗,它可以折射进去,然后呢这个在内部再传播,他肯定还会打到另外一个点,打到另外一个点再折射出来对吧,也就是说它这个咱们看啊,比如这一条所谓光路啊。

这个也就是说它可以弹射很多次,无限次,这个可以永远的一直这么做下去对吧,这是没有问题的,然后嗯就是说啊这个wait的风格,他说的其实就是这么一个意思,只需要这个你正确的算出来它的反射方向。

折射方向就可以了,好那么呃还是一样刚才的定义哈,这个这两条光线自然就是折射光,没有问题好,然后呢在呃这个waited style这个这个光线追踪里面啊,它所算的这个着色也发生了一点点变化,是什么呢。

就是说啊我这里原本说光线投射投射找到这个点之后哦,这个点看是不是能被照亮,然后我就计算它的着色,但在这里由于光线这个弹射的次数多了呢,我其实在每一个彩弹射的点,我都会去计算它的着色的值,就是这么个意思。

大家可以看到这里呢,一共这个这个目前每一个这个和场景中间的交点啊,我都去和光源做一条连线,诶,我去看在这个点上,这个光源是不是能够照亮它,就是这么个意思,比如说像这个点,咱们认为能够照亮这个点呢。

自然就被这个三角形挡住了,就照亮不了这个点呢就可以被光源所照亮,那么这样一来呢,其实啊最后嗯这个wait的风格光线追踪算了一个什么事情呢,算了一个啊。

就是说我的光源如果可以照亮任何一个这个弹射的这个点啊,那我就把这些这个弹射的点,这个内部就是我算出来的这个着色的值,都给最后加到这个像素的值里面去啊,是这么个意思,就是说我在这一点算一个着色。

那么在这一点再算一个着色,这两点的着色都会被加到这个这个像素里面的这个值里面呃,这个很简单对吧,因为有这个嗯嗯其实这里已经定义了两种不同的光路了,一条是什么呢,一条是这个你看呃光源到这个点再到人的眼睛。

然后另外一种传播方式是光源到这个点到这个点再到人的眼睛对吧,那光光自然可以往各各种各样不同的地方传播,所以这两个路径都是可行的,所以它会把两个部分的着色的结果都给加回去,那同样道理。

这个地方还会发生一定的折射,那折射这里也是对于这个点和这个点,它会形成这么一条光路对吧,然后以及这边这边被挡住了,那就没有这个光路,但是如果有的话,他也会把这点这点加上,就是光源到这个着色点呃。

到这个着色点,这个着色点最后到一点里面好,他就把这些着色的值呢全部都算进去,那么大家看到了,为了算着色,我要算它的可见性,每一个这个弹能弹跳的这么一个点啊,我都要这个连一条这个所谓的shadow。

然后我来看他是不是在阴影里,是不是应该算它的这个这个呃就是最后的值得这个贡献对没问题,然后有同学反映说这里是不是有能量损失,当然了,否则的话他这个经过不同的这个这个越来越多次数的这个弹射啊。

那可不是说这个能量会这个一直累加一直累加,那最后看到的结果可就是这个完全就是类似过曝的这种图了,对不对,就是说完全是白的嘛,就是说这里啊大家可以看,比如说在这一点原本能量过来,假设百分之百。

那么呃我们认为比如说啊折射的这个能量呃占了40%,而这个能量占了60%,那自然这些都是会考虑进去的啊,这个没有问题好,然后嗯呃我们在这里呢再简单再定义一下这个事情,这个是是就是说啊对于不同类型的光线。

我们在这里做一个简单的归类,很简单,什么呢,就是说之前我们定义了camera a或者iv对吧,就是从眼睛这边开始打出来的第一根光线,往各个像素这个嗯这个中心连的这些光线um。

那么这些光线又被称作这个primary,然后在之后的这些这些弹射,它就是说在一次弹射之后,这些这些光线我们都可以管它叫做这个secondary race好吧,然后呢我们又区分一下。

我们往光源连的这些连接,我的判定可见性的这些叫shadow y,这也是大家不同的一些分类吧,反正这也好理解,没问题啊,啊这是基本上这个这个wait的风格的这个光线追踪的一个做法。

那么大家可以看到这个最后把结果呃,无论如何把这些光路的结果全部加到这么一个点上面去,呃这像素上面去我们就可以看到最后的这个结果,那么这从这个结果上,我们其实还可以看到一些这个其他的这些这些信息。

比如说啊比如说嗯这个阴影,这个阴影看起来就是就没那么暗对吧,这边这个阴影呢就相对较为暗,那么这是为什么呢对吧,大家可以想象呃这里怎么来的哈,就肯定是说我有这个呃嗯一根光线从camera出发。

然后连向某一个像素,然后它打到地板上的一个点,然后基本上一个点呢,然后他这个这个往某个方向,然后去这个弹射,然后我会发现它会穿过这个玻璃球,然后还会接触到一定的光照,没问题吧,从这个角度上来说。

就是说嗯这个对于镜子的球,它会挡住这个这个所有的这个光照,然后对于这个这个玻璃的球呢,然后这个呃这个光线会有办法能够穿过它,然后自然这里会收到更多的能量,当然它本身肯定涉及到有能量衰减。

所以一定会投射出来一个阴影,只不过会非常这个这个蛋就这么个意思啊,就是说这样一来就可以看到这个呃这个所谓wait的风格,光线追踪的好处了对吧,那么有同学说这中间有很多这些技术问题,我没有说对吧。

我们挨个儿之后解决,就是怎么判定是不是这个光线被遮挡住对吧,怎么怎怎么在这个判断说这个光线投射出去会打到哪里,怎么样求这个呃这个呃所谓的反射光的方向和折射光的方向对吧,以及他们各自带的能量。

这能量得守恒啊对吧,然后就是说这个衰减又应该怎么算,但是不管怎么样啊,刨刨除这些,这个咱们不说的这些,这个就目前还没还没交代的这些这个技术细节啊。

就是单说这个呃光线追踪本身所谓waited style对吧,然后这个还是挺好理解的,我觉得基本上来说就是在模拟光线不断弹射的过程好吧,那么行没问题嗯,到这里呢就是说把这个基本原理告诉大家。

那么咱们现在开始一个一个来解决这个技术问题。

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

那咱们要解决的第一个技术问题就是要求这个焦点没错吧,就是说啊在这个所谓着色各种各样的这个之前,咱们这个肯定最早是说光线投射出去之后要打到谁对吧,也就是说交点怎么求,我们要求光线和物体表面的交点好。

那么这里呢我们既然要求焦点呢,肯定涉及到各种各样复杂运算,那咱们先把数学上的光线给定义出来,那么所谓光线其实在数学上它就是一个射线,对不对,很简单,有一个呃起点对吧,有一个起点有一个方向。

那咱们之前说过方向都认为是单位向量没问题啊,然后有一个起点,那么怎么定义呢,一个点光源啊,我们认为点光源,然后呃或者说这个光线的起点是某一个点,我们认为是o啊,然后它的这个这个传播方向。

它的传播方向我们认为是d,所以说我们就用这两个这个这个量就可以定义一条光线,非常简单的事情,那么在光线上的任何一个点我都可以用o加上td来表示对吧,因为沿着这个这这这条光线啊。

这无非就是说这个呃从o开始往b方向走了多远,那所以当然就是o加上t d,那这里呢由于光线是射线,所以说我们认为这个光线啊它只能往这往一个方向传播,所以t大于等于零小于无穷大。

而这个时候呢就是我们在回到之前所说,这个我们通信学里很少去考虑这种这种边界的这种条件,比如说t到底是我们认为是大于零还是大于等于零,其实问题不大啊,就是说那咱们就这么理解,这简单地定义了一条射线。

也就是说任何一个沿着这条光线的任何一个点,我都可以用简单的这个rt也就是o加td来表示,这个没问题啊,简单那呃都是什么意思啊,就是说任何一个点沿着一条一个光线,我们叫r点对吧,在这个t时间。

它是这个从这个起始位置加上t乘以这个方向没什么问题好,那么我们来说这个最简单的这个情况啊,光线如何与各种不同的物体求交,咱们从最最简单的物体来说,光线怎么和球去做焦点好吧,那么咱们这个光线的定义。

咱们刚刚说o加上td,然后球的定义,球的定义,这个是也是一个挺简单的定义对吧,就是说我们可以把它的这个隐函数的表示解出来,然后就是说球上的任何一个点啊,然后这个到到什么呢,到他这个球心的距离。

球心c的距离都等于半径啊,就说的就是这么个事情,超级简单的一个定义,所以这就是为什么p减c的平方减二的平方等于零对吧,这是这是对于这个呃三维情况下来说,它就定义了一个这个球的表面对吧。

那么我们现在要求光线和球的交点,那这个要怎么做呢,那我们就在就想这么一个事情,数学上我们如何定义一个交点,什么叫交点对吧,这样想,那交点其实就是说这个点它又在光线上,又在球上啊,那这个才是叫交点。

那么既然这个点又在球上,又在这个这个光线上,那它势必要满足这两个这个不同的这个物体呃,它表示的这个这个函数,两个函数都得满足对吧,它它是既在光纤又又在这个球上对吧,所以都得满足的话呢。

那我就说任何一个这个球上的这个点p对吧,它同时也一定是沿着这个光线走了这个某一个时间的,也就是说啊我可以说o加上tb这么一个点减去这个球星,没错吧。

也就是说这个点p它又满足o加td又满足这个下面这个式子,p减z平方嗯,减r平方等于零对吧,那我们就可以把两个合在一块儿考虑,那和在一块考虑什么量,我们是不知道的啊,我们要解这个焦点,对不对。

那这个焦点现在我们看了这个这个这个o点这个地方向,然后现在不知道的呢,就是这个t对吧,就是传播多久可以打到这么个球,就这么个意思对吧,那么我现在自然而然有这么个式子,我就可以把它解出来,怎么解出来呢。

那大家可以看到它无非就是一个二次函数,然后这个呃我们可以把它给展开成这个a t平方,加bt加c等于零的形式对吧,我们为了解除这个c嘛,然后呢这个二次函数怎么样求解这个根呢对吧,这个很简单。

那么直接可以解了出来,大家还记得这个公式吗,对2a这个这个分之负b加减根号下,这这这么这么些东西对吧,然后这个a abc分别都是什么,这是数学运算啊,没有任何这个困难的地方呃。

这个就是说简单的把这个式子展开整理成这个这个二次的形式,然后就可以解除这个t是多少,那么根据我解出来的t的这个数量,首先我们这个要满足这个t得有这个物理上的这个实际意义,t得是这个呃正的对吧。

我们刚才说他是这个光线是射线嘛,t的是正的,这是一第二呢这个嗯就是说呃解出来的这个这个嗯解出来的这个根,他要有实际的这个这个物理意义,也就是说它不能是个虚数,它得是这个实数。

所以b平方这个一定得大于等于4a c的时候才会有个交点对吧,然后根据这个这个呃光线所在的直线和这个球的距离关系,当然之前大家几何上也都学过这个问题对吧,就是说这个有存在相离相切和相交的情况。

然后这样我们就可以解除这个不同的点对吧,假如说相交,我们可以求出两个不同的t其中一大一小对吧,那我们要求这个最近的,那么肯定取决于最小的t那就是最近的焦点很简单,那这个对于一个这个和球的这个求教啊。

光线和球球球的球球无非就是解散函数没什么问题,那咱们其实可以把这个问题啊,给推广到光线和一般性的这个影视表面的求交,那什么意思呢,大家还记得吗,影视表面的定义就是说我定义这个点满足一个什么样的性质对吧。

就是说我定义一个点p这个点使得某一个函数会等于零,那这刚才对于球来说也是如此对吧,很简单的一个定义,那么我们现在要求光线和这个影影视表面的焦点同样思考对吧,同样思考,那这个焦点一定又在光纤线上。

一定要在这个影视表面上,所以这个点p一定可以写成o加td的形式,所以咱们就可以把它写成fo加td等于零,剩下的事情就变成了好,我给了一个函数,里面有一个未知量是t然后我现在要把这个题解出来,对不对。

解出来记得两个事情,第一我们要实数,不能是虚数,然后要让物理上有意义对吧,然后第二我们需要是正的,这是因为是光线,是这个这个是射线对吧,t一定得大于等于零好,那么嗯把这个条件加上,咱们把这个值解出来。

我们就可以这个把不同的各种各样不同的这些这些复杂的这些呃,影视表面对应的这个这个这个表面和光和光线做这个求教,而且很容易解得出这个值,然后呢目前来说嗯这个数值计算的软件啊,现在是非常发达的。

就是说怎么样去解这么一个式子,现在很少大家去关心这种事情,就是说甚至你不用,你不需要用什么数学的方法直接去求,直接用数值的方法去做优化方法,直接去求一个函数的这个根就可以了对吧,然后这是很简单的事情。

所以说嗯对于一般性的饮食表面也是这么做啊,解出来一个时间t,那解除时间t之后,大家问他,那这个焦点在哪儿啊,那就是o加td呗,t已经知道了对吧好,那么没问题,那么我们刚才说啊,对于一般性的饮食表面。

那对于显示表面怎么做,对不对,然后显示表面里面我们刚才就说啊,最最重要的显示表面是什么,咱们之前课上已经几何上已经说了对吧,所以这些知识啊其实都是联系在一起的,那么对于这个显示的表面呢。

我们就说光线和三角形求角其实是一个非常非常重要的话题对吧,然后这个呃光线如果我知道它如何和这个三角形求交,我就能找到焦点,我能判断是不是这个光线被遮挡,然后还有一个很有意思的应用,这里给大家列出来。

就是说啊这个通过光线和三角形的这个求交点这么一个事情,我甚至可以判断给你一个点,这个点是不是在这个物体内啊,或者说这个这个点是不是在物体外面,那这个这个是怎么做到的呢,很简单。

大家可以试着在纸上随便画任何一个封闭的一条一条曲线啊,比如画一个这个这个就是说正方形对吧,圆形什么都是可以的,然后在这个在这个形状内部啊,点一个点,然后我随便往哪条方哪个方向啊。

去这个去去去打一根光线出去,然后我判断这个光线和这个物体有多少个交点,你会发现一个很神奇的现象,就是说如果你点的这个点,它是在这个在这个形状内的,你得到的交点数量一定是奇数啊,记得光线是射线哈。

不是直线哈,射线啊,就是说你随呃随便取一个点,随便取一个方向,定一个光线,找这个交点数,然后呢这个如果你得到的是奇数个交点,那它一定在这个物体内,如果是偶数个交点,那一定是在物体外。

这个事情推广的3d仍然是这个这个可行的,所以这个非常有意思的一个属性啊,这个大家可以试一试好,那么嗯好,这里呢就是说嗯就是一个应用吧,算是好啊,当然前提是得这个物体本身得是封闭的啊,就不能有动。

有这种情况就不能判定是不是内额外了啊,ok那么行,那么我们现在回到这个这个啊光线和三角形求交啊,这是最最基础的一个操作好吧,那么我们考虑一下怎么样做光线与三角形求交,然后最最简单的做法。

那我可和光线和三角形面,我要判定和这个物体,比如说这个光线和这个小奶牛它怎么样啊,这个有有没有交点,那么我就一个一个三角形判断它是不是和这个光线求有交点对吧,那我可以求出来很多交点。

那哪一个交点是我们要的呢,最近的这个对吧,t最小的这个对吧,所以这个思路肯定是对的,没问题,如果我要判定这个光线与这个三角形面物体啊是否相较,我就一个一个的三角形来看对吧,那么当然大家可以可想而知。

这是非常非常慢的一个事情啊对吧,然后我这光线和三角形求交,每一个三角形都求教一个这个物体,它就有比如说10万个面,然后呢我这个整个一个屏幕的分辨率是是这个这个这个比如4k的。

然后我每一个像素都要打一根光线,每一个像素这个数量级再乘上10万,这还得了啊,这个计算对不对,非常慢,没问题,咱们留到之后说好吧,然后呢就是说我们想象一下,如果我们就用这种简单的方法来做。

那任何一个三角形给给定的三角形和你给定一条光线,它们两个求交点,求焦点呢要么得到零的交点,要么一个交点,那同样道理,咱们图形学上呢很少考虑这种这个呃平行的这种这种情况对吧。

就比如说一根光线完美的通过了这个三角形,并且通过它所在的平面这种情况,这种情况咱们就直接忽略了好吧,然后就是说我们就考虑是三角三角形和这个光线,会有一个交点或者零的焦点啊,这种情况好,那么嗯嗯没问题。

那这就是咱们要提到的一个重要的这个话题啊,怎么样去做光线和三角形的交点对吧,然后呢这里人们呢发现了一个办法,怎么样,这是求光线和三角形交点呢,因为三角形肯定在一个平面内对吧,三角形在一个平面内。

那我就把这个问题,三角形和光线求交分解成两个问题,第一光线和平面怎么样去掉对吧,然后找到了一个焦点之后,我在判定它是不是在三角形内,那当然是可以的对吧,咱们把这个问题就进一步简化了三角形。

光线和三角形这个这个球球交呃,不知道怎么做,那么转化成光线和这个平面求角,然后我在判定点是不是在三角形内,而大家会发现要点在三角形内,这个作业里面我们做过对吧,我们知道怎么样判断。

那现在的问题就变成怎么样做光线和平面的求交,哎这是个问题,那咱们看一看光线和平面求教,还是延续咱们刚才最早的思路,怎么样去做这个焦点,我们得先把这些物体定义出来,那么光线的这个数学定义o加t d对吧。

早就已经定义出来过了,那么现在平面咱们得先想办法把它给定义出来对吧,然后呢那咱们就先想这个平面如何去做定义对吧,那想一想呢,平面我们可以定义成是一个方向和一个点,这是什么意思啊。

就是说平面它肯定得有一个法线,对不对,如果我定义了一个法线,我是不是就定义了一个平面呢,呃这个这个事情呢是不是不够的,就是说比如说我定义一个向上的发现啊,我说我要定义一个平面,我给他一个发现。

这个平面必须得是这个法线的,呃,就是说他冲着这方向,那这个平面就是就是类似这样的,但是呢我这个平面可以沿着这个法线这移动,对不对,也就是说我定义一个法线是不够定义这么一个平面的,那怎么办呢。

我在定义好这个平面一定得过某个点,就是就是咱们画的这么一个意思,那那从这个例子上大家都可以明显的看出来啊,想定义一个平面,那么给平面上的任意一个点,然后再给这个平面的法线嗯,那就够了对吧。

那咱们现在说说怎么样定义平面,是指这个平面上的任何一个点应该满足一种什么样的条件对吧,和刚才咱们定义这个光线是一样的,就是光线上的任意一个点都满足它能够写成o加td这么一种形式。

这个key prime和它的法线n来表示是可以的,满足p。p prime这么一个向量呃,和这个法线是垂直的就行了,这个是什么意思啊,大家可以想一下啊,法线是什么意思啊,这个方向是要和平面垂直的。

那既然和平面垂直,那肯定和平面内的任何一条线段要垂直,那如果说我有一个点在平面内,那么我这个平面的这个这个点和这个呃给定的这么一个点,p prime这么一连线,我会发现哦,那当然它是合法线垂直的。

没问题对吧,那如果这一个点它在平面外,大家会发现你比如说在这个平面底下吧,在这个位置,然后这个位置和这个p prime和平面上的这个点一连接,我会发现哦这个向量得出来的向量和这个法线不垂直。

那也就是说我就是说只有这个点p在平面的时候,在平面上的时候才能够满足这么一个性质,定义的任何一个这个p点啊,那这这是一个很简单的式子,然后就是说如果大家把这个式子展开之后,把这个什么这个p点写成xyz。

然后把p prime写成x0 y0 z0 ,然后n再给一个什么n x n y n z展开了之后,他就会发现诶它满足了一个这么一种性质,就是ax加b y加cc加d等于零。

然后这个很显然这是大家学过的这个平面的方程对吧,也就是说我们这种定义诶,通过一个直观的几何上这个垂直不垂直这么一个定义,我们就可以定义任何一个在平面上的点好,那么我们现在就等于把平面已经定义出来了。

所谓平面就是一系列这个p点的集合,使得这个p点呃和这个给定的p prime点的连线和给定的嗯拔线垂直,很简单,那么嗯ok然后咱们就就用到了之前定义的这两个嗯,这两量嘛对吧,一个是平面上的点。

一个是平面的排线好,那么现在我们就可以来求光线和平面的这个交点了,那怎么办呢,那同样道理,焦点一定又在光线上,一定又在平面上,所以这个点p一定又可以写成o加td的形式。

所以咱们又回到刚才的这个这个做法对吧,大家可以看到啊,这个满足这个平面的方程就等于零,我们把这个点p呢换成沿着这个嗯这个这个光线的这么一个点对吧,然后沿着光线的o加td诶,好我们把这个带进去。

然后我们现在仍然要把这个t点求出来诶我发现这个t挺好求的,因为这里还不涉及到什么二次的事情,大家看到了这个对吧,这几个量o d p prime和n这我都知道对吧,我都知道。

然后我要解说这个t是简单简单的,不能再简单对吧,我把这个t直接这个把这个这个函数这个叫什么,把这n这个分配出来,把这个比如说o减p prime点成n,然后加上t呃,乘以b点成n。

然后这个t呢自然而然就可以写成这个形式,解出来t之后,我们在判断还记得吗,得是正的,然后得是这个实数,那当然它本身是个实数,它本身这些所有其他操作数都是实数对吧,然后呢那他得是正的。

我得确认这个t得大于等于零,好没问题,那这样的话我就可以解除呃,这个光线和平面的交点,那光线和平面的交点之后,下一步是什么呢,就判断这个点是否在三角形内就可以了对吧。

那么这个事情呢其实说算是一个相对简化了的这个写法对吧,就是说就是呃就是说一种简化的思想呢,可以这么说,我怎么样去求这个点呃,和和和三角形这个呃呃光线和三角形如何求交,那是先求和平面的交点。

在判定时候的三角形内,那么人们啊这都是这个懒的,对不对,懒是人类进步的动力,我们之前一直这么说对吧,那么人们就在想,有没有办法我能够一下解出来这个光线和三角形的交点,我解出来之后。

我立刻就可以判定这个这个是不是在三角形内,答案是可以的,怎么做呢,人们发现了一种这种方法,这是这个算法呢叫做mer trouble,呃,这个这个算法啊,我们就管它叫mt算法好吧。

然后这个算法在做什么事情呢,其实相当简单,大家看啊,这个这个式子就是这个算法在做的这个核心的这个这个嗯呃怎么说呢,要解决核心问题哈,大家看到我要求光线和平面的交点,那o加pd,大家知道这个是光线对吧。

这这这光线上这任意任意一个点,这个点肯定还得在三角形内,然后如果这个点在三角形内,我就肯定可以把它写成这个呃,这个用重金坐标描述的这个这个位置上,比如说大家看这里啊,大家看到这个一点b1 b2 。

又看到b1 ,看到b2 ,看这个是不是觉得很熟悉,对不对,然后因为什么呢,因为这三个系数加起来正好等于一,而他们分别又是这个p0 p1 p2 ,这几个量加起来我们知道哈。

就是说嗯只要说这三个系数加起来等于一,我们就可以得到任意一个,在这个三个点所定义的三角形所在的平面内的点对吧,这也就是说这是这个平面内的任意一个点,用重心坐标表示的平面内的点。

然后呢我这个o加td是这个光线上的一个点诶,但这两个肯定是要这个既然是交点,两个得同时满足它两倍也是一同一个点啊,那这样的话我就只需要解除什么呢,解除时间t这我不知道对吧。

b1 b2 和这个一减b1 b2 我也不知道对,但是因为它们加起来等于一,所以右边这是两个变量,b一跟b2 ,左边是一个t好,那我就就可以说我想办法去把这个式子给解出来,然后这个式子解出来非常的容易。

为什么呢,因为大家可以看到啊,这个这个o啊,这个d啊,这些量它都是这个三维的这个向量,对不对,点或者是这个方向对吧,然后就是说它是三维的,也是一个会表示三个数,那说白了就是说我们有三个这个公式呃。

三个式子吧,三个式子有三个未知量,那我当然可以把它解出来,这是什么呢,这就是线性方程组,那解线性方程组,大家回到之前的线性线性代数的概念上啊,就是说怎么样解一个线性方程组,也就是说有n个式子。

又有n个这个变量呢,我们要用一个东西叫做armer法则,这个ramer法则呢这个这个如果大家记得的话,这个呃这个自然而然可以理解,不能记得的话没有任何关系啊,就是说这个式子你只要能列出来。

你知道哈有三个变量,三个式子你肯定能解出来,然后你通过解出来,你就会发现啊,它就是这个它定义的这么一种这么一种方式,大家会看到它定义了好多东西啊,什么s啊,e啊,123之类的东西。

然后这个其实都有明确的定义,无非就是你的这个输入,比如说这个三角形三个顶点,人的这个位置啊,和这个光线的起点和方向的一些一些不同的组合,还是叫插成对吧,虽然比较麻烦,但是解这个式子是非常非常非常直观的。

式子,解出来之后怎么办,肯定有同学要问对吧,解出来怎么办,那要判定这个解是否合理,那什么呢,什么合理呢,第一沿着这个三角形方向,也就是t还是得是正的对吧,这是第一,第二个式子是第二个。

这个要点是我得知道这个点在三角形内,那对于这种这个呃重心坐标表示了这个三角形,嗯对于对于嗯重心坐标表示的嗯三角形所在平面上的一点,我怎么知道它是不是在三角形内呢,那也就是说这三个量都得是非负的对吧。

也就是说b一是非负的,b2 是非负的,然后一点b1 b2 也得是非负的,是否这个点在三角形内对吧好,所以说呢这个没问题,然后这个解这个式子呢咱们就不多说啊,就是虽然说这是一个某个什么样的算法。

但说白了其实也是这个以另外一种不同的形式去描述这个平面嘛对吧,然后之后我们立刻可以判定是否在三角形内啊,好那么这样一来呢,呃光线和三角形求交,咱们就等于一下就可以求出来,不用先和平面求交。

这个这个意思啊,说是但是这个本质上还是一回事啊,ok那么到此为止,就是说我们这个光线和三角形求角已经知道怎么做了对吧,还回到咱们刚才说光线和这个三角形的这个这个面嗯,就是说它表示什么一个物体怎么样求教。

咱们刚才提到最简单的办法,把把光线和每个三角形都做一次这个求教,然后我再求这个最近的焦点,找出最近的焦点t最小的,这不是很简单吗,对但是它很慢,那咱们想个办法怎么样把它给呃速度提上去对吧。

那这就是我们要说的下一个话题,光线和这个表面,那所谓这个表面呢,其实我们说的更多就是三角形表面好吧,就是用三角形形成的这些三角形面好,其实这个咱们刚才已经分析过了对吧,这是呃必要的一件事情。

就是如果我们用我们刚才说的这种最原始的做法,我们当然可以求出光线,这个这个和整个场景嗯的最近的一个焦点绝对没有问题,我们把所有的这个物体对吧,都考虑进去,所有的三角形数量都考虑进去。

然后然后这个每一个像素我打出一根光线,然后要和所有这些三角形求一次交点,然后这就是这么多次计算哈,这里object呢其实指的是算是三角形的数量吧,这么理解好吧,然后如果我在这个光线的场景中弹射多次。

那我每一个光线是不是这个这个每一次弹射,我都得计算一次新的光线和这个物体求教和这个整个场景求教,那这个就就已经这个慢的不行了,对不对,那所以说我们肯定不能这个简单这么做,那那怎么办呢。

那就是说我们想办法去这个这个呃,提高它的这个这个呃渲染的这个效果好,那么我们看一下啊,这个呃这是一些非常非常复杂的场景的例子,这会给大家一个很明确的概念。

说这个场景我绝对绝对不能用我之前提到这个最最原始的方法来做,比如说这个场景,大家看到这个场景极其复杂,而且这个场景是一个经典场景,叫3米6,然后这个场景有多少呢,有这个嗯你想一想啊。

medic它应该是有1000多万个三角形,然后大家想1000多万个三角形,你每个像素假设你就一根光线,因为每一根光线都要和1000多万个三角形,然后你这个这个求交,然后结束之后再乘以这个像素数。

这还得了,特别是大家看到这些细节的这些东西,这叶子是什么东西的对吧,这个这个场景极其复杂,当然还有一些这个呃玻璃的东西嗯,就说明光线肯定弹射不止一次,那肯定是一个更复杂的问题。

那么另外一个呢这里在呃看这这么一个场景啊,这么一个场景大家可以看到有一个室外的场景,各种各样的树叶,然后各种各样的植物,然后各种各样的草,大家可以看到这个草的这个叶子一个非常细。

然后每一个叶子呢都可能有好多好多个三角形来组成,这里是2000万个三角形对吧,然后所以说非常非常多的三角形,那么这个这个如果用原始方法肯定是不行的,那么嗯我想一想哈,考虑到这个时间嗯,ok行吧。

那没问题呃,是这样,我这个这个尽量的把这块给给说完吧,好吧,ok那这个刚才大家看到的这些例子哈,那咱们嗯嗯提供不同的方法吧,这样说哈,然后叫什么呢,就是这么个意思呃,这个听上去很别扭,是什么意思呢。

我们给大家举个例子,诶,这怎么做,就是说啊比如说我有一个复杂的物体,保证这个物体一定在我的这个这个简单的这个形状之内,那对于这个二维的情况,大家看到一个茶壶,我可以用一个这个呃某一种这个所谓box对吧。

对这一个一个矩形把它给框起来,我也可以用一个圆形把它给框起来,这个没有关系对吧,我用任何一种简单的东西把它给框起来就可以,咱们就就用这个概念吧,这里有一个逻辑问题,大家把这个想清楚就没问题了。

这是什么逻辑问题呢,这是没有任何问题的,对不对,那这个思路虽然简单,但是但是啊非常非常的这个有效对吧,这个这个逻辑就是说啊,里面的东西,我根本不用看,就是这么个意思对吧,那咱们现在再看对于三维的情况。

也就是一个这个长方体,那咱们现在呢多看一眼这个长方体到底是什么意思啊,大家可以看到这个右边画了,这是一个简单的长方体对吧,那这个长方体呢它它我们要怎么理解,对平常我们的理解呢。

就是它是在空间中的一块区域,对不对,然后这个xyz各占了多少,这个范围对没问题,但这次咱们先想办法把这个长方体给这个用另外一种方式来理解,我们理解成什么呢。

理解成长方体是三个不同的对面的这个这个这个嗯形成的这个交集,什么意思呢,咱们看这个意思啊,所谓三个不同的对面是什么意思呢,就是说比如说看这个这个长方体啊,这个前后这么两面啊。

这个面和背后那两个面咱们认为是无限大的平面,那这两个形成了一对面,这么考虑啊,形成了这个前后这么的对面,那同样呢这个上下这两个面,然后我认为也是无限大的平面,它也会形成上下这么一个对面,没问题啊。

然后左右同样没有问题,左右也可以形成这么一个对面,那么现在再回到咱们这个定义上来,大家会发现非常的有道理,这个长方体是什么,就是三个对面形成的交集,没问题吧,哎所以说这是这个事。

是我们这么理解这个长方体的一个方式啊,这是有用,为什么呢,那么之后马上要输好吧,那么呃就是这么回事,嗯我们通常呃在这个嗯实际的应用中呢,我们为什么要引入这么个对面,这么个概念,叫轴对齐宝为和。

然后这个缩写成a a b b啊,也就是说啊这个我们看这个长方体,它的任何一个轴,它都是沿着某一个这个这个这个坐标轴,就是x或者y或者z,它不是某种任意旋转的,就比如说它形成的这个平面。

它形成这种三个对面肯定都不是这个啊,xy平面,y z平面,z z x平面,就是就是这种呃类型,就是它不是在空间中任意旋转,然后对应到这个二维情况啊,你可以认为是一个这个长方形。

长方形它的边一定是横平竖直的,就是这么个意思啊,就是说只是定义说它不要让它任意的跑,就是说我们在实际中会很常用这种aa bb这种表示方式,这样的话我们就非常好的解释。

对我们刚才已经提到说这样的话我们可以怎么理解呢,一个呃这个呃长方体我就可以理解成是给x范围内,就是yz平面两个不同的这个和yz平面平行的平面,再切出来的一个对面,然后然后这个呃他这中间的这个范围对吧。

x上面占据一定范围,y中间占据一定范围,然后z在占据一定范围,然后我们就可以定义这个a a b b,那这是我们这么一个用法,就是说那这个这样一来,我们这准备知识应该就已经说差不多了。

那和里面的东西更不可能对吧,那咱们判定如如何判定这个光线和一个盒子,是不是这个这个有焦点呢,那这就是一个很重要的一个内容,好吧呃好吧,嗯,那今天看来是没办法了,这个我尽量快点吧,因为这块还是挺重要的。

后面这个知识肯定都会用到这个这个呃光线和a b b求教好吧,那行啊,没问题啊,嗯这边我们先做一个简化对吧,我不知道光线和这个三维情况下,这个和这个这个盒子怎么求教,我先看二维的怎么来算对吧。

通常情况下人们会愿意降低一些思维上的复杂度哈,然后很很简单的想法,那这个呃二维情况下,如果给你定义一个长方形对吧,是一个盒子,那怎么定义,怎么理解呢,还记得吧,理解成是那就是两个对面形成的这个交集。

那么我们看 这个对面也就是我先说考虑这个x0和x1两条竖线,两条竖线,然后呃对于给定的一根光线对吧,给定任何一条光线,我可以求出来,这个光线在什么时候会和这两个这个树的这个无限大的这个面诶,有交点。

那那我们现在可以可以可以看到啊,这个光线在这里往这个方向传播,那么它在这个地面时间呃,它就会这个和左边这这条竖线呃无限长的得到一个交点,然后呢这个在tmax时间我就会和右边这个面呃。

形成一个这个这个焦点啊,这个没问题,挺简单的,那那我说那我看另外一个对面啊,另外一个对面两条水平的这个这个线,那两条水平的这个线呢,我同样可以求出这个光线在什么时候会和这个这个这个嗯。

就是说某一个呃嗯直线有交点,然后什么时候和另外一条直线有交点,就是定义这个y上面这个范围y0 y一来大家会看到这个光线啊,他是不是从o传播往d这个去,那么它一定在某一个负的时间。

然后他会和这个底下这个嗯面求得到交点,在某一个时间t max又可以和上面这个面得到一个焦点,对不对,这里呢就是说呃他大家会发现得出来了,一个这个不太合物理规律的一个这个t时间没关系,咱们先放在这儿好吧。

先放在这儿,假设这个光线是直线,然后咱们马上最后最后再处理它是射线的情况,那就是说呃我对于任何一个对面哈,我都可以求出这个呃光线它的精确的时间和出去的时间,这个没问题啊,就是即便它是负没关系啊。

就是比如说这里我知道哦,这个光线在拼命时间进入了这这个竖着的这个版嗯,然后两个板之间对吧,然后在t max之间出去了竖着的这个这个板,然后这个横着的这这这这一对板呢,我知道他的tm时间进来。

在t max时间出去,那么我现在问这么一个问题,那么我知道这个光线什么时候进入,分别进入啊,这两对板什么时候分别出局这两对白,那么我如何得到这个光线在什么时候进入了这个盒子。

以及在什么时候出血了这个盒子呢,那大家可以看到对于二维的情况,其实它是一个简单的这个这个看法对吧,就比如说这里大家当然知道啊,这个光线在这个时间实际进入了这个这个盒子对吧。

长方体在这个t max时间实际出去了这个长方长方体,那这个要怎么理解呢,为什么说我得到了这么两个线段对吧,为什么我得到这么两个线段,那事实上来说我这条线段右边这条线段才是这个光线。

实际这个在这个盒子里面的这个时间呢,就是从地面进入,从t max出去呢,大家会发现这是怎么做的呢,这两个线段实际上他求了一个线段的交集,大家可以看到为什么,因为这个盒子本身它是两个对面形成的交集。

那么现在对于你这个光线来说,你分别和两个对面求出来它的这个这个输入呃,这个进进入和和这个呃这和和和出去的这个时间,那么这个我把这两个线段求一个交集,我就可以得到这个呃这个这个光线啊。

实际进入和这个移出这么一个盒子的实践对吧,就是tm和tmax就这么做,就是说有这么两个这个这个线段的这个交集啊,我们求出来就可以,那么这到底是为什么对吧,这就是我们要思考的一个问题。

而这个问题同样可以直接用逻辑性的事情来这个得到解决,那怎么解决呢,咱们直接看这个三维的情况好吧,怎么样去看这个这个光线到底和这个盒子是否相交,那么现在就是这么回事,从三维的情况下来考虑,三维的情况下。

给一个盒子,其实就是这个三个对面,对不对,然后这个这里就是说我们这个最最重要的一个一个思想啊,就是说啊我们想这个光线什么时候,它才会算是进入了这个三维的情况下的一个盒子,那么我们自然的这个想法。

就是只有当光线进入了所有的这些这个这个对面,就是有三个对面嘛,都这个三个对面都必须满足光线已经进去了,我们才能说这个光线进入了这个盒子对吧,是这么想,就是他是这个这样一个逻辑问题。

那么我们说光线什么时候离开这个盒子呢,那就是说光线只要离开任意一对这个对面,这个光线就已经离开这个盒子对吧,这个就是说这么两个这个这个核心的这么一个呃一个一个一个观察啊,就是说这是这是逻辑上的一个事情。

那么咱们立刻就可以得到一个这个算法出来了对吧,对于这个三维空间中了,我这个嗯有三个不同的对面对吧,就三个不同的这个这个这个呃三组嘛对吧,x y z方向上。

我个计算一次这个这个光线进入这个对面的最小时间和最大的时间,我们不管是正是负对吧,我就什么时候进入这个对面,什么时候离开这个对面,那根据我们之前考虑的这个这个观察的结果上来看啊。

就是说我们什么时候才能说这个光线进入了这个盒子呢,它必须得进入所有的三个对面,我才认为光线进入了这个盒子,那也就是说我对于所有的进入时间听命三组啊,然后我求出它的最大值。

这是最晚最晚光线进入进入最后一个对面的时间叫做t enter,也就是这个光线真正进入这个盒子的世界,那么这个同样道理,光线什么时候会离开这个盒子呢,我们刚才分析的,只要光线离开任何一个对面。

这个光线就已经离开这个盒子了,那是这么个理解,那什么时候光剑离开这个任任何一个对面呢,那就是最小的时间,他离开这个三个对面,还有三个不同时间,那求出最小的这个时间,那就是光线离开任意一个对面的时间。

那这里就我们就通过这个这个思路分析啊,我们就明确地得出来好,光线在什么时候这个这个进入这个盒子,以及什么时候呃离开这个盒子对吧,那么这里大家也就可以明白说,为什么说我要把所有的进入时间都求一个最大值。

以及这个离开的时间反而求一个最小值,这就是这个之前的两个这个逻辑造成的这么一个情况对吧,然后好,那没问题,那这样的话我知道光线什么时候进入盒子,什么时候离开盒子,那么什么时候有焦点呢。

如果说进入的时间小于离开的时间,说明什么是什么问题,说明这个光线在这段时间内,它就在这个盒子里,所以它这个所谓stays a while,就是就是说他他在这个盒子里面了一段时间,那当然这就是有焦点。

反之就没有交点,很简单,就是相当于是我们求出三组,三组这个对面这个光线的这个进入和离开时间,然后分别求,然后然后在这个通过上面的逻辑,咱们把它求出这个光线呃,进入和离开这个盒子的世界,如果进入了时间。

这个呃早于离开了时间,那这个光线势必要在这个盒子里待一段时间,那这就是有焦点没问题,但是到目前来来说,基本上来说是对的,但是呢这个还是有一些问题没有处理的,比如说我们一直没有考虑说这个负的值要怎么考虑。

我们一直在考虑说一个其实是一条直线,和这个呃和这个呃一个盒子的求交点对吧,那咱们现在开始考虑说这个呃负的情况怎么考虑对吧,那么光线显然它不是一条直线,它是一个射线。

那我们要检查这个时间t是不是正的或者负的对吧,然后然后就是这么个意思,那我们现在有两个时间t对吧,一个是进入这个盒子的时间,一个是离开这个盒子事件,那么说它这个进入盒子的时间,如果是呃呃是是这个意思啊。

如果说光线离开这个盒子的时间是小于零,那说明什么问题呢,那说明这个盒子它一定在光线的背后这样想对吧,因为光线我们反向延长,然后我们才会发现这个t这个exit和这个t enter这个都小于这个呃。

呃都小于零对吧,小于零的概念就是说在它背后就是光线离开这个盒子的时候,是在光线背后,那就说明这个盒子是在这个光线背后的,是不可能有交点的好,那这种情况咱们已经考虑清楚了,那如果这种情况不满足。

那就是说当这个当这个离开的时间是正,那那这种情况下我们还要考虑正负,那这个时候就会出现说这个呃进入这个合作的时间,如果它是负的,会怎么样,对这种情况说明什么问题呢,这种情况其实这个也是一个很常见的情况。

大家可以想象一下,就是说给你一个盒子,然后然后这时候我们不考虑什么对面什么东西了对吧,我们已经把这个进入和离开盒子的时间都是考虑清楚了,那如果说这个有一根光线诶,他穿过这个盒子。

然后它自然可以找到一个这个呃进入的时间和离开的时间,两个都得是正的,那什么时候会出现离开的时间是正的,反而进入的时间是负的呢,那就只有一种情况,就是这个光线的起点就在这个盒子里,虽然这样讲。

那么光线的起点如果在盒子里面的话,那他肯定是在一个正的时间离开这个盒子,而且在一个负的时间进入这个盒子,那这种情况光线在盒子里面,那么我要判断光线和盒子是否有交点,那这不是显而易见的,肯定有交点吗。

因为这个光线一定在盒子里,不管往哪个方向去,肯定都要和这个盒子相交,所以这个时候一定有交点,那么咱们就把这个所有的正负情况都考虑清楚了哈,前提啊前提咱们刚才说了,在有交点的情况下。

在刚才这个进入时间小于这个这个这个离开时间的时候,这说明光线在这个呃你这个盒子里面得到了一定时间的停留嘛对吧,这就是这个嗯有交点的情况,所以咱们总结起来好,总结起来光线和aa bb有交点,当且仅当啊。

这里不是写错哈,这个是if f,这个是指当前紧张的意思啊,当前紧张什么呢,非常简单的条件就是说当且仅当这个进入时间小于离开时间,并且离开时间大于等于零,这就可以离开时间是非负的,就是这样的话。

我们就可以得到这个最后的结论,那么刚才这个怎么算这个进入时间和离开时间,咱们刚才上一页就已经说清楚了对吧,求最大的最小和最小的最大,这样听起来有点别扭,但是通过刚才那几个逻辑,就是说光线呃还是一样。

回顾一下光线呃,要想判定他一定进入了这个盒子,那他必须得经过得得确认他进入了这个所有的三个对面,才能说他进入了这个盒子,而光线离开这个盒子,我只需要知道这个光线只要离开了任意一个对面。

那他就已经离开了这个盒子,没问题吧,那行那就是这个逻辑是最重要的,这一块呢相对较难,然后回去这个可以体会一下好吧,然后就是说只要这个逻辑能想清楚我们为什么做这个mean和max。

这就肯定没有任何问题好吧,那么行,那这样一来呢,这个这个ok这一块就差不多了,然后呢有一些细节上的事情咱们处理一下,比如说我们说这个我们刚才提说要用axis aligned bbox。

就是横平竖直的对吧,然后为什么要这么做呢,是因为啊这个光线和这些这个和这些坐标轴啊,这个平行的这么些面,他求这个焦点好求,怎么求呢,比如说我们我们刚才说了,光线和一个平面求交,我们知道怎么求这个时间。

我知道对没问题,但是其实这个计算挺复杂的对吧,那如果说这个光线本身啊,它和这个和这个这个就是说这个啊这个盒子,它的这个平面和这个轴什么东西都是平行的啊,这种情况就很简单,就是说咱们说这个嗯。

比如这个对面哈,它是和y z平面平行,于是这两个都是垂直于x轴,所以咱们可以直接看x轴上的传播,那怎么做呢,就是说从这个o加上某个t乘以d,它会和这个呃这个点呃得到一个交点对吧。

嗯那么对于这种情况下来说,如果说我只看x轴方向的传播,其实就够了,怎么说呢,就是说我用这个p点的这个x啊,呃x坐标减去o点的x坐标,不就是这段距离嘛对吧。

就这段距离我直接除以d这个方向在这个距离上的分量,然后这样的话我就可以直接立刻可以得到说这个在时间t呃,是是是是什么时候我可以这个认为光线打到了这么一个板啊,其实就是利用了一下,说我这个当这些轴嗯。

当这些平面和这个呃各种各样轴垂直的时候,这些计算会相对容易一些,就是这个意思,大家可以看到这里这个计算量的对比,上面还要做点乘,下面直接用x分量就可以做出来了,多简单对吧。

就是x y z3 个分量咱们分别考虑就可以了,所以从这个角度上来说,我们为什么要用这个a a b b这么个概念啊,好那没问题,那么呃我觉得今天差不多就可以讲到这里。

然后后面再会给大家再说这个更复杂一点的,这个呃不是说更复杂吧,到这里来说,对吧好,那么咱们今天就到这儿,哎呀抱歉,这是行吧,反正这个嗯这节课这个重要概念就是这个光线和这个不同物体的求交。

特别是和这个a a b b的求交相对较难,如果大家发现这个理解上有些困难的话,没有关系,因为他本来就拿多花点时间去思考一下,这也是这个之后大家要实现的一个内容哈,这个嗯在作业里面啊,ok那没问题啊。

那今天咱们就说到这儿啊。

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

咱们把时间交还给技术秘书同学,感谢大家的支持啊。

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

好。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值