GAMES202-高质量实时渲染 - P8:Lecture8 Real-time GLobal Illumination (screen space) - GAMES-Webinar - BV1YK4y1T7yY
亲爱的各位同学们,大家好,欢迎来到我们的games 202的第八讲啊,今天我们会讲呃,实时的录实时的全局光照那的另外一部分,然后我们着重将讨论一下嗯,在屏幕空间的一些方法啊。
然后在今天的课程之前还是一样,我们呃说几个事儿,第一呢作业号现在已经发布了,同学们应该已经可以看到了,对不对,然后z2 呢不容易关于p2 t的,然后由于它本身就涉及到两部分,分别要编程嘛对吧。
预计算和实际渲染,然后两块都应该怎么算,然后这块反正大家这个上课呃,按照之前我们说的这些内容,然后好好理一下思路,差不多吧好吧,然后作业三呢呃有同学会关心关于什么呢,是关于屏幕空间的反射。
里面的那个洞穴的全局光照啊,这么个意思就是说呃大家可以看到一个光呃,只从这个洞穴的顶端,那照到洞穴中的某一个位置,但为什么其他地方都是亮的呢对吧,这就是因为全局光照嘛。
而且还是呃diffuse物体的全局光照,然后这一块呢我们希望用一个简单办法,就是下节课我们要安排的内容呃,screen space reflection,简称s s r屏幕空间的反射或者光线追踪吧。
一回事,然后呃我们用这个方法来把全局光照给做出来,差不多,这就是作业三的内容,然后呃有一个广告要做,就是我们的games 101,目前来说还急需要更多的grader,然后这里非常希望大家能够踊跃报名。
好吧,嗯然后呃这里稍微降低一些要求吧,就是之前我要求说大家一定之前要上过gg 01,但事实上大家想一想,之前gap 101在开课的时候,所以说不应该有这个要求,所以咱们现在把这要求给去了啊。
所以只要你会感兴趣,希望能够帮助到大家,然后都可以欢迎报名,然后呃成为grader啊,好吧,那这就是我要说的一个事情,那么上一节课呢,我们嗯主要提及的事情是这样的,就是我们把p r t部分给说完了对吧。
我们从呃glossy的部分开始,我们把p r t怎么解决glossy问题,以及他的一些代价,我们把它给说了,然后我们又说了一些呃一个吧,一个对这个之前最早的p r t的一个延伸。
那就是用wait这种奇函数,来来代替之前的s h,那么它的好处坏处对吧,然后上节课着重我们要说的是一个在3d空间,或者世界空间中的一种全局光照的方法,那就是用这所谓2s m啊。
reflective shadow maps,然后他的基本思想呢自然和shadow maps是差不多的,就是利用了这么一个思路,就是说shadow map所看到的东西,那自然就是你这个场景中。
直接会被照亮的东西对吧,而直接照亮的东西呢就可以当做刺激的光源,并且在间接光照中当做光源去照亮别人对吧,然后我们思想就是这样做的,那么呃整个的全局光照,差不多都是这么一种思路来解决的哈。
然后今天我们大家可以看到之前的两个呃,在3d空间中的方法,我们还没来得及说l pv和v x g i,然后这里呢我们都说一下好吧,然后今天我们呃在说完这块儿之后,我们就开始说呃屏幕空间的一些方法呃。
然后今天按照时间来说,我大概这么安排,咱们能够顺利把s s a o和ssd o,这两个方法给说完,嗯s2 的话呢留到下一节课去啊,大概这么安排,希望咱们今天能够时间上一切顺利好吧。
呃那咱们就从第一个要说的事情开始对吧,我们先说玩3d的这个呃一些呃,剩下来的两个方法,先说lpv lpv是什么呢,叫light propagation volumes。
然后从这里嗯这名字起的其实就非常好嘛,然后大家可以看的就比较清楚,看到这个名字,基本上就可以猜出来的是个什么思路了对吧,他是希望啊,在三维空间中是由volume这个词猜出来的对吧,那是体积嘛。
就是在三维空间中去传播这个光线,然后呢我们就可以用它来做一些间接光照。
那么它是什么道理,咱们马上就会说,首先呢先说一说它的历史,lpv lpv最早是在这个cry engine 3里面引入的,然后呃我没记错的话,他就是为了做这个crisis游戏啊,就是crisis。
中文应该叫孤岛危机啊,人称显卡危机,是那个时代说,这个游戏用了很多各种各样的新技术,然后对显卡是一个非常巨大的挑战,所以人人人们又称他显卡危机,然后呢呃这其中的一项重要技术,那就是lpv。
那么lpv就可以把全局光照做得非常好对吧,然后大家可以看到这幅图啊,就是从应该是crisis里面来的,用到了lpv,然后lpv做全局光照,它有两个非常好的性质,第一它非常快,第二它质量也非常好对吧。
然后这就是为什么我们要学,我们之前不是说rs m会有它的问题嘛对吧,然后lpv这里呢就一定程度上能够解决呃,一部分问题,另外多说一句哈,就是说这个工作是谁做的。
lpv这个工作是一个叫anton anton carplan,这个大神超级大神做的,然后呃他也是我的合作伙伴,然后我们最近呃他在facebook嘛,然后我们就在讨论一些合作的项目的问题,然后呢。
嗯我们之前就是我和清华合作的一篇paper啊,待会儿跟大家说哈,就是在在做从直接光照去猜测,间接光照的一个工作,然后他非常喜欢安藤,特别喜欢,然后他最近好像在带一个队伍。
在试图从这个工作出发继续再做一做新的东西,就是用一些神经网络相关的东西,来解决全局光照问题啊,给大家说一说这块历史啊,anton这个超级大神啊,做的lpv方法。
然后得到了广泛的应用,ok那么呃lpv,那它要解决的一个最核心的一个问题是什么呢,他他就是看到了这样一个点,那么我为了做全局光照,或者说为了做间接光照,我其实是要的是什么东西。
我要的是在任何一个shading point上,如果我可以立刻得到间接光照,到打我这个shading point的时候,来自于所有不同方向呃,他的这个radiance都是多少,那我就可以做间接光照了。
这话说了跟没说一样对吧,这本来就是我,我自然得知道间接光照到达这一点,从任何一个方向的reading值多少,我才能做呃,间接光照嘛对吧,然后那但是这个问题一旦被提出来之后,然后总结成这么一句话。
大家就可以针对性的来解决这个问题,好吧,那我对于任何的shading point,我是不是都得去能够立刻得到他的radiance,那这是最好的,对不对,那么这里呢lpv方法他就用了一个非常有意思。
以假设啊,这这不是假设啊,这是这是物理事实啊,就是什么呢,就是说呃radiance这么一个概念呃,它在空间传播的过程中,比如说我这这点开始呃,我发出呃某些radiance,然后我到达了另外一个位置上。
沿着一条直线在直线传播的过程中,我会认为radiance是一个不变的量,它是不变的,这个概念我们老早之前就在用对吧,我们之前在做啊,pass tracing的时候,大家还记得吧,从t点我打出任何一个点。
打到q点去,那么在q点他接受到的直接光照,打我往p点走回来的呃,这么一个出色的这个方向对应的radiance,那也就是你的p脸接收到的radiance,是我们认为沿着一条线上,它是完全一样的。
没问题对吧,那所以这是对的,radiance在传播的过程中是不不会被改变的啊,这是一个非常重要的一个概念,咱们之前radio ometry也提到了这个事情,对吧,嗯ok好的,那么呃呃有同学问平方衰减。
那是另外一个,那是另外一个量了,大家还记得intensity,那是另外一个量,那是因为在传播的过程中面积不断增大,所以单位面积上intensity就会降低嘛,这是另外一个概念哈。
然后嗯嗯radiance呢自然跟这个没关系,它本来就是定义在基本上是一条线,就是就是为了定义传输而产生的一个量啊,这就是关键,那么那么关键的解法是什么呢,咱们刚才在呃呃提到volume这个词的时候。
就已经提到呃呃差不多能够想到了对吧,怎么做的呢,就是说lpv它首先呢对一个场景做了一个网格,一个场景是3d的,对不对,你把场景分成一个3d的一个网格,切豆腐一样的对吧,然后33d的一个网格中间呢。
大家可以看到我这幅示意图,那自然是在2d中间做的对吧,然后大家可以看到这其中的一个格子,那那就是他的一个所谓vocal叫提速啊,vocal大家可以类比一下所谓texo嘛对吧,txt中文叫文素。
道理一样的,那么呃嗯把整个场景先分成格子,然后这个格子呢就是用来传播radiance的,那大家想一想,传播radiance从从哪儿传播到哪对吧,那我肯定是要传播间接光照的radiance。
那我这之前我可以先算直接光照,跟r s m是完全一样的概念对吧,我把直接光照算好,那么这些被直接照亮的物体,它们作为刺激光源往外发出的reading,哎这就是我的起点,就是我要从这里开始呢。
从这幅图上大家可以看到对吧,呃这右边这某种物体吧,不管是什么,它的任何一个点接收到了直接光照之后,它会有反射啊,这就是呃间接光照那的来源对吗,间接光照来源从这里开始,然后我要问在场景中任何一个格子上呃。
他收到的呃radiance是多少对吧,我就是想问这么一个问题,那自然就是从这个红色的这些箭头开始,然后从他们对应的格子开始啊,然后一直传播到所有场景中,所有其他格子去啊,说白了就是这么个意思对吧。
这是非常有道理的一件事情,radiance既然是在传播过程中,它是沿着直线不变的,那么自然而然可以这么来做对吧,那么下面怎么做呢,咱们就简单提一下,就是啊我先说一下,就是说关于这些3d空间的这些方法。
这两个方法啊,这两种方法都不会特别就说的特别详细,像上一节课的rs m一样,不是因为他们不重要哈哈因为非常重要呃,但是嗯就是它里面涉及到的细节实在是太多了,我尽可能能够把这个逻辑给说清楚好吧。
然后呃很可能说完了之后你还是不知道怎么写,但是你会清楚说他大概一个思路啊,这个就差不多了,因为确实非常难写好吧,呃3d空间中的这种全局光照,这是确实是一个比较大的一个挑战哈,然后我是觉得是这样。
有同学之前还问对吧,说咱们这门课最后不是有个大作业吗,大作业这大家写什么呢,再说他还真有兴趣挑战一下吧对吧,l p z或者v x t i实现一下,那没那么容易的,而且还记得我之前说的嘛。
就是可能你实现出来,跟比如说工业界实现出来他们的demo,然后效率可能差了个十倍,这是非常正常的一件事情啊啊ok啊,不管怎么样,那咱们先回到说lpv怎么做的,那最最最最high level是什么意思呢。
就是分成这么几步,第一步呢首先我要知道哪些点,它是会发出这种嗯,就是作为刺激的光源对吧,这是跟之前2s m一模一样,哪些点接收到了直接光照嘛对吧,那这是第一点,那第二点就是这些点或者这些面对吧。
呃他们接收到了直接光照,呃,我首先我要把它给放到,我把场景划分在这格子里面,我要不放到格子里面,我怎么从这格子传播到其他格子呢,对不对,然后就是说我原本我知道的指场景中的若干点,这些光源或者是面。
我先把他们给呃,这这叫注入啊,这是他们呃起了一个名字,injection,注入到场景中的这个三维的一个网格,中间的任何一个格子上面去啊,这么这么来做,这就是你的起点,那自然有了这个起点之后。
你就开始在这个三维的这个网格中,你来传播radiance这么一个做法,那么当你传播完成之后,那么你整个场景是不是就全覆盖了,你任何一个位置,你都知道间接光照传播到这一点,从任意一个方向。
他的radiance多多少,那怎么办呢,直接拿去渲染,是不是这个意思,所以说听起来是非常嗯正确的一个思路对吧,然后呢它具体稍微具体一点点怎么做的呢,那他第一步呃就是说首先生成嘛对吧。
生成呢你肯定要知道哪些surface会直接被照亮,不过这里呢大家还还记得,上一次我们说rs m有个问题对吧,有多少光源就得做多少r s m这次还是一样的,在这里还是一样的,也就是说它并不解决这个问题啊。
我是说直接的光源的数量哈,就是呃r s m找到场景中所有的呃,直接光照照亮的表面,然后呢,嗯你可以认为说不必要说我这所有的这些表面,所有这些像素呃,我我都把它当成刺激光源。
然后呢我在其中我可以采样一些对吧,这都是没问题的,然后我可以降低一下啊,这些当做刺激光源的表面的一些数量,这都没问题,咱们之前的rs m里面也这么做了对吧,然后呃这样的话。
那我就得到了一系列的虚拟的光源,这就是第一步对吧,得到了一系列虚拟的光源,那大家还记得右下角这幅图这些小的太阳,这些就是嗯次级的光源的啊,第一步完成,那第二步是什么呢,注入对吧,还记得吧。
呃如果我的一个场景中有很多小的次级光源了,大家看哎这上面这些这些哦,哦对鼠标哈,这里大家看啊,呃这个物体表面被照亮的这一部分,哎这些地方都是刺激光源对吗,那么我为了做传播,我得首先把这刺激光源。
先把他们给放到对应的格子里面,我先把它转换成格子上的属性,对不对,那呃首先我场景得有一个3d的格子吧,然后对于这块来说呢,其实呃工业界的做法是直接用一个三维的纹理,纹理来说,也不见得一定得是二维的纹理。
可以是三维的,没问题,这样的话就是有了一个3d的一个格子嘛,没问题,你可以定义任何一个text,它对应的在3d空间上是哪一个vocal,这样就没问题了,ok嗯好的,那么有这样一个信息之后呢。
你就看任何一个呃格子内部,之前这些虚拟的这些光源,对不对,它们朝向可能各不相同嘛,对不对,然后你可以把他们整个的这些呃这个格子内部,所有的虚拟光源,他们往各个不同方向的这些radiance。
你都把它们给算出来,比如加起来嘛,对不对,加起来了之后,然后这个时候大家可以已经可以看到,这个格子里面用的这个形状了对吧,但是不是很熟悉对吧,呃那这个时候加起来了之后,它往四面八方去。
他的radiance初始值都是多少,那它是一个空间上的呃,呃往不同方向上的分布,我自然可以压缩,它拿什么呢,s h啊,所以大家就看到了,spherical harmonix是非常有用的一个东西吗。
然后在这里呢呃大家可以看到在工业界上,大家用了多少s h呢,就用了四个,也就是两阶,就是前两层大家还记得吧,第一层一个,第二层三个就那么多,四个s h g函数就用来表示这么模糊的。
还一种大概的一种reading分布吧,就这么个意思好吧,然后大家可以看到是很粗糙的对吧,然后之前我还记得上节课跟大家说,ravi啊,之前推出来呃,说对于diffuse的物体,它接收到光照。
你也得至少得按照三阶来处理,但是工业界很多大胆假设两阶啊,总共四个数就可以表示这个格子,它往四面八方去,它的reading的分布初始值是什么呢,好那初始值知道了,下一步是什么呢,开始传播是不是开始传播。
怎么传播呢,那就是大家可以看右边这幅图,假如说一开始呢,嗯你就这个格子里面有呃实质性的这些呃,radiance这些内容,然后他往各个不同方向都要都要去的,对不对。
然后呢呃它应该会传播到它周围的格子上面去,对吧啊,这这肯定是没问题的,那么它怎么传播到周围的格子上面去呢,哎这时候就是说哎radiance不是按直线传播的吗。
你之前就认为说哦radiance是在一个网格的中心,然后呢它是往各个不同的方向去,当他穿过,比如说它的上表面的时候,大家知道一个格子不是六个面的对吧,一个格子是六个面。
然后我就看他的这些radiance,穿过上表面的这些radiance,很明显都会被它上面这个格子收到,对不对,那这嗯同样这个格子之前的radiance,它穿过右表面的这么一些radiance。
都会被右边这个格子收到,那这就是这里初始了,初始他先考虑右边哦,那就是一开始它的分布,你看四面八方都有的嘛,然后但是有多少方向是向右的呢,差不多只有右边这么一小块儿是向右的。
所以说唉这块儿被右边这格子收到了,夹起来啊,没问题,然后这样的话嗯你就会发现它可以向右传播,同样向左也是一样对吧,它向左大家看向左原本就挺少的,然后又是穿过左边这个面的,那就更少。
然后这是2d的一个描述嘛,那空间上总共六个面吧,那肯定一个格子会传播到它周围的六个格子,里面去啊,这是这么一个做法,那么传播刚才已经说了,就是直接的直接贡献过去,就是加起来嘛,然后这样的话呢。
呃你就知道它传播到其他的这些呃地方,然后他们的这些radiance是多少了,没问题,然后然后呢,其他的这些格子照样还都用s h来表示就好了,ok那这样的话我可以对每一个格子。
我都把它扩散到周围的六个格子里面去,我只要重复的不断的去做这么一个操作,直到最后整个的网格稳定下来就没问题了对吧,这就是呃,不管是图形学还是就整个计算机科学吧,经常用的迭代方法对吧,我可以迭代若干次。
那么有同学关心,大概多少次之后能够变得比较稳定呢,差不多迭代个四五次就比较稳定了,这是一个非常非常小的一个数目啊,这个意思啊,ok然后差不多,这就是这关于他的第三部怎么样传播,传播完了之后。
那你自然就知道整个场景呢,呃在任何一个格子上,他的radiance你就都知道了吗,知道了之后,第四步是什么呢,就是渲染对吧,那第四步就是我就已经可以对任意的shading point。
我知道他在哪个格子里,我知道他在哪个格子里呢,我就把这个格子呃,之前我算出来他接收到的incident radiance啊,所有方向吗,s h表示的嘛对吧,所有方向,然后呃都拿到都拿到之后。
那我自然就可以用它来做渲染了,没问题好吧,不过呢这么这么做会不会有什么问题对吧,诶嘿嘿嘿嘿嘿哎,这听起来是非常美好的,对不对,那么他的问题是什么呢,大家从这幅图上就可以一目了然的看到呃,这么一件事情。
什么呢,那就是诶你看啊,这里假如说这个墙原本这这这有一堵墙,它的左半边啊,就这里呃会被直接光照照亮,然后呢它会往四面八方去反射去,然后它反射那肯定是往左边去的,对不对,往左边去。
他无论如何不可能照亮右边这堵墙,咱们说清楚啊,左边这这这个点它反射出去的radiance,绝对不可能照亮右边这堵墙,但是呢由于你把整个场景分成了格子,那就是说啊在这个格子里面。
你都认为他的radiance是一样的,你还记得第一第二部在做注入的时候对吧,你会把这些所有的这些点,它发出的radiance,都认为是整个格子上都是uniform的一个radiance。
那就会出现什么情况呢,就会出现这个p点,他的radiance,你会认为在这个格子里面,全部都是这个他的radiance,那么他就会照亮他自己的这个背面,看到看到这一面对吧,唉所以说就会出现这么一个问题。
这这不出事嘛对吧,然后这叫什么呢。
这还记得吧,这个问题就是还是之前一样,咱们再说vs m出现的问题,light leaking问题,然后就是说光线原本来说,这个这个道理就在这儿,大家看这个棚子它的顶它向上的对吧。
它怎么可能会照亮它的底下呢对吧,然后所以说正常情况你应该得到这样的结果,但是lpv却给你这样的结果,那么问题是呃就是呃就是这样产生的对吧,那么它的根本原因是什么呢,是因为啊你有你。
你有一个非常细的这么一种几何对吧,它的它的力度会比一个格子还要小了,是这个意思吧,就是当你的这些几何比这格子还小的时候,那自然就会出这个问题,那我要格子划分的无限小非常小。
唉那这样的话就不会出这么一种问题,但是肯定也有代价,我要画的足够小,至少我能想到两个问题,第一什么存储对吧,3d的空间里面,你格子画的那么细,那这个存储吃不消啊,这是一。
然后第二呢就是说你在做propagate的时候,你在做做这个传播的时候,那你要考虑格子数就更多了,是不是,所以说这样算这个事情呃,也会比较慢对吧,那就会出现这么一个问题,那么现在我集中处理一下。
同学们说的这个问题吧,有有一位同学问,问到了一个非常重要的一件事情,什么呢,在传播的过程中,你不考虑说这格子能不能看到下一个格子吗,啊这里仍然是一样,做了假设和和2s m是一样的。
呃我会认为在传播的过程中,我不考虑visibility,否则考虑的话就非常难了好吧,然后这是一第二呢,有同学说斜对角的格子不计算传播吗,呃不计算,为什么呢,因为你可以想象一下。
你穿过斜对角是怎么穿过去啊,就是说你可以认为说呃有一个中间一个点,他先传播到了他左边这个这个这个格子啊格子,然后呃这左边这个格子再传到它上面那个格子,这这不就相当于是一个道理吗,就是就是嗯。
就等于是你当前这个点传播到了它的斜对角,一格子嘛,这不是一回事吗,对吧,先先往右传,再往上传,跟你直接往右上,这是一样的,没有区别哈,ok啊然后呃有同学问说是哦很多问题哈。
咱们咱们慢慢处理哈啊六个面传播,道理就在这哈,就六个面传播,你省得你考虑27个对吧哈哈,然后嗯就是说有同学问,能不能用自适应的分割方法啊,那这应该是我说对应我们刚才说的,就是你格子要划分的大了呃。
就会出现light leaking问题,你要是格子画的小了的话,你就会出现存储啊,以及这个计算会难的问题,那能不能自适应能没问题,而且工业界会用,那就是所谓不同的分辨率的格子呃。
然后来做这么一个传输和计算,然后这位同学提的非常对啊,完全可以,而而这种基本方法在啊实时渲染的工业界,就叫做cascade,这就是这就是基本基本的这么一个思路,也是平常我不太愿意说的,然后为什么呢。
因为在实在实时线上,大家管它叫凯sk,然后在学术界或者是离线渲染,大家管它叫啊multi scale或者叫level of detail啊,都是一回事,其实呢就是相当于有一个有一个这种层次。
就是这种东西呢,正常情况下,对于这些大家设计的这些基本的结构,都会有这么一种安排,咱们马上就会说啊,vx gi也有这个上嗯,好的,那么呃有同学问格子一般多大合适,这个反正会比场景少一个数量级。
差不多是这样的啊,然后呃呃我是说比那个像素的数量哈,至少是少一个数量级啊,然后有同学说光沿格子传播的时候要改变方向,不不不会光怎么会改变方向呢,嗯ok嗯这里没有kd tree这么个概念哈。
目前来说就是空间中的一个格子,而就是如果我们没考虑所谓,multi scale或者cascade的这种概念的时候,就是空间中划分成几乘几乘几这么一个格子啊,然后并没有层次结构啊。
然后一个格子被很多格子同时贡献,当然可能啊,一个格子可能会被他来自他周围的六个面,都可能会贡献他们,他也可能会贡献到周围的六个面嘛,一样的对吧,嗯哦以及以及可能现在没有同学问哈,我说一下呃。
难道没有同学关心说我这这个传播这过程中,难道他一定最后会收敛,达到一个稳态嘛,他不会一直很不稳定的这么传播嘛,对吧,会有什么问题啊,大家可以想象一下,这就好像是你在一个池塘里面,你投入了一个石头一样。
然后它会不断地产生这些这些这些叫什么呢,就是就是波纹嘛,然后最终最终它会稳定下来嘛,就是这个意思,然后对于咱们这个光线传播来说,光线传播最后呃,他呃你可以认为又没有其他的外力。
所以他最后肯定会通过这种方式,然后达到一个稳定的状态啊,这个意思嗯对没问题,然后我确认了一下,有同学说呃,每一次迭代是每个格子像它周围的面传播,说的太对了,就是这么做哈。
ok场景中有啊这种volumetric的东西,那咱们就不再说了,好吧,有误的话其实是没问题的哈,就是只不过说这种传播方式就会变得不一样,我之前读到过一篇paper,他就在用lpv的思想来解决。
说我怎么样考虑这些在这些云烟雾里面,这些光线的传输。
它就不再是直线了嘛,对吧,有人这么做的哈,ok那咱们继续吧,这个回答了不少问题了。
那么大家看一下这个例子哈,大家可以看到呃,挺好的,这个质量呃,除了这视频压缩的时候是有点问题啊,但是没关系,大家可以看到直接光照在发生变化的时候,间接光照也会在不断的发生变化,对不对嗯。
然后呢大家可以看到这是另外一个例子了,这是带纹理和最终颜色的,然后大家可以看到一个移动的,这么一块红色的布,使得你离近的这些地方都会反射出红色,看得很明显,对不对啊,比如说我鼠标停在这儿。
大家可以看到这儿越来越红了对吧,因为这个红布被直接光照照亮嘛,然后其他地方都会呃收到间接光照,那就说明lpv呢它是一个非常不错的一个方法,挺稳定,然后对于动态的物体处理的都非常好好吧。
那么啊这里多说一句,对于glossy的接收物同样也是没有问题的哈,咱们之前不是就这么说的嘛,对吧就是呃ok嗯行,有同学问这是不是预计算的方法,这并不是啊,这是实时的,你都要做这么一个计算哈,ok嗯嗯行。
有同学又说格子,每个格子存的是不是相当于是light transport,挺对的,没什么问题哈,对对可以这么理解,那这就是关于这块儿啊,lpv方法呃是是怎么运作的,那咱们就直接继续了好吧。
因为这里说的也不是特别详细,那我们再说另外一个方法什么呢,就是vx gi,vx gi,它是什么的缩写,vocal global illumination,大家可以看到又是提速,又一次出现了这么一个呃。
就是场景中又出现了格子这样一个概念,只不过呢他和lpv是完全不一样的一个概念,那他做的是什么呢,这里我就说的非常非常high level了哈,然后就是说它仍然是一个呃两趟的一个算法。
大家会发现有很多方法很喜欢两趟不算了对吧,rs m也是这样的,嗯其实啊算起来啊,lpv它算是四方的算法,然后比较麻烦,然后呢v x g i呢基本就是两趟差不多,实时渲染,有很多这样类似的思路啊。
拆分成不同的pass,每一个pass解决不同的问题,那么两趟的算法自然而然人们就要问,那它和2s m也是两趟的算法有什么区别呢,对吧,这里呢提供两个呃主要的区别,第一什么呢,就是说在2s m里面。
四级光源都是呃,每个像素所表示的一些微小的表面,没错吧,然后在v x g i里面,你的一个场景是已经完全离散,化成了一系列的格子呃,这个非常好理解什么呢,你就把这场景给理解成。
就变成了一个用乐高堆出来的场景就好了嘛,对吧,或者像我的世界一样,这样这样一种场景的表示方法对吧,呃然后就变成这么些格子呃,那整个一个场景划分成很多不同的格子,然后这个格子呢在这里这就是刚才有同学问的。
在这里会用到一个所谓的hierarchy,把这些格子组织成一棵树形结构,就是它有有有小的有大的啊,然后就可以认为大家看到右边这幅图呢,它这就是最最怎么说呢,最细的一个层级就是说最小的这些格子。
大家可以看到分布在这个物体表面的格子,这些所有的这些地方嘛对吧,那么多格子,然后呢你可以在上面再做一个呃,呃层级比他高,然后格子大一些对吧,然后同样道理,这样可以最后建立出来一棵树对吧,ok那没问题。
就是说啊咱们总结一下,这是第一个区别,第一个区别它在场景中的任何一个呃,所谓刺激光源,从之前的像素改成了提速变成格子哈,ok那么第二点是什么呢,这一点就是和之前lpv完全不一样的,一个思路了。
就是说之前呢嗯lpv里面呢,你你要考虑到任何一个shading point,他要接收到什么样的呃radiance对吧,然后我是靠传播的方式,我是从刺激光源开始。
然后一路传播到呃这么呃不同的shading point对吧,然后呢我传播总共要做几次,我传播总共要做一次,没错吧,就是整个场景来说,我不是做完了注入之后,不管我用多少r s m哈。
只要这一步注入这部完成之后,我传播只用传播一次,我就知道场景中所有的shading point,他他任何一个位置上,他的接收到的间接光照reading值多少对吧,那这里呢就是一个不同的地方。
当然也不同于2s m他是怎么做的呢,就是说呃v x g i的第二趟它是从camera出发,然后还是一样去渲染整个场景,就好像你有一个呃camera rain打到任何一个像素上。
然后根据这个呃根据这个像素它本身的呃材质,比如说glossy的材质,那你知道camera ray达到一个glossy材质,会变成一个类似一个锥形的东西往外反射,对不对。
然后呃这个追它会相交到这个场景中的哪些,你之前预计算好的文素,而不是叫预计算好的吧,就是就是已经存在了的元素,那么这些文素自然而然对你shading point的贡献。
就可以算出来你会发现什么怎么做的呢,它就是每个shading point他都要做一遍,所谓空tracing啊,这么个意思,咱们这种类比较retracing了一次,你trace一个光线。
而这里呢对于gloy的表面,你就trace出来一个空就好了啊,这么个意思就是圆锥哈啊,ok然后当然你这样一想就会觉得这个方法呢,那肯定会比lpv要慢嘛,因为lpv整个呃传输我就做一遍。
然后这里contracing每个像素做一遍,是不是,然后当然可以优化哈,这之后再说,那这是两个截然不同的一个呃。
呃就和rsm不同的安排啊,那么他是怎么做的呢,具体啊就是说他要对整个场景,然后先把它都变成小的这种文素和格子啊,然后呢在这些格子上建立一个所谓hierarchy,这右边这幅图呢大家会建。
这就已经比较熟了嘛,咱们之前game 101就一直提到说,咱们做re trading的时候对吧,然后我要怎么样判断一根光线,快速的和哪些这些呃三角形相交嘛对吧,然后这里一个道理了。
就是就是你场景中已经描述成了很多小的格子。
这小的格子也可以组织成这么一棵树哈,那么第一个pass在vs g i里面做了什么事儿呢,就是所谓一样的light pass来决定哪些呃地方,哪些哪些这些vocal啊会被照亮的。
当然还是要从哪些patch会被直接照亮开始啊,这里我就说了,开始简略一点哈,就是首先你要做一趟所谓light pass,你不管拿什么样的方法去做呃,rs m也行啊,别的什么方法都可以。
只要你能算直接光照,那你知道任何一个patch它的直接光照,但是呢我这个场景,首先我是我是认为说这个场景呃,是用voxl来表示的,那就是说对于任何一个小格子,跟之前的那一lpv的注入就会非常像诶。
我这个格子里面它的所有的这些表面,然后它会有一个什么样的分布,不过呢这里他会认为说我记录的不再是啊,任何一个这些呃,这些表面它的一个出色的一个分布,或者认为我这个表面都是diffuse的。
然后它是一个半圆形,半球形的一个分布,它这里呢可以支持这些反射物,也是glossy,那么他做了一个比较聪明的做法,做了什么呢,就是说我认为说呃我一个vocal里面,我记录他的光源呃。
就是所谓incident lighting啊,它的一个分布,那光源都主要从哪些范围来,这里我记成一个某种分布,lob,大家看到这绿色的一个,然后又记录说在这个vocal里面,他的这些表面问啊。
就是用来反射这些光照的这些表面们,他们的这些法线,它的分布大概都是什么样的对吧,然后这样一来的话,你有输入的这么一些呃方向,你有法呃,法线的大概在哪一个范围内,你有这两个范围。
你当然可以根据这个这个格子呃,它到底是glossy啊,还是diffuse啊,你就可以直接算出来它出色的这么一个分布,那出事的这么一个分布,那自然就比你之前一个格子啊。
我记录他这认为它的反射面都是diffuse,然后再用s h来压缩,它就比这个要准啊,这么一个思路好啊,具体怎么做,咱们就不再多说了,那么你一个格子是不是可以这么来做,记录它incident的范围。
然后normal的范围,那么对于这个这个嗯,那我就把他这些很多小的格子,他们的输入方向和这些normal,我们都都都给考虑在一块儿,然后就是相当于是呃,可以建立这么一个hierarchy啊。
这就是你的第一步这么做,所谓light pass,那第二步怎么做呢,有了这个事情之后啊,第二步就是我们刚才说的,你要开始实际考虑渲染了,实际考虑渲染,考虑你的任何一个pixel。
你知道camera的方向,那你自然知道,如果这个pixel它是glossy的,那么你这一根camera就会被反射成一个圆锥对吧,然后就是所谓这么一个空,然后有一个最最简单的最朴素的方法对吧。
哪一方法怎么做呢,从10point连出一个追,你看场景中的所有的文素所啊,体术啊,所有体术vox,所有的提速,你都你都判断一下,是不是和嗯嗯和这么一个圆锥相交相交的话呢。
你把这个提速他对这个shading point的贡献算出来,而且咱们刚才说了对吧,有能有任何一个提速它的输入的方向,光照输入的方向,又有他们的这个normal分布的方向,你肯定可以算贡献到任何一个点。
它的确定是多少,具体咱们不说了,但是你可以这么算对吧,一个空里面它相交到了所有的呃这些呃提速,那这样是不是会非常慢,而且呢咱们刚才既然已经建立了一个hierarchy,那我何必这么做呢,那我可以这样想。
在一个圆锥的传播过程中,它是不是越变越大呀对吧,大家可以看到一开始你可以认为它覆盖的范围,空间中很小,后来他越传播传播到后面,它的覆盖范围就越来越大,那么我干脆就根据它这个圆锥呃,它离你的初始点的距离。
我大概算出来某一个范围,然后根据这个范围的大小,我就直接在我对应的这个呃,之前整个场景的voxel表示的hierarchy上面,我找对应的层级对吧,我找对应的层级,使得说我找到了对应层级上的一一块。
那差不多就是我这个呃呃这个光线啊,这不是这个这个圆锥往前走的时候呃,然后他到达了这么一个呃地方,它所覆盖的范围,那那那这样的话大家可以看右边的这么一个呃,例子啊,这也是一样的对吧,这是二维的一个表示。
然后这圆锥在传播的过程中越变越大嘛,当它变得够大的时候,我就在在更大的这个层级上,我去找呃,之前记录好的呃提速的信息就好了对吧,这不就行了吗,这样的话你看我为了踹死我,为了得到吧。
多少提速能够对这个圆锥嗯的起点,shading point能有所贡献诶,我在这么一个场景下,我只用查四次就差不多了对吧,然后也就是说他其实是挺轻量级的一个做法,当然你每一个学龄point都这么做。
那还是挺慢的,对吧啊,ok那这就是他的一个基本思路啊,这样的话就可以省去你每次都查最小的文呃,呃文素对吧嗯ok嗯。
那么有同学会问这么一个问题对吧,如果对于glossy的呃物体表面,就是你camera达到的glossy的物体,那反射出去是一个圆锥,那要是diffuse,这不出事了吗,defuse的话。
你camera打到一个diffuse物体上,它往四面八方都有反射呀,那我不是反射出一个180度圆锥,不是不是这样的一个圆锥吗,那不是场景中所有东西都有嘛对吧,那这种情况下。
就是啊可以考虑成一个超大号的圆锥,但是呃嗯发明这篇paper的人们啊,他们认为说啊,我不如认为说我可以用若干小一点的圆锥,我能把整个反射的这么一个巨大的,这么一个球给覆盖住。
然后每个圆锥的贡献把它加起来就好了是吧,我这样算也不错对吧,嗯然后这样的话呢就等于大家可以看到,对于这个例子来说是画了八个圆锥,对于一个呃defuse不提,我八个圆锥差不多就覆盖了对吧。
然后之前先先预先分配好嘛,哪个圆锥的中心和大小到底是多大,因为你要覆盖一个半球,你你老早就可以算好这个应该怎么样,往不同方向应该往哪儿去,该每一个该多大对吧呃,然后又有同学可能会问到说呃。
这是大家可以看到圆锥和圆锥中间这时候有缝,然后以及他们可能会有一些overlap,这些不准问题都不大啊,基本上来说对diffuse这是完全可以接受的好吧,那基本上来说vx gi就是这么做的。
那大家可以看到他做了一件什么事,就相当于是之前lpv他是把所有的次级光源,他们的呃发出的radiance都先给传播到我的呃,整个场景的任何一个地方去,这样的话我传播做一次。
然后但是呢由于他用的格子以及ssh,表示它不怎么准对吧,但是它会比较快,然后呢v x g i它呢呃就是我我还是一样,所有的刺激的这些光源我都记录下来,并且记录成一个层次结构。
那我对于任何一个shading point,我自己去找到底哪些刺激光源能够贡献到它,我用这个所谓contracing的方式哎对吧,那这样一来的话呢,我就嗯可以得到一些比较不错的一些效果。
然后自然而然造成代价呢就是会比较慢嘛对吧。
那大家可以看一看呃,这个效果来说还是不错的啊,这是nvidia当年放出来的一个官方的一个视频啊,从direct lighting开始,大家可以看到这是direct,那所以求的是下半部肯定找不亮嘛。
完全是黑的嘛,对吧哦,这里场景就已经被描述成为一些voxel了,大家可以看到所有表面啊,这原本的这六个大的人面也都是变成格子了啊。
球上还可以看到一些呃artifact对吧,这些是因为呃采样造成的,这是标准的这些pattern啊,嗯ok。
他这个视频我印象中就非常啰嗦了,他每一个地方都展示很长时间啊。
这里大家不不不太需要区分什么嗯,这些vox到底都描述的是什么东西啊。
咱们就理解成差不多这样啊,然后大家可以看到呃。
场景已经被描述成这样的格子了,然后呢。
o但他应该是在调某一个什么样的光源,另外一个光源哈。
然后再照亮这个场景是什么样的,然后大家可以看到,如果我用刚才的提速,然后我来呃渲染场景的间接光照,那么我会选出这样一个结果,看起来非常漂亮,对不对,就是说就是说质量是非常高的。
因为刚才那个提速对场景的表示嘛,就表示的非常好了,已经对吧,然后呃呃大家可以看到这个间接光照,应该没什么好挑的对吧嗯。
ok然后最后应该有一个对结合在一块的结果,你把间接跟直接给加在一块对吧,然后就可以得到一个看起来非常不错的一个,最终结果了。
ok啊,更多的例子,大家自己可以网上找到一大堆v x g啊,因为这个早期的技术嘛。
呃然后呢我是这么理解的哈,vx gi质量是在那个时候,可以认为是非常不错的,它比lpv肯定要好,然后但是由于开销还是大了一点,然后导致说嗯就是说它的应用得到了一些限制,还有一个更重要的一个原因啊。
不知道同学们想到没有,就是说你要想把一个场景先给提速化,然后这是一件非常麻烦的事情,是很可能是需要预处理的,然后特别是对于一些动态的一些事,一些物体来说,那那那它动起来每一帧是不是都要提速化。
这是非常麻烦的一件事情,你要实时的去提速化,它又会非常慢啊,这个事情,所以说嗯这是一个他的一个比较大的问题,而且大家可以看到它的提速是非常小的嘛,对不对,ok然后我看到有同学问要查多少次的问题。
就是说呃哦我刚才只是随口一说哈,像刚才一个glossy lob,他到底要查多少次,我说刚才对于2d的那么一个示意图来说,他查了四次,就是说到底查多少次不知道,然后呢以及呃对于diffuse来说。
它的呃圆锥的数量增多了嘛,要查的次数肯定也增多了嘛对吧,然后这是挺有意思的一个事情,然后呢呃嗯即便vs gi它开销很大,再稍微现代化一点的呃,我我想了想哈,对,v s c i最早应该是发在啊。
202012年的一个paper上面,我记得是这样哈,然后嗯再后来之后,比如像ps four出来了之后,然后像他们的硬件就比2012年的,要好很多了,然后我我我记得是这样的,就是说我我有一个呃博士学生。
然后叫周扬,他在他在来之前,他在加入我们组之前啊,应该是实现过vs g i,实现到p s four的蜘蛛侠游戏里面哈,然后当时不是说vs g i啊,不是v x g i,就是蜘蛛侠那个游戏。
它的全局光照做的特别好嘛,那就是因为他的v x g i这么一个技术哈,做的确实好,v x g i确实可以得得到啊,质量相当高的全局光照,然后另外一点呢,为什么它效果好,是因为大家可以看到。
它已经非常像我们之前所说的呃,啊photon mapping的方式对吧,已经很像呃,离线渲染,我在我在做的一些操作对吧,因为每一个像素我都要做一次tracing嘛,然后呃然后自然而然结果就会好一些啊。
这个意思ok那关于这块大家还有什么问题,不就是这样的话,咱们这块三维空间中的这块我们就说差不多了,o我看同学目前好像没什么其他问题,那咱们就省点时间,直接开始吧,好吧嗯,那咱们就开始进行下一块啊。
好像有点延迟,那么现在有同学有问题,我看一下吧,l p v和v x g i的阅读资料,这一块我想了想哦,上一次没有说吗,啊上次我记得应该是有的哈,在课程网站上找一下吧,好吧应该是有的啊。
然后高阶的提速是平均值嘛,就是更大的提速,是不是把这些小的提速,中间记录的这些范围们都给平均起来,没那么容易,这倒是更多是收集在一块啊,嗯ok嗯,现在的游戏都用什么全局光照的方法,lpv还一直在用。
然后这是没有问题的,然后用的还是很多,现在还有一些基于probe的方法,然后咱们目前暂时先不说,是因为我想把它拿到后面和和和什么在一块呢,和实时光线追踪那块放在一块说ok嗯嗯行。
lpv有没有假设defuse reflector,这个问得好呃,好从我的感觉上来好像是假设了哈,如果我没记错的话,好像他也假设了deflector,不过好像他没必要这么假设,但是呢话又说说回来。
他虽然没必要假设reflector是啊,是diffuse的,但是他考虑他的一个voxo里面,既然用s h来表示了,那如果是一些glossy的一些物体的反射的话,呃是不是就就就就是也是会糊掉啊。
所以说他考虑不考虑diffuse reflector,只要他用了s h,基本都会认为他是diffuse reflector,咱们就认为他就只能处理diffuse吧,好吧,应该没问题啊,这样考虑ok好。
那咱们就直接开始后面一半啊,screen space啊,屏幕空间的方法同样还是为了做全局光照,那么呃什么是全局光呃,不什么是屏幕空间对吧,或者说屏幕空间方法,人们一直这么说。
到底指的是呃呃是是是哪些限制对吧,那我们想一想啊,就是屏幕空间,那自然而然顾名思义,我们就想就是说你所有能够拿到的信息,就基本上只有屏幕空间上,也就是说你屏幕上能看到的东西,也就是话话话说回来。
也就是在你做全局光照之前,你在屏幕上能够看到的东西,那么你在全做全局光照之前,在屏幕上能看到什么呢,那你自然就只能看到直接光照,是不是这个肯定是没有问题的咯,那所以说你基本上来说屏幕空间的方法。
指的就是啊,就是说嗯,你你仍然还是从这个camera角度渲染这个场景,你在做全局光照之前,你先得到的这样一个呃直接光照呃,这就差不多就是你全局光呃,就是你的屏幕空间方法呃,开始要用到的所有信息了。
就是没有其他的一些信息了,比如说嗯这沙发背后是什么,沙发背后你不知道,因为你从这个屏幕这边,就是从你的camera看,你根本看不到那边是什么,就是这么个意思,就是你所有知道的信息基本就是这张图。
direct illumination,那么你要干嘛呢,你就相当于是对这张图你要做一个后期处理,做一个后期处理,相当于做一个图像空间上的一个一个一个处理,然后你把这些啊全局光照给弄出来。
不管通过什么样的一种方式啊,啊大家还记得我刚才提到这个事情,就是啊lpv的发明者安藤,他对我们这篇paper的工作啊,这篇paper就是和清华大学在一块合作的一篇paper,很简单啊,就是说给你呃。
就是说我们想训练一个神经网络,给你直接光照,然后行,你去把这间接光照给猜出来,然后咱们把全局光照什么的加一块,那大家从这个效果上看好像还是ok的啊,然后嗯那么这就是屏幕空间。
那咱们区分一下这几个概念好吧,那如果严格意义上来说,那么我们可以把什么呢,把rs m咱们可以把它当做图像空间,叫image space,因为它毕竟啊很多信息是来自于你的,呃,从你的light开始的对吧。
你要你是从shadow map里面得到的对吧,然后呃这个叫做image space,然后呢那咱们马上要说的screen space的方法,s s a o s s d o呃。
这些那都叫screen space,就基本上来说,你的信息都来自于你当前这个屏幕,也没有什么其他视角啊,然后呢呃那lpv和v x g i啊,那自然这就是我们刚才说的3d的空间,或者叫世界空间。
world space啊,一回事,那基本上来说做就做这么一个区分好吧,屏幕空间,那大家可以认为起点就是直接光照好,这样理解,那咱们开始说呃,屏幕空间我们怎么样做一个一个东西啊。
这个东西叫ambient exclusion,然后中文叫做环境光遮蔽,环境光遮蔽,然后叫io,然后总共就叫s s a o就是屏幕空间的呃,环境光遮蔽好吧,那环境光遮蔽是什么鬼,对吧哈哈。
他们肯定要说对吧,然后还是一样,咱们从历史开始说啊,s s a o呢最早大家又又看到了crytek啊,crytek是非常夸张的,这是非常厉害的,就是说这些研究游戏引擎,他们可是有一帮人非常非常的厉害。
然后现在呢知道unity啊,unity啊,虽然他啊,虽然他这个渲染器本身它它有点弄不过arreal,但是在学术界呃,unity research还是非常猛的,然后他们发了很多高质量的一些一些文章。
所以unity还是挺有未来的哈,我们这么一说啊,ok那么crytek啊,然后他们发明这么一个screen space ambient occlusion,如果我没记错,他当时应该是引进二代啊。
如果第三代是做刚才咱们说的那lpv啊那些,然后这是二代里面就有的功能啊,s a o好吧,那么就是说呢,我们呃为什么要搞这个什么screen space,ambient collusion啊。
我到底要干什么,大家从这个图上来看就可以看的比较明白了,那什么呢,右边这一列图哈,右边这一列图是所谓没有环境光遮蔽的,ok然后呢左边这一列图是有环境光遮蔽的,那么我现在就就就直接通过对比。
咱们立刻可以得到一个直观的感受,什么是环境光遮蔽啊,对不对,环境光遮蔽,好像就是把这些物体,他们的这些相对位置给标示的更明白了,通过什么标示的更明白了呢,通过一些所谓contact shadow。
也就是物体和物体之间接触的时候,你会感觉到他们中间的这些地方会暗一些,特别是就是我很喜欢这个灯这个例子啊,大家看到这个灯对吧,这个灯放在一个物体上,然后正常情况下,你确实应该是想象着他们接触的这个地方。
会有一些阴影对吧,然后大家看这里也是一样的呃,这应该是某个什么空间站的走廊,对不对啊,这不同的物体之间,那肯定是会有一些阴影在这些东西之间呃,那也就是说啊,环境光遮蔽其实就是一系列所谓的呃。
所谓的contact shadow,给我们造成的一个嗯造成了一个感觉,什么感觉呢,就是说让物体它们的存在感更强了,不是存在感,就是说它们的相对位置感更强了,这么个意思好吧。
然后呃然后这是当然是一个重要理由了,就是因为它可以给我们提升这么一种视觉效果,那当然非常好对吧,然后另外一个呢是因为ambient occlusion,是非常非常容易实现的,对哈哈哈。
ok还有同学说立体感非常对啊,就这么个意思,就是说这就是我们为什么要做这环境光遮蔽啊,这个意思也算是一个简单定义,那么屏幕空间的环境光遮蔽到底什么东西啊,然后这里给大家一个最最最最精准的一个定义。
什么屏幕空间环境光遮蔽,首先环境光遮蔽,做的就是对于全局光照的一个近似好吗,就说为什么物体和物体它们接触了靠着较近诶,他们中间看起来就有阴影对吧,那其实是由于全局光照造成的啊,ok那咱们说清楚。
ambient collusion,首先是全局光照的一个近似,然后呢屏幕空间,那意思就是说哦我没有世界空间那些信息,有的信息呢,还只是呃在这个屏幕内部的一些东西,就是还是刚才咱们那个起点。
就是你还是从camera看过去,你能看到所有东西啊,你能看到的物体,它们的发现,他们的深度,这些东西都可以得到,因为反正是你一个camera pass能够渲染得到的东西,好吧,screen space。
但是这两个重要的事情,那么s s a o它是怎么做的呢对吧,然后他是这么一个假设啊,什么假设呢,咱们来听来听听来看啊,一个是呃,我们是不知道间接光照是什么呢,对吧。
给你任何一个shading point,你你如果不通过计算,你肯定不知道它的间接光照是什么,那么没关系,我不知道间接光照是什么,我们可以假设间接光照是一个常数。
也就是说呢对于任何的shading point,从任何一个方向过来,它的间接光照都是一个完全相同的一个数,那要这样的话,同学们有没有想到,我们之前曾经说过一模一样的一个假设啊。
这这个假设对你来说是不是非常熟悉呢,对不对,然后在这里呢给你一个图,然后作为一个提示啊,那这幅图是什么呢,对不对,然后就是说这个假设又是什么呢,那行那我相信同学们已经知道了对吧。
那就是之前我们在推这个布林冯reflectance mode,对吧,在推这一个着色模型的时候,我们说啊布林冯卓的模型里面,他会认为比如说我们之前的game教练,要说一个茶杯的背面。
它并没有被呃直接光照照亮,可是它完不完全是黑的,那是怎么做的呢,他就认为啊不管你任何一个点,他都会接收到来自环境的各种各样的光照,而这些就认为是呃就是就是多次反射啊,这些间接光照啊这么些东西。
而不管任何一点都接收到间接光照,并且任何一点接收到来自任何一个方向的呢,呃电源光照都是一样的,那这样的话它就会得到一个完全平的,一个一个一个呃这么一个一个结果,就让最后结果直接会呃提升一个亮度。
就是这么一个意思了,但是呢这里就是说screen space ambient collusion,就是ambient collusion,这一块,会比我们之前那个假设要稍微好一些的地方了。
那就是第二和第三这两个关键的想法什么呢,就是说啊这里在ao这么一个上下文理,它虽然假设啊来自于四面八方的incident,lighting是一样的,但是不见得你所有方向都能接收到,因呃这这种间接光照。
ok那就是说如果你的一个shading point周围,它有一些各种各样什么样的几何,它可以把这些物体它往各个不同的方向,而他有一种遮挡在里面,也就是说任何一个shading point。
他的visibility function不是二维的吗,往各个不同的方向都有一个visibility嘛,对吧,任何一个shading point,他的visibility function。
这里我会把它显示的考虑出来了,就是这么一个意思,就我不再说,假设说哦,我任何一个点,我真正接收到的incident lighting也都是一样,那样不就平了吗,就是说大家可以看到我所说的。
就是这么一个区别哈,你可以认为来自四面八方的这些呃,呃间接光照嗯,嗯对于任何一个shading point都是一样的,但是任何一个shading point他不见得都能接收的到,就有些地方就被挡住了。
比如说大家可以看到这是一个人的头的模型,呃,可以认为这是眉毛的眉骨吧好吧,然后这里是比如说靠近眼窝的一个位置,诶,那这个时候当你在眼窝的这么一个位置,这个地方往上看的时候,那肯定会被肋骨挡住吗。
那这样的话就认为我这就从这个方向来,就不可能接收到来自于这个方向的解决,光照了哈,那这样的话,这个地方就肯定会比其他地方要黑一点对吧,就肯定跟这额头相比,额头呢往四面八方看的都能看得到对吧。
那那那所以说这个地方就会黑一些诶,那这这两个呃是哪个好哪个不好,但是一眼就能够看出来对吧,大家肯定会更喜欢ambient conclusion,因为他少做了这么一个假设。
他不再认为visibility往各个方向都一样了,任何shing point啊,这意思,那么呃这里补充一点哈,就是说在啊一些三维的建模软件里面,也就是说在离线渲染里面也同样有这种东西,这就好像说啊。
你你去就是你考虑呃所谓uniform的间接光照,不就好像说你考虑给你一个模型,你去拿一个纯白的一个环境光去渲染,直接光照嘛,这不是一回事嘛对吧,然后这种在3d建模软件里面被称作天光天光。
然后呃他们就不不叫环境光遮蔽了,然后所以说啊,大家可以看到工业界有各种各样不同,神奇的名字,然后他同样道理,它渲染出来的结果,那就看起来就肯定跟ambient录制一模一样对吧,然后就是这么一个感觉。
用来显示一些模型挺好的啊,这个意思呃,然后我刚才说这是两个假设嘛,第第第第二个假设,第二个关键点就在于是不同的呃,visibility,郑和的shading point啊,有不同的visibility。
那么另外它还假设是diffuse物体啊,这么个意思就是说呃如果glossy这些东西,那那我不管,我就是还认为我就当是dcs物体来解他的呃。
ao是什么啊,这么个意思好,那么a o呢,这到底是个怎么回事,所以咱们刚才已经说了对吧,然后给你任何一个shading point,比如说大家看左边这幅图,给你任何一个事情况,你往四面八方去看诶。
他不见得都能接收到间接光照,他如果被一些东西挡住了,他就接不到,但如果说没被挡住,它就能接到,他是这么理解哈,那么从这个点来看哦,它这往左边这三根啊,这是接收不到间接光照,右边都可以啊。
然后对于这个来说呢,大家可以看到这类似于这个瓶子内部,还可以这么理解,那他基本上往所有方向都会被遮遮挡住,只有这些方向能出去,那也就是说在这一点他不就该黑一点,是不是,然后在这一点是不是就该亮一点。
但道理是非常明确的,对不对,然后呢我们这门课我更愿意把它说的深一点哈。
咱们把这个呃它背后的这么一个理论给说清楚,为什么我说它是对全局光照的一个近似呢,那不管怎么样,所有的这些理论,他都是要从rendering equation开始的对吧。
rendering equation没有任何问题,然后呃大家还是看到光照b2 d f可见性啊,对吧,这么三项,然后呢这里呃我们还是考虑什么呢,还是考虑之前一个,大家已经非常熟悉了的一个近似。
这个近似我们之前管它叫做a real time rendering呃,approximation或者叫real time rendering equation哈,这是我们这门课程,我们管他这么叫吧好吧。
就是把呃一个product integral,中间的某一项给拆出去嘛,大家还记得吗对吧,f x g x乘起来积分,我把fx的积分拿出去,并且呢除以一个空的积分做归一化,这就是呃这个正常的一个一个思路哈。
另外我说一句呃,这概念不存在,还是咱们这门课上,这是我起的名字,the real time rendering equation,没有这个概念,然后客场咱们当黑话用,大家知道我说什么就行了。
正式场合别这么说啊,这没这事,ok行,那么我这里要干什么来着对吧,我这里不是相当于是我要考虑任何一点的,visibility嘛是吧,然后那没关系啊,就是说我对于running equation。
那它这么复杂对吧,lighting b r d f visibility,我把visibility给拆出去就好了对吧,然后visibility拆出去怎么拆呢对吧,visibility啊,拿出去之后。
这这中间剩下的东西是这个对吧,然后visibility自己的积分除以一个空的积分,那直接应用刚才的这么一个哈,呃这这样一个呃进四嘛对吧,这是没问题的,我把facsibility拆出去,拆出去了之后呢。
嗯然后我就会发现哦,拆成两项,那左边这一项大家可以看到是什么呢对吧,visibility拆出去,上面这积分我不知道,上面这积分我不知道,可是下面这积分我再清楚不过了哈,下面这个积分没积分任何东西。
然后积分整个半球啊,半球对于cosn积分cos theta,然后对于对于立体角整个积分起来结果是什么,结果是派啊,然后呃这怎么做啊,如果同学忘了微积分的话。
你把这个立体角拆成sin theta d c a d fi对嘛,然后你再对c a和f分别积分,然后你就积分出来,结果是派啊,没问题,下面是一个定值派,然后这里呢就是呃在在这个ao这个领域。
人们管它起了个名字,就叫做ka啊,这ka是一项嗯,这一项呢大家可以看到就是就是什么呢,就相当于是在任何一个点,我往四面八方看过去,我看到的visibility的一种加权平均的一个值。
是按cos加权平均的对吧,然后可以这么理解哈,我从任何一个shading point,我往四面八方去看我,我别的都不管我,我不管什么lt不管是b2 d f我就看visibility呃。
然后我就我就发现哦,这就是我的一个平均的visibility,没问题,从01啊,值是非常非常明确的,从01k然后呢呃我我们再看另外一项,那拆出来另外一项什么东西啊,另外一项太简单了。
为什么另外一项这个积分里面积分的是谁呢,间接光照的这输入间,也就是这个间接光照的强度吧,redis对吧,readings,我我们刚才才假设呃是常数对吧,这是常数,那跟不同方向没关系,跟跟点都没关系。
其实就是相当于是是一个数,l i in in direct direct对吧,它是一个数,然后b r d f呢我又假设了,还有这个物体是defuse,也是个常数,好了好了,那那就那就太简单了对吧。
然后这两个是常数,然后我就知道哦,这个结果就应该是这两个常数呃,对于diffuse大家还记得吗,defb 2 d f是一个lbl除以派啊,这个除以派什么乘以派的这个事情搞清楚啊,然后呃还是一样。
积分本身会产生一个派派和派消掉,那最后这个结果就是呃所谓呃albedo diffuse,albedo,然后乘以它的这个呃间接光照的这么一个强度,当然这个间接光照强度你也不知道多少,你随便指定一个对吧。
然后关于这个呃嗯就是所谓diffuse物体呢,它的嗯他的lb do到底应该是多少,你也可以随便指定一个,所以也就是说这右边这一项基本就是,你随便定一个颜色就好了,没问题吧。
这是工业界也不是常常这么做了对吧,那也就是说关键的就是前面这一项,所谓ka这一项啊这个意思,然后呃ok那基本上来说就是这么一个意思了,也就是说一个常数乘上一个你所谓的平均,visibility。
这就是你能够得到的间接光照,然后在这一个点,那它的值到底是多少啊,多少啊,然后这就是呃他背后的这么一个理论,然后呢我这里说清楚,就是这里讲的是讲的深了一点啊,这是这是因为呃就反正我是这么发现的哈。
在所有的这些资料里面,对就是单讲r t r4 ,这本书里面关于ao讲的极其的混乱,非常混乱,各种各样,因为因为工作太多了,然后前后有很多这个就感觉对不上的东西啊,然后我是觉得呃。
就是说呃直接从rune question来推导,这是最对的一个做法好吗,然后所以说ao是什么,ao就是说一个平均的尾巴不得乘上任何一项,你给的数就行了,就就就这么回事啊,然后这里呢既然说的深入一点。
我们就再再说的更那个一点哈,就是说我们刚才已经提到了,说呃从一个通用的角度上来说啊,我把一个product integral,然后我把它给拆除其中一项来,并且除以空的积分,这是为了做归一化。
我们其实可以这么认为哈,认为什么呢,刚才我们已经用了就是平均的visibility,刚才才说对吧,那这里呢我就认为说我把f从这个f乘g积分,里面拆出来,其实就是呃要求一个这个f在g的support。
就g的覆盖范围上,这个f的平均值是多少,我把它拿出来就好了,没问题吧,然后所以说呢嗯大家就可以看到,看到这么一个事情啊,就是说呃这里就更简单了,大家可以甚至把咱们刚才之前的这些呃,这个理解这个给忘掉。
咱们就理解成诶给你一个product integral,你就把其中一项它在这个范围内,在它覆盖的范围内,它的平均值拿出来就可以了,没有任何问题,ok那么为什么它就是平均呀,大家可以看到之后,我们会说啊。
这里不是特别多说,嗯这这这里嗯就简单说一句,就是所谓加权和除以权衡,这是是标标准准的加权平均的做法,然后这里只不过是一个连续的写法,大家如果把它写成积分啊,写成求和的话,fx乘以w x对吧。
除以除以这个下面的这个对w x求和,那其实标标准准的就是一个求平均啊,并且让他值不至于发生一个呃,范围上的一个变化,比如说之前我们说visibility不是0~1吗,那你在一个范围内求平均之后。
他肯定还是01,这就是咱们刚才为什么这底下有个除以派啊,没问题啊,就ka项肯定是01,那行吧,没问题,这里就是我想得到一个呃,就是呃更理论上一个总结啊,fx这里你其实就是把fx拿出来。
拿出来的是什么,拿出来的就是在g的覆盖范围上,这个fx的平均值ok行,那没问题,那同样呃呃对了,说起来就是你这样拿出来什么时候是准确的哈,就是咱们之前不是说过吗,一个呢它的覆盖范围比较小。
support的小,另外一个呢它比较smooth对吧,这时候是准的,那么其实对于ambient clusion来说,这是百分之百准的,这gx是什么gx,不是说诶诶诶间接光照乘以b r d f吗。
间接光照乘以b r d f,它不就是它不就是一个常数吗,就是js常数的情况下,这个这样做是百分之百准的,也就是说ambient clusion,在这里这样一个拆分是没问题的啊,没问题。
就是你假设了diffuse,假设了这个啊,incident啊,呃间接光照呃都是常数的情况下,a o这么拆分是准确的,拆分没问题,不是个近似,ok好,那么啊这反正就是说把它说的严谨一点。
那么第二个事情我要说的更更呃,复杂一点的理解诶,这个理解就是我我非常想分享给大家哈,然后这可能要稍微更难一点,那么呃是这么一个事情啊,大家注意到什么了呢,注意到我们刚才不是做这个拆分吗。
注意注意这个拆分我是不是用的不对,哎呦同难道没有同学指出这么一个问题吗,对不对,我这我这嗯大家看哈,之前之前我这积分呃,我不是说哎fx乘以x然后对dx积分对吧,然后我我我就把fx减x拆开,都是对dx。
看见没,都是对dx积分诶,那我这里面大家可以看到我这积分是呃,对d我们一个i积分,我把v拆出来之后,我为什么不是上面是对v在d欧米伽i上积分,然后下面对于一个空的东西,在d欧米伽i上面积分。
但是现在大家发现,我是对cosin theta乘以d我ei,你会发现我我就好像红框框起来,这块是个d什么什么什么什么东西一样,是这么做的,嘿那我这样做能对吗对吧,我应该把这两个cos项这两个都给划掉啊。
就是就是拆出来的这一项,这两个cos都划掉才是我们之前的这个用法对吧,那所以说这就这这这这这是一个,我很想问大家怎么解释的一个问题哈,这样我解释给大家听一下这个意思啊,啊这么做啊,然后就是说呃。
我们为什么真正能够把那个cos想也给和这个d,我们一个i一这一块拆出来,这个时候呢我们要引入一个概念,叫做呃投影了的立体角,你听着名字麻烦啊,这这一点不麻烦,我们之前说立体角是什么来着。
立体角不就是在单位球上一个面积对吧,单位球上的一个面积,这就是这就是立体角,然后这个面积我又乘上了一个cos theta,这theta啊,大家记得球面坐标下theta的开始是北极。
从北极旋转到南极是0~180度啊,这是theta,然后就是说那我这个立体角,也就是这么一块面积乘以cos theta是什么呢,哎大家会发现正好就是啊这个这么一个面积,也就是说把这个面积啊。
从之前的这个球上给投影到了一个单位圆上,ok投影到底下一个圆上,这就是这么一个东西,也就是说cos c塔乘以d,我们伽i它是有明确的一个定义的,它其实就是一个呃微分的一个面积。
只不过它是在单位圆上的一个面积o这样说,ok所以说呃这样的话呢,我们就把刚才那个积分啊给理解成是哦,我就对呃,这是前面那几项l b2 d f v,然后在什么上面的积分呢,嗯在一个单位圆上面做一个积分。
ok然后这样的话呢我原本是连着cos theta,然后我在一个立体角上积分,然后现在就变成了不带cos theta,但是是在这个呃在一个project的立体角上积分,然后我总共呃。
呃这样同时也会告诉你这样一个事情对吧,同时告诉你,如果我做一个空积分,就是我积分对cosc的id,我们那个,积分出来结果是该是什么呢,它的物理意义是一个小的一个微元的物理,物理意义是单位圆上的一个面积。
那你总共积分出来就是单位圆的面积,单位圆面积多少派乘以一的平方派,没错吧,ok这就是呃也解释了,说刚才为什么cos积出来是呃基数还是派啊,ok那咱们回到刚才那页上的,哎咱们稍等哈,点错了。
ok啊那么在这里大家就会明白了,ok我为什么可以把cos连着一块,是因为cos c的id,我们这块就可以把它当成一个d,什么什么什么什么,ok那么我刚才积分那个公式。
那自然就是l乘以b2 d f再乘以一个v,那么我自然就可以把v给拆出来啊,这么一个事情说的非常的深啊,然后如果这块你不明白的话,很可能是因为你之前微积分忘了而已哈,没什么特别难的啊。
这个事情另外一个呢我跟大家分享一个事情,什么呢,我这块写的不对啊,这块这块儿啊什么的,就是大家看到这个呃微分某个什么东西,就是通常大家在积分式里面呃,会写了一个d什么东西哈,这里很呃,我明确跟大家说。
直接敲一个d这个字符在ltp里面是不对的,他会给你一个斜体字的d啊,这不是微积分里面用到那个地呃,微积分里面用了一个d,它是不写体的,大家可以看到对于任何正规的印刷,你都可以注意到这么一个事情。
那么他应该怎么写呢,应该写作杠max 2 m,然后里面写一个d啊,这意思非常小的细节来听课学个tag啊,哈哈ok行啊,然后就是说就是说杠max 2 m这个命令,然后里面再写d。
并且在之前最好有一个小空格,小空格是什么,杠逗号最小的一个空格,也就是平常写d的时候应该是杠逗号刚max 2 m,然后里面再写d一个非常严谨的写法啊行吧,然后有同学问几个事情哈,嗯说是哦还是一样。
就是我之前说这个拆分操作的时候,说哪篇论文有参考,没有论文有参考,这是这是基本上来说,是一个挺约定俗成的一件事情,而且你自己推一下也是对的嘛,这块没有什么,就专门提出这么一种拆分方法的一个paper。
然后刚才说的就是换元没问题啊,然后有同学说f和f和什么也得是这个单位,圆面积函数,这是呃不对吧,同学这个就这样哈,没关系哈,就反正就是说就是说这里之后再加深理解吧,就是目前我就先说到这儿哈。
整个这个框起来这东西它等于一个d呃,project soliango就ok了,好吧没问题行啊,这样咱们刚才说了是吧,嗯直接过吧,好然后咱们刚才说完这么复杂的情况,我们再回到一个呃简单的一个情况什么呢。
就是说s s a o远远没那么复杂哈,我们刚才是故意把他们给说的这么复杂,让让大家理解一下,这更多一点知识是这么回事啊,就是说其实它是非常简单的一件事情,然后就首先呢我认为呃。
如果我可以假设这种间接光照,我不是不知道吗,我假设的常数对吧,然后呃然后嗯那物体,物体的b2 d f也都是defuse,那好像也是个常数,那么这个间接光照b2 d f都是常数了。
那么我我既然知道这两项都是常数,干嘛不直接把它给从rendering equation里面拿出来,拿出来,完了这就结束了,已经结束了,大家大家可以看到什么呢,就是我不是要算间接光照。
最后结果是多少呢对吧,然后我知道这间接光照的来源,然后是个常数,拿出来了,拿到积分外面了,然后呢b r d f是defuse,拿到积分外面了,剩下来什么呢,对visibility cosn的一个积分。
只不过呢为什么我们一开始不这么说,是这样的,咱们把这个说清楚,就是说这一项并不是就这项积分还剩下来的,并不是visibility项的一个加权的平均,因为它缺了一个底下的归一化的这么一个常数。
然后如果我们这样说的话,大家就会不明白说,为什么工业界上一定要引入一个ka那么一项,也就是一个呃,就是这底下要除以一个派那么一个东西,当然我们从这一步也可以继续推对吧,这个式子我出一个派。
我外面再乘以一个派,不过为什么呢对吧,那这样不就理解不到了嘛对吧,那但是不管怎么样,还是两个得到结果是一样的,不过有一点我说清楚是这个意思,我我是完完全全不知道,为什么各种各样的书籍啊,资料里面。
为什么大家要要要推这个所谓,radiance这么一个概念,毫无必要啊,然后我到现在仍然是这么坚持,认为毫无必要去引入radiance的概念,如果大家去看ao的一些资料,推出来什么e等于什么什么什么东西。
完全没必要,因为你最后看到的就是radiance嘛,你要这个radiance干嘛呀,然后这样的话大家就会看到退役的时候,大家就会多出一个pad,大家就会觉得这个事情非常非常麻烦,就是说他其实非常容易。
就是说我说了,如果说不是为了之前,我们来理解为什么visibility项平均的话,我们就直接这么推就行了,这根本不是什么推导嘛,rendering equation,我直接把两项常数拿出来了。
就那么多少对吗,这不就是ambient flusion吗,对吧,然后这就是这就是我说嗯,咱们这节课反正独特的一个推导吧,然后就是说希望这样能够好理解一些好吧。
然后呢这个时候呃我们想一想缺哪一个事儿,就是咱们刚才做了这个推导之后,推出来之后,但是我说我只需要知道平均的visibility对吧,加权平均的visibility是什么诶,可是我怎么算呢对吧。
这个事情我不知道对吧,怎么算呢,那如果是在世界坐标里面,在世界坐标里面啊,那不就是整个世界空间里面啊,那我可以做reprising嘛,对吧,没问题,最简单的办法就是往四面八方,我真正就是踹死各种光脉。
然后我把他们visibility加权平均起来呗,对吧,那么就是说我们在screen space上怎么做,这才是关键对吧,ao的理论现在有了,现在我就要解任何一个shading point。
我往四面八方的去看对吧,然后就是在整个他的上半球上去看,有多少方向是挡住的,有多少不是挡住的,这怎么做,特别是在屏幕空间对吧,那行,这就是我们现在要渐渐的从ao要转向s s,这块到底在干什么。
这么一个哨上好吧,那么他在干什么呢,就是说啊嗯这么做就是就是人们聪明的地方哈,就是从这里开始,基本就是纯工业界哈哈,大家会开始又要听到各种各样骇客了,然后什么呢。
我不是要要判定说我任何一个shading point,我往任何方向去踹死,然后又有多少方向被挡住吗,但实际上我们这么说不准不准啊,为什么呢,因为大家这样想哈,我给大家举一个非常极端的一个例子。
我我给一个封闭的屋子,好给你一个封闭的一个屋子,那么我在任何一个shading point,我往任何方向去踹死,我不管打到不打到周围的物体,我无论如何,最后这光线出不去这屋子对吧。
也就是说我这光线往任何一个方向,肯定最后都得被遮挡住对吗,那这样会造成一个什么问题,造成说我这样得出来ambient的葫芦症告诉我,到处都是零,是不是这个意思,这这这不出事吗,这是为什么呢。
大家可以想象一下这个事情,反射光通常都是会从会,从不是,通常一定都是会从有限的距离里面反射过来的,我肯定不能说我去用一个无限的距离去算,我踹死无限距离能不能踹到一个物体对吧。
我反正我肯定都是从某个距离里面来的,然后所以呢正常人们会限制说,我要考虑在一定的范围里面,在一定的范围里面,我我去踹死这个光线,就往前走多远,这么一个范围里面有没有遮挡,那就够了,否则我只要走无限远。
那不肯定是那个,那我肯定是要呃就一定会被挡住嘛对吧,那我限制一个范围之后,那我就不一定了,我就考虑哦这个范围内到底有没有遮挡物,那这样的话就解决了刚才的这个呃,就所有光线都最终会被挡住这么一个问题。
但是但是这样会造成一个什么问题,这样会造成说真正来源于,比你考虑这么一个范围要更远的这种间接光照,你就把它给忽略了,你就不要了对吧,大家又看到了trade off,是不是这个意思,你限制这范围大了。
那所有东西都要被挡,最后肯定要被挡,你要限制这范围小了的话,那那那就自然而然有一部分这个呃,过来的这个这些这些嗯,就是incident的这些间接光照,你就等于是把它忽略掉了对吧。
那虽然在这个a o的环境下,你认为反正都是都是一样的呃,然后然后我们后面再说吧,后面再说,在更精准的这个范围内,你这样想就不对了,就总之就是说呢,你你限制某一个实际的这个范围呃。
它其实这是一个trade off啊,通常人们就会选一个某种范围,ok那行,那就是说给你任何一个shading point,你要考虑啊,往他的上半球各个不同的方向去踹死,并且不能踹死太远。
踹死一个最大的一个半径r,这样来说好吧,然后大家可以看到,那如果画在平面上,那就是这个范围往外出去一个半圆对吧,然后这个半圆内只要不同的方向有遮挡呃,那那就会呃我就知道这个方向的visibility呃。
零其他方向visibility 1,我最后就可以平均起来啊,没问题吧,然后呢,那我这里呃对于这样一种比较凹的一个物体啊,大家看到这个底底部,那我同样诶我考虑一个半圆,然后一定的范围。
然后我往这些不同方向去看,哪些方向能够看到呢,哦这些方向可以两边看不到啊,那也就说没问题好吧,那呃screen space a o,他其实不是这么做,他做了一个非常聪明的一个做法,什么呢。
就是说他并没有从任何一个点往四面八方去,trace光线,因为这个事情你不好做对吧,因为你screen space嘛,你知道的就只有你这个屏幕这个上面这些信息,你要做retracing。
这不是非常麻烦的一件事情吗,那他做了一个超级大胆的一个假设哈,同学们是这个意思,任何一个shading point,他都往他的周围一个半径r的球里面,然后我就采样很多的点球的内部哈。
咱们说清楚它并不指采样方向,大家知道要采样方向,我就只用球的这些呃,这球面上的不同的点就可以了对吧,他是在这个球里面,然后整个球覆盖的体积内随机砸一些点,ok随机撒一些点。
然后判断说他撒的这些点到底能不能被你,这这就是shading point啊,直接看到,那当然这是第一步,第一步,第二步,你你你仍然还是想,你仍然还是想判断说,哪些点到底能被我是云朋友看到。
而不至于被挡住对吗,就比如说你看这个点红点,他这是在物体内部的对吧,在物体内部那肯定看不着的对吧,然后这些绿点它在这些这些物体外部,那肯定这些点都能够看得到,对不对,然后同样道理这边也是一样。
那么即便如此,我仍然不好判断这么一个事情,就是说诶我我撒的这么些点,到底哪些点在物体内部,哪些点在物体外部呢,那这个时候他又做了第二个假设什么呢,还是这样想的。
就是说我screen space知道的信息太少了呀,但是screen space呢,我从camera,显然我无论如何可以知道我看到的任何一个点,它的深度是多少对吗,也就是说我会有一个深度图。
然后在深度图上,咱们之前在讲shadow map的时候,我们就提到这么一个概念,深度图是可以当做一个这个场景的一种,几何的简单近似的对吧,就相当于是我可以认为我从我camera往这个方向看。
大家看到这是看的方向,我从我camera往场景方向看,我看到的这些物体的这些表面,不都被记录成各种不同深度了嘛,也就看到了最浅的深度对吧,我都会记录下来,也就是说我看到的就是这么一条线啊。
从这里大家看到诶,我的鼠标在移动啊,这就是离你camera最近的,离你camera最近的这么1111些深度对吧,那这些深度就可以当做一个诶物体呃,是在物体里面还是在物体外面的一个简单呃,判断怎么判断呢。
很简单,跟之前shadow map一模一样哈,你你不是在一个球内部撒了那么些点吗,这些点你可以投影到camera吧,没问题吧,然后投影到camera的位置上,你可以找他之前记录的深度是多少,大。
这也没问题,你知道之前记录深度是多少,如果我的深度更深的话,那不就是在物体内部就被挡住了吗,哎然后就这种情况下就就会认为哦,那我我在shading point,我就肯定看不到物体内部啊,对不对。
然后我肯定看不到这个点,这个点就得是红的,然后呃然后这个其他这些点呢,看这个绿点,这个绿点投影到呃,比如说camera的时候,同学到camera的时候呢,大家会发现哦。
camera记录之前最想吃的都在这,那这个绿点它一定在物体外部,在物体外部呢我这个神经框架就能看到的啊,这么个意思,ok然后但是这样做呢,就是说大家可以看到这么两个假设一座,那基本都是成的哈。
基本都是成的,大家可以看到呃,这这这这三个这个例子里面,好像这些所有的点都ok了,只有一个点有问题,哪个点对吧,这个其实是鼠标已经停止了对吧,唉哪个点这么做会出现判断失误的情况就不对。
就是说你看哈这个点呃,为什么把它标成红的呢,是因为我从camera看过去,我看到的最浅深度在这里,然后这个点在他背后,在他背后,我就认为说哦在在他背后呢,这个点应该在物体内部吧,结果结果发现不对。
结果发现这个几何在这个地方拐了个弯,大家发现这个事情看见没,在这在这边有一个尖,这几何在这拐了个弯儿,但是呢你的深度如何能知道有这么个东西啊,不知道对吧,然后就是说你进入深度不是最浅的深度吗。
它的存在你是根本不知道的,所以像这种情况下,你还是认为这个点他是在物体内部,因为它的深度要比你之前记录的深度,要要要深嘛,然后你就会认为这点在这个shading point的时候,看不到的。
实则是能看到的,是不是这意思,然后就是说这点会出现问题,但是这是工业界吧对吧,没问题,就这一点点出问题的话还好啊,能接受,ok啊,这么个意思,那么另外一点什么呢,就是说咱们刚才不是说了吗。
你要判断invisibility往四面八方去,那不是得是法线所在的那半边嘛,咱们之前说render equation一直都是这么说的对吧,你是法线所在的那半边,你你应该做这个判断。
你另外半球你判断这个干嘛,就是这么个意思哈对吧,然后就是就是说,就是说你要是一个光线从物体底下打进来,这种情况不可能有贡献的嘛对吧,然后我们说考虑visibility都是半球。
我们整个的render equation,所有积分范围全部都是半球,你先把它拿到一个整球,当然整球是出现什么问题对吧,然后就是说我判断这些点,就是说你看比如说这个点,假如他反向是向下的。
那只有下面这半半球是有用的吗,我应该判断这半球,我发现他呃所有的地方都能看见,所以它的ao的值应该是零啊,不就是说最后没有任何的方向能够挡住他,我就想说这个意思对吧,就是就是就是这么个意思。
那我我这后面这这半个球的点,根本一点用也没有嘛,没错,这这是完全正确的想法,这个为什么他这么做,是因为在这个呃ao那个时代,你还不能假设说我camera ra呃,我我camera这边看向整个场景。
我渲染出来的又有深度,又有normal这么个意思,我认为深度我可以认为有任我,我不见得说我渲染出来任何一个点的法线方向,我都可以知道是这个意思,那你不知道法线方向怎么办,ok你不知道反向方向。
你不知道哪半球该去该去考虑对吧,那是不是出事了吗,那所以说他就考虑整个球,那考虑整个球的话,那很简单,这么考虑,正常情况下,如果你真的有一个平面,真真的有一个平面,那必然得是一半肯定看不着对吧。
你有一半肯定是看不着,直接在平面底下,然后有有有另外一半,那那你能看得着,那对于任何的一种几何,他做这么一种假设,说你在里面撒的,那么整个全球里面那么些点,这些点里面当只有当你看不着的那那些点。
也就是红点的个数过半的情况下,你才开始考虑ao问题,这个没问题吧,你想想一想是不是这么个道理,就是就是说像这种情况下,这个红点他他根本就站不全半球嘛对吧,也就是说也就是说像这种情况下。
他是绝对不可能发生ao的嘛,这个意思,然后就是说当你的红点个数过半的情况下,你才会认为说哦,就是说我我肯定是可见的那半球呃,也会出现一些ambient collusion,才会让红脸过班的嘛。
这样想对吧,那么红点过半过了多少,就比如说像这种情况,就是两个过半,然后这边呃呃还有三个绿点,那自然就是40%的是不可见的,60%是可见的啊,这么个意思好吧,然后他最后求出来的visibility。
就是就是用这半球来算这么个意思啊,右边同样道理,大家可以看到过半的红点,这点就不算了吧,右边只有三个过呃,过半的这么呃这些红点哦,哦哦不是是算个数啊,算个数,就是说这里12345678多少。
90 十个点啊,十个点,然后红点过半呃,也就是说考虑超过一半的这些数量,也就是说红点现在总共九个,你要减去五个,剩下的四个啊,你要考虑四个,对没错,考虑四个点都是表示这些方向会被挡住,然后有一个点呃。
这个方向没被挡住,那于是你最后得到visibility的值,那自然就是20%啊,这么个意思啊,呃ok这么一种做法,就是说你可以不知道法线,你也可以知道说我这半球上的这些呃。
那么平均的visibility,另外大家已经听出来了,这这这嗯这么考虑的话,是没有考虑什么呢,没有考虑cos对吧,你没有这个法线的信息,你也不知道这cos应该怎么加权。
于是呢你先算出来的算是一个近似的呃,往往半球上不同方向的visibility的一个平均,而不是visibility和b2 ,和这个call 3项的加权平均啊,这个意思,但是还是一样,工业界方法嘛。
对不对,你没有发现的情况下,你就只能做到这么好咯对吧,唉以及这这里就是在说我们刚才说的这个点,它会被呃误认为硕士在物体内部没关系啊,o好,那这样一来呢就会大家可以看到啊,没有s s a o的情况下。
和有s s a o的情况下的一个对比,当然这幅图呢并不是为了说明这个问题,这幅图是为了说明s s a o有什么有什么呃,就是坏的问题,大家可以看到这是一个地面,地面上有个石凳,挺矮的石凳。
像是在地铁站经常能见到那种东西啊,然后这种情况下,这个石凳和这个物体根本不应该能接触对吧,和和这个地面不应该能接受对吧,也就是说这个地方他怎么会有ambient,exclusion呢。
这就是你s s a o出现的问题,因为你s s o a s s a o啊,在做这么一个事儿,比如说我鼠标现在在地板上,在地板上,你取它周围3d空间中一个球,然后呢,它某一个方向它投影到这个呃某一个点哈。
投影到camera,你会找到这么一个石凳,这物体你会发现哦,之前记录的这不是石凳吗,也就是说啊这个背后这肯定是那个点,肯定是要被挡住的对吧,然后这不就刚才说的那个问题吗。
就是说这里他会认为你在camera上,你只能看到这么面背后这些东西它到底能挡住,挡不住,他就认为这个面它的深度会比较低,所以背后的这些点全部都得是红顶,是这么个意思。
于是就会错误地认为这个石凳会对这一点,对这个d上的a o会有贡献,所以就会出现一些所谓false econclusion,就会出现一些这种不不不自然的a o,就不该有的哈,这个意思。
ok那就是说这种情况是他的一个问题,然后呢我们把这块ao给说完,好像今天没时间说d o了哈,但是ao说完没问题,然后就是说嗯呃这样哈,就是说还有一个事情。
就是说咱们不是在任何一个shading point,他周围的一个整个球3d空间啊,3d空间这个球周围我去呃,追求周围啊,求内部选很多sample嘛,那么选多少对吧,还是一样。
这个问题跟之前pcs s是一模一样的,就是说呃p c s s里面呃,我涉及到我一个学shing point上,然后我要考虑多大范围,这个范围内我采多少sample,咱们作业都已经做了。
知道是什么情况对吧,越多散步越好嘛,但是我要是说想希望有一个好的速度,是不是不能用太多的sample呀对吧,那怎么办呢,那没关系,我还是一样用少量的sample。
然后我先得到一张noisy,这个ao的一个结果对吧,大家看这个ao效果就非常不错了对吧,然后得到a o的一个结果之后,然后我再做一遍dnoisy,然后我把这个呃把他的ao给糊掉。
正常情况ao你很很很少单独看他对吧,你都是把它给加在其他一些直接光照啊,然后一些其他的一些什么东西上面加在这上面,然后你会得到一个呃,就是看起来基本上像这里啊,你做了the noise之后。
你还看到有一点noise,但其实你加到其他东西上面按就差不多了啊,基本上这么一个思路,ok然后呢是是这样的,就是说啊有同学正好提到了,说这法线方向我我是怎么样得到哈,没问题。
你当然可以通过采样相邻的这个text深度。
来近似一个法线方向,但是更多情况下,现代的这个图形学里面,怎么可能说你去渲染这个呃,camera这么一个一个这个整个一个场景哈,你还得不到任何一点的反而限制,开玩笑,现在假设说都有,那么有发现的情况下。
你是不是就不需要像s s a o,做那么近似的一个东西了,是不是,那那你就可以做的相对准确一点咯,你有法线,你就知道哪半球,你应该去采样,是不是这个意思,然后就是说你还是可以用之前s a o的方法。
在这个半球内去选一些,选一些点,然后你有发现知道半球的话,那你直接就可以算他们对应的,红点和蓝点的比例了,我已经忘了哈,就是反正就是说呃就是说这些visibility。
它它的一个可见的visibility一个平均嘛,就是这个意思,然后用这种方法诶,那效果就就肯定就会比你认为没有发现,你考虑整个球要准了,而且啊有发现你就可以对呃,对这叫什么。
对不同的方向你其实就可以做加权了对吧,我们不是说呃站在这个shin point上,往四面八方去看,看到的visibility,还要通过cos加权一下嘛,cos呢肯定是靠近法线之大,靠近两边只小对吧。
然后在这里你知道法线了,那你就可以对不同的方向进行加权咯。
那你可能可以得到一个更准的一个值,对不对,那么这些大家可以看到说这是最后的一个结果,就是如果什么都没有这么一个地铁站,然后它是长这样的,那么如果有s s a o啊,大家想一想,如果有s s a o。
应该在哪些地方会比较看的明显对吧,就咱们下一张就是啊,下一张图就是,但是我想着同学们应该已经可以猜到了对吧,接触部分吧,比如说像这种拐角对吧,像像这些地方,咱们现在就假设把呃,还有这柱子底下和地面对吧。
这些地方都应该有接触阴影,然后这些地方呢就是说呃我们把鼠标停在这儿,然后我们切换成有s s a o a,这也可以看到哦,这里确实是有s s i a o了,这个地方变暗了对吧,这个地方变暗了变暗了对吧。
然后就是就是这么一个情况,那么哪些地方不该变暗了,大家想一想,这个地方不应该变暗对吗,s s a o,咱们刚刚刚刚分析这么一个问题,他经常出现的一个问题就是false exclusion。
就是你明摆着这俩物体离挺远的,然后你会认为这个这个靠近camera的物体,会遮挡住这个远处的物体,也就是说像这个地方它不该是黑的对吧,然后那对于h b i o来说,然后关于这块,然后他做的好一些啊。
就是咱们刚才说的那个思路哈,有有发现的这种情况,它叫hbl,大家可以看到这个地方就不再出现这种,非常明显的错误,遮挡这种这种啊,ok然后h b a o还有很多,这里面这些细节我没有说过。
关于这块他是怎么处理的,他是认为说我只考虑在一定范围内,它的遮挡路啊,这么个意思,就是说不再是像之前s s a o那样,认为说我只要这个距离呃小,不管你小多少,然后都会认为它是热挡啊,这里不会。
那这里就不会出现错误错误的这种这种遮挡了,总之呢h b a o为什么会比s s a o要好一些,然后就是因为他真正考虑了他一个比较有,有一定范围,而呃等这么一个半球啊这么一个考虑方式。
而那自然而然得到一些结果就会更准,那么呃这里算是官方圈出来的一些呃,需要看的地方,s s a o这些边缘的地方,很多地方出问题,就是因为你不考虑说它,它呃这depth到底差多远这么一个问题。
然后a h b l o就可以解决掉啊,这么个意思,切回来,这里有错误的遮挡对吧,s s l o,然后这里就没有啊一个道理,那么行,到此为止,s s a o部分差不多了,就然后呃停一下。
看看同学们有什么问题好吧,然后本来今天说s s d o也顺便讲的,但是好像呃没时间再继续,那就留到下一季,反正没多少啊,k h b a o要多存一张normal map,那是肯定的喽,对吧哈哈哈。
没问题,因为你要知道任何一个地方的这个normal,normal呃,减小采样的半径能不能减少false clusion,我想了想,这种既然是ao的话能吧,但是你会造成你整个的ao都会变淡嘛对吧。
就就是说你可以想象一个极端情况,你的半径减少的特别少,减少的特别少,你就说那基本上没什么点,它会呃有a o对吧,你这基本没有ao了,所以你减少减少false collusion的同时。
也在减少一些初额collusion,那不是出事了对吧,所以说啊,一切东西都还是一个很平衡的一个东西对吧,然后嗯ok就是说现代的rendering,真的可以这么假设,没没没有什么问题啊。
现在的实时渲染就很少,你能你能说你认为你的就是camera,这么一个信息,这是说不过去的,ok嗯深度差的阈值,就是说一切这些操作都只能说减轻这个问题,或者可能会引入一些其他的什么问题啊,这么个意思。
就是,所以说关于这些有没有什么诶更好的一些设计,然后这些事就留给大家思考了对吧,就hbo这些东西不是还在一直改进着吗对吧,还有各种各样在h b a o之后的一些呃,呃其他的一些方法在有兴趣的方式的话。
反正这这这直接网上查就可以查到了,最近大家是怎么做的,但是思路还是一样,就是这节课呢,主要就是说把这个理论上给给说的清楚一点,就是到底他想干嘛,他到底怎么会,就是就是他该计算的东西到底是什么。
而不是说他他就就就这么做对吧,s s a o他确实就是那么做的,但是它为什么这个背后这些东西,咱们把它理解清楚好吧,那就是这么个意思的啊,动态的采样半径啊,挺有意思的,我觉得应该可以吧啊ok那行。
那咱们下节课要说什么,下节课要说呃,当然了,咱们先把ssd o给说完,咱们刚才不是说s a o会假设这些,一一就是incident,就入射的间接光照,各个方向都是一样的嘛,事实上不能这么假设了对吧。
s s d o那就是说不这么假设,我真正能够把它呃,呃它的间接光照这块该是多少才是多少,把它算出来好吧,这个意思,然后下节课我们讲s s b o之后。
我们再讲screen space reflection,然后当然在这之后我们再看有没有时间,就开始下一个话题了,就开始这个pb 2这块啊,就是所谓材质这块,然后呢呃s2 这里还是一样,给大家彩蛋一下。
然后screen space reflection,屏幕空间反射或者是屏幕空间关于追踪,但是s s2 大家一提哎,我第一我第一反应想到s s2 ,肯定会想到想到阴阳师的ssr,然后是这么回事。
简单给大家介绍一下,我不是之前说我是严重的网瘾大叔嘛对吧,然后我什么游戏都打的,然后阴阳师我也打的,而且阴阳师我当年呢我这个呃叫什么来着,我当年打的很夸张的,然后然后就是说s2 全收集。
然后打到什么时候弃坑不打了呢,打到当时是间接伤害刚出来,那个时候间接伤害刚出来,然后我组了一个间接伤害反击流的对,然后当时去打斗技,我打到了全服的第11,世界的第19,怎么样截图为证啊。
这些事情是很值得我炫耀的一件事情,而且呢诶呃重点是这个重点是我,我我其实没有氪金啊,完全靠肝啊,另外还有当然这个诶这背后有有空,没事跟大家说一说这个事情跟随机数有关系的,就涉及到抽卡什么东西啊。
就是随机数这个东西呢,它多少都会有一些所谓low discrapes的性质,这个性质可以利用的啊,但不管怎么样啊,我基本上是靠靠干,然后把这些都给都给呃,都给干出来了啊,ss 2啊,然后我想了想哈。
我当时有一个网易的朋友,我我我说我应该不算是零氪,好像是就这30块人民币哈,然后我说我应该算微课,然后我的网易的朋友就就直接给我教育了一顿,说我是说我是完全没有弄明白这个什么是微课。
于是我以后再也不敢说了,我说那我基本上来说是不是就就当是零氪了,好吧,呵呵呵呵呵行吧,然后基本上来说吧,就是说这是当年打阴阳师的时候,然后这算是哦,另外说一下,虽然打这个这个斗技打的挺好。
但是呃我实力没那么强,这是一个瞬间的一个动态的状态啊,是这个意思,就是说到最后我还是调出了100名开外,这个意思ok嗯行吧,嗯然后这就是我之前的这个s2 的故事啊,ok哦另外说一下这个这个阴阳师里。
ssr什么意思啊,是指super super rare对吧,是指稀有度啊,ok啊行吧,那这就是这个今天的内容啊,好呃感谢大家,ok。
这样哈我要看看是什么问题,好像好像还好诶,ok,ok,好像因为我说这个现在就没什么哦,哦有一个技术性问题,a o作为gi的一种,那工业界常用太常用了太常用了,现在基本上来说都会有一个ao啊。
哦甚至来说你真正算上这个gi,有时候还会有人再加一个a o在上面,然后就为了表示这些物体之间这些接触感啊,这个意思好吧嗯行,那今天就到这儿,然后咱们下节课再继续好吧,ok。
GAMES202-高质量实时渲染 - P9:Lecture9 Real-time GLobal Illumination (screen space cont.) - GAMES-Webinar - BV1YK4y1T7yY
啊亲爱的同学们,大家好,欢迎来到games 202的第九讲,然后今天呢咱们呃沿着上一讲的话题,把实时的全局光照部分给说完好吧,嗯然后在课程开始之前呢,有个事情先告诉大家,大家现在看到的是录播。
哈哈并不是咱们五一的时候直播的内容,五一的时候嗯不是我忘了录像了,而是因为硬盘满了导致没有录进去啊,有点惨,嗯不过还好吧,不过大家错过了一个非常重大的事件,马上就说这个事,首先无论如何,还是五一快乐啊。
现在还是五一期间,然后呢有一个事情,那就是呃在这节课之后,咱们的课程就已经完成了2/3了,是不是非常快对吧,总共安排了15讲,然后今天是第九讲吧,嗯所以说之后的内容我也希望他能够继续做,好好吧。
嗯然后games 101是这样的,然后我接收到了同学们的各种各样的,这是申请吧,然后我感觉是不够,就是greater的申请,大家不够积极啊,然后这样的话就导致说嗯。
我在想要不要真正的把games那101,算是重新开起来课,就是真正的招募一些助教同学们,然后重新再开始答疑呀,以及重新制作一些作业内容呀,然后呃像这块的内容,所以说啊大家耐心一点吧好吧。
然后就是说我我也想一想看看到底要怎么办,给我点时间好吧,那games 202呃,是这样的,就是之前有同学关心这事,如果我来晚了,之前的作业一没有来得及提交,没关系,我们仍然会有补提交啊。
games 202的补提交,然后在什么时候呢,在呃大概作业二级呃,这边呃截止之后这样安排,或者是作业三开始的那个时候,那差不多跟正常的作业时间咱们错开,所以说补提交肯定是可以的啊,没问题。
那么啊最后一个事情是这样的,我整个5月份会上会非常忙,特别是5月20号之前会有这么一个可能性吧,就是说可能会突然取消掉某一节课嗯,这样安排吧,我当然希望不会了好吧,然后就是如果真的出现这样一个情况。
诶还还还请大家理解啊这么个事儿,ok那么大家在直播中错过的是什么呢,错过的就是直播吃键盘的环节,然后大家如果还记得的话,那就是前面两节课,然后我不是说呃我做了一个推导嘛,大家还记得吗。
任何一个rs m上的像素,如何对我的shading point进行一个贡献对吧,我们说那个像素呢本身有一定的面积,然后对应在面积上的积分,也就是da对吧,然后我们要把原本在shading point的。
对于啊球面立体角上的积分,然后换成对啊,所谓刺激光源,它们的表面上的积分,这样的话呢就会引入一个距离的平方,在这里对吧,这之前在pass racing,咱们也是这么说的。
light something的部分对吧,然后我就说呢嗯在那篇paper里面,嗯这里呃不是底下有一个四次方嘛对吧,paper里面写的是四次方,然后我当时立flag,我说他写错了,他应该是平方对吧。
因为我推的是平方对吧,然后嗯这里呢给大家澄清一下,他写错了没有呢,没写错,然后我写错了没有呢,也没有写错,那是怎么回事呢,就是说他这里大家看是四次方不错,可是呢它的分子上面有有这向量的点乘,看见没有。
就是法线和某个向量的点乘,然后大家会发现法线,通常咱们认为这个向量是规划的,然后另外一个向量呢是呃直接这么写,那就是这两个点形成了一个向量,并没有归一化它们之间的距离,x到xp之间距离。
所以上面多乘了两个这么个距离,所以在下面就会变成四次方了,这么个意思,所以说这我瞎了这件事情呃,直播吃键盘环节已经结束了,现在再见不到我直播吃键盘了,ok今晚把这两个圈出来啊,就是说我我再次确认一下啊。
这么一个结论,就是说呃都是没有问题的啊,两个表示的是完全是同一个事情,ok啊行,那么上一节课我们主要说的是什么呢,我们把3d空间中的实时嗯,这叫什么全局光照啊,说完了,然后主要是这两块呃,lpv方法。
v x g i方法都是非常经典的方法,然后得到广泛的应用对吧,然后呢我们又提到了屏幕空间的一些方法,然后比如说s s a o呃,s s a o之后,然后这就是我们今天要讲的两个话题。
s s d o和s2 ,ok那么呃分别是什么呢,屏幕空间的方向性的遮挡,咱们这么翻译吧好吧,然后另外一个屏幕空间的反射,或者叫屏幕空间的光线追踪啊,这么个意思,ok然后呢。
呃原本是想要有一些时间再讲一讲材质吧,然后呃我后来一想还是把它放到呃,放到下一节课去说好吧,然后咱们这节课就把这块全局光照给说完好吧,然后希望这又是录播了对吧,希望能够更有效率一点。
咱们能快点把它给结束好吧,嗯ok那么呃我们上节课主要说的一个屏幕空间,全局光照的方法对吧。
就是叫做ao啊,环境光遮蔽,然后它的一个基本思想,咱们简单回顾一下对吧,是认为任何一个shading point,他都会接收到从任何一个方向过来的,相同的间接光照对吧,它是这么一个假设,那这样的话呢。
那能不能接收到从各个方向来的呃光照,那就取决于在shading point的周围的,一个比较小的一个范围内,如果我往这个方向看过去会不会被挡住对吧,是这么一个思路,那当然对于不同的几何,像这种呃。
以及右边这种,然后他们会有不同的遮挡的情况,比如大家看到黄颜色这边哎,这些是表示没有被遮挡,那个方向能够接收到剑接光照的方向,然后这边呢就相对比较少,只有往上面这偏一点的距离对吧,那所以左边会比较亮。
右边会比较暗,就通过这种方式来做出一种嗯近似的呃,全局光照的一种效果对吧,然后他是怎么做的呢,然后我们说有两种情况,第一如果我认为啊,就是我在屏幕空间对咱们说过什么是屏幕空间,就是相机直接看向场景呃。
然后我得到了这么一个结果啊,那如果没有主点的法线的话,那么我们怎么知道哪半球是需要往外面看的呢,对吧,比如说这个点这个shading point嗯,那我嗯对于s s a o来说,还是做一个简单假设嘛。
他就往整个的这求的所有的这些方向去看,然后看哪些地方被挡住,然后我们上节课说的比较详细了对吧,然后这里做了一个基本假设,就是从shading point往某个方向呃,能不能被看到。
其实就是被他近似近似成为了说我从相机处罚,我是不是可以看得到对应的这个方向所描呃,所描述这个方向用的这些啊,在球面中随机找的点对吧,这么个意思,当然这两个不一致嘛对吧。
然后咱们这节课还会再说会造成一些问题,比如这个红点对吧,嗯然后呢,如果说整个场景我可以知道,在屏幕空间上任何一点他的发现,那我就知道对应谁令宇宙的半球,那么我就对应往某个方向上去看。
然后在限定的半球的一个半径范围内,然后我就可以知道哦,往往哪些方向看会被挡住,并且这样的话呢有好处,可以根据呃它的法线做一个啊,cos的一个衰减对吧,咱们之前推导完公式得有一个这个。
然后呢也可以考虑跟距离有一个衰减啊,这么个意思就是说这都是之后的一个改进,叫h b a o horizon based ao哈。
这个意思啊当然还是s s a o的部分,那咱们今天主要要讲的是屏幕空间的d o,那么dio是什么呢对吧,然后首先我们来看一看,首先s s d o从名字上来看对吧,他肯定是对s s a o的一个提高。
没错吧,然后呢,他的一个基本思想就是说呃我其实是可以考虑,比起ao的这么一种大胆假设,说认为啊间接光照到处都是一样的对吧,然后其实我可以考虑的更精准一点,那么呃为什么可以这样呢对吧,就是说我们思考一下。
我们完全没有必要去假设说任何一个shading point,他接收到的现金光照都是一样的,那有一些信息其实我们已经知道了对吗,那能够提供间接光照的,那不是刺激光源吗对吧。
刺激光源的信息我们不是在之前讲rsm的时候,是不是已经说过了,对不对,大家从这幅图上来看,可能大家又会想到rs m它的一个基本思路对吧,还记得就是说嗯被照亮的那么些点啊,被照亮的这这些所有的像素啊。
他们本身都可以作为次级光源,然后呃为其他的shading point提供直接光照,那那这样的话呃刺激光源提供的直接光照,那不就是场景中的间接光照吗,对吧,那也就是说间接光照其实我们是知道的,这么个意思。
一定程度上这个意思。
那么呃所谓呃s s d o,一部分呢是是说directional exclusion,那这自然就是说他怎么样办呃,间接光照给算出来这么一个一个一个方法,那么它首先又是screen space的对吧。
然后我们可以看到它又是屏幕空间的,那么他这里说明了什么呢对吧,我们想一想屏幕空间,那也就是说所有信息都来自于屏幕上,那也就是说被照亮的这些像素,什么东西也都是在屏幕上,直接被直接光照所照亮的,这些像素。
它们本身会成为提供间接光照的一些刺激光源,对吗,那也就是说咱们看这么这么这么个图哈,最左边这幅这部分呢,就是所谓的直接光照造成的一个结果哈,什么都没有,然后这里呢大家可以看到,这是有ao的一个结果嘛。
然后大家可以看到哎,在接触的地方有一些会变暗,然后这里看起来稍微夸张了一点对吧,有些地方太暗了,但是不管怎么样,这是ao的效果对吗,然后d o的话呢,咱们嗯直接看右边这幅图,这个才是我理解中。
这所谓s s d o要做的东西啊,右边这幅图,那从这里对比ao也就是第二幅图啊,不是那么明显的,咱们看什么呢,咱们可以看一下嗯,第二行第二行这边呃的一系列对比,大家可以看到ao呢。
它可以在接触的地方提供一些嗯,就是能够产生一些变亮或者变暗的一种情况,但是它并不能做一个什么样的效果呢,咱们对比一下这dio这右边这幅图啊,嗯并不能做到说所谓的color bleeding。
大家还记得我们之前所说,我们想要的一个效果对吧,在diffused嗯这种这些物体上呃,光线是完全可以从一个diffuse的物体,达到另一个物体,然后然后再继续,反正这么传播下去。
于是呢不同颜色的difficult物体,他们互相会照亮对方,像这里大家可以看到诶,蓝色的这个面上,它会接触到一点点黄光对吧,黄黄色的面上同样也会接触到一点蓝光,地面上也是一样对吧。
那也就是说这样的一个效果才是我想要的,而不是我简单的就认为这块应该暗一些对吗,就是就是这个意思了,也就是说呢,它是一个更为精准的一个能够得到啊,全局光照的一种方法啊,这么个意思。
然后呃这里多说一句什么呢,就是说这这幅图是从嗯对应的ssd o这篇paper啊,里面的呃一个图里面截出来的,然后大家可以看到我是我,我很想把它当做一个反面教材哈,是这么回事,就是在论文的编排上。
不管是论文吧还是别的什么什么上面,尽量不要这么编排,不是很好吧,他在这里比如说呃这个小的图对吧,二行一列和一行二列,这两个图才应该是对应的对吧,然后嗯第四个图应该是对应到这下面,这也是第四个图。
而中间呢是属于第一行,第三列对应了这么两个图,这是非常不合适的一个布局啊,挺难看的,然后就是说之后大家这个吸取一下,这这这篇paper的一些问题,ok啊这是闲话,ok那也就是说啊。
咱们再回到刚才s s d o这思想上面来,首先呢要用直接光照的信息,但不是从reflective shadow maps里面来的,而是从屏幕里面来的,也就是说你用的嗯,所有刺激光源的信息都在这啊。
这个意思啊好那么呃他他是怎么做的呢对吧。
这是大家比较关心的一个问题,那么他的做法其实和pass tracing是非常像的,那么它是什么意思呢,就比如说在任何一个shading point,我说我要想计算他接收到的光照,对吧对吧。
最后他的shading的结果,那我对于pass racing我应该怎么做呢对吧,我应该随机的往某一个方向去呃,打一根光线对吧,然后如果这根光线达到了一个什么物体对吧,如果达到了一个什么物体。
那么我就算你比如说我认了呀,打到了另外一个点叫做q,那我就在q点再算q点的直接光照,然后q点到p点,然后它的这个贡献,然后那就是p点,最后收到的一个间接光照的一个结果了,对不对。
那如果说我从p点往外面打一根光线,没有达到一个什么物体,那自然而然这这些呃就是嗯,那这就是说往这个方向,p点应该接收到直接光照,是不是这么个意思对吧。
所以说s s d o呢跟s s a o它其实是一样的,呃那不是跟s s a o一样,其实跟pass pass tracing相比啊,它是一样的这么一个思路,那么这里啊大家其实可以看到嗯。
就会有一个诶非常很神奇的一个事情啊,大家会发现什么呢,s s a o跟s s d o其实是完全相反的,一个假设,什么假设呢,大家想看看下面两幅图对吧,s a o假设什么呀。
s a o假设任何的shading point都可以接收到呃,就是呃四面八方来的间接光照,那如果说在某一个小的范围内,它往这些方向上看会被挡到,那他就接收不到间接光照,那什么意思呢。
就是说哎大家可以看到我这个红色框圈起来了,这么些箭头,这些箭头如果在ao里面啊,大家会认为这些方向应该是能收到间接光照,是这意思吧,然后右边这些方向由于我往这些方向打,会会被一些物体挡住。
那所以对于p2 来说,往这些方向也就是橙色的框,得到的应该是没有间接光照这么一个情况,是不是这个意思,那但是呢我们考虑pads tracing或者是d o啊,呃他其实应该是怎么回事呢。
在p p2 这么一个点哈,我往任何一个方向上去打,那我如果说我打不到任何一些反射,用来反射的面,也就是说对于红色的这些箭头来说,如果达不到一些反射面,它自然就不可能有间接光照过来,对不对,间接光照嘛。
肯定得从另外一个物体反射到这个物体,它达不到什么其他物体呢,那就只能打到黄金光了,所以说这部分呢是直接光照对吧,那也就是说这部分红圈,现在是表示没有间接光照,那么间接光照从哪来呢。
间接光照反而是从从p2 点,然后我往其他的这些方向,可能会达到这些物体对吧,达到的那些物体才有可能会反射光倒贴而上,也就是说橙色的这些方向,其实才表示的是会有见面哎,大家从从这总结上面来看。
是不是完完全全相反的一个情况是吧,嘿嘿嘿嘿嘿对吧,所以说嗯就是这么个意思了,然后这里呢我来我来说为什么会这样对吧,就是说这才是大家关心的,那上一节课我们提到说ao ao的话。
如果是在一个呃无限免的一个范围内,然后我之前说过,为什么要把a o,我们考虑在一个有限的一个呃距离内部对吧,这个意思,然后就是说,如果把整个一个物体放在了一个封闭的一个,盒子里面,或者就是室内,像这种。
那你往任何一个方向看,它最终最终都会被挡住的吗,那不是整个全黑了吗,那就不对了对吧,也就是说啊他考虑一个周围的一些地方被挡住,他会认为哦其实呃相当于是呃来自呃环境中,其他的这些物体。
他他他他们的这些间接光照啊,其实都是从比较远的地方过来对吧,还是这个意思,然后呢那d o里面,dio里面他考虑一个小的范围还是一样,虽然咱们还没说d o怎么做啊,一样跟a o一样。
考虑一个嗯嗯某一个距离的一个呃范围啊,在这个范围内,如果我能够达到一些这些呃其他物体,那其他物体都会反射出间接光,也就是说他考虑的是在一个小的范围内,他的这个呃间接光会对呃。
某一个shading point的一个影响,那这里大家就可以看到了,其实他们两个做正英文啊,他们假设间接光照的来源不一样,所以才会造成说完全相反的一个情况,ao里面假设间接光照来自于非常远的地方。
然后dio里面假设间接光照,只来自于非常近的地方,所以啊其实这两者来说都不完全正确对吧,就是说一个正确的做法,应该是把ao和dio两在一块做,然后这样的话来自于近处的呃,呃呃所谓indirect部分。
然后可以被dio来捕捉到,然后来自于远处的呃,这些间接光照部分可以被ao捕捉到,当然工业界中不知道有没有人真正用哈,但是就是理论上来说是该这样的,那么从这里大家也看到一个问题对吧。
dio它能够表示全局光照对吗,间接光照是的是可以在一个范围内表示,但是它并不能表示远距离的间接光照,所以会造成一些问题,咱们之后再说好吧,ok,那这就是和ao的一个基本思想的一个对比啊。
这里并没有矛盾啊,咱们说清楚这个意思,ok那嗯对于dio来说,嗯那我们嗯再回到他是怎么做的对吧,他无论如何肯定是解reneequation咯对吧,跟pass string一样。
在任何一个shading point p,然后我往任何一个其他方向上面去打,那如果说我打不到一些什么物体,就是说往那个方向可见啊,这个意思非等于一网的方向可见,那对于这种情况就没有间接光照。
那就是可能是来自于环境光的直接光照之类的,这些呢咱们不不关心,我们关心的是另外一部分,当你在一个10point的p往某个方向去打的时候,往某个方向去打的时候,就是就是说出现v等于零的情况。
然后打到了某个物体q,那从这个物体q反射到物体p,那这部分的入射的radiance,那它就应该是所谓间接光照对吧,那这块才是我们要的,ok嗯ok那这样的话就呃没问题,也就是说。
我们要关注的就是所谓被挡住的这一块,然后我们要把这些被挡住的这些呃面,然后我们他他他们的贡献,对shading point他们都把它算出来对吧,加起来,那他就是间接光照了,我们要得到的好吧。
那么怎么算对吧,这块呢咱们之前呃112节课,我们一直在说这个事情对吧,对于我所达到的一些,比如说一个像素,它表示了一个小片,它有多大的面积,然后假设它是diffuse的,那那这种情况下。
那么他呃它反射到任何一个shading point的radiance,跟你从camera看到它反射出的radiance,肯定是一样的对吧,因为是diffuse,假设,那么这种情况下。
我就自然而然可以直接算他的贡献,咱们咱们之前两节课一直在讲,不再多说好吧,也就是说一个像素,它对应的小票对神灵魂的贡献绝对可以算。
这样就ok了,那么核心是什么呢,那就是说我怎么样做s s d o,我来找到哪些面会被挡住对吧,然后然后会嗯对我的一个shading point p呃,会有贡献,那么他的做法和ao还是完全一样的。
那就是在呃点p的地方对吧,大家可以看这里,然后呃还是一样考虑他所在的上半球啊,那这里当然是假设我的发型就知道了对吧,考虑上半上半球,并且在这个上半球内撒一些点啊,然后我就呃问从p点呃,往a方向看。
往b方向,往c方向,往d d方向是不是会被挡住,同样道理,我们仍然不想去去啊,真正的去呃所谓trace一根光线哈,来决定说p a方向,pb方向这些会不会被挡住,而是我们还做之前那样一个假设呃。
就是说pa能不能挡住,我不管我就管从camera到a能不能被挡住,这当然还是跟之前a o一样非常大胆的假设,但是一定程度上挺有效的哈,然后那么这里看具体的情况了,a b c d这四个点。
那pa能不能被挡住呢,那我们看从camera出发,然后我之前渲染场景的时候,肯定会有一个最小深度吧,然后我会发现哦,哦往a方向看的话,呃,它其实是在这个物体的壳之后对吧。
那这样的话就说明pi方向是呃呃看不见的,那么同样道理啊,b方向也是之前记录的深度要更浅,那所以b方向也看不着,那么c方向ok没问题对吧,大家看到啊,之前记录的场景深度在这,然后那c方向在呃。
cc点其实在这里,那么pc方向也就是说不会被挡住,那没问题啊,不会被挡住,刚刚才咱们说了对吧,然后如果说我有一个环境光,那我这样的话,我就可以直接从p往c方向去查,这个环境光的值。
也就是说s s d o在解决啊,这种间接光照的时候,同时还要还解决了另外一个来自呃,就是呃从环境光来的这种直接光照,应该怎么样去做,不过这块呢我们不怎么关心啊。
我们关心的呢就是说在这里啊a b和d点对吧,我们说这三个点会被打到,也就是说这三个点会为p点提供简洁光照,那么这呃这三个点,大家从嗯,中间这幅图上可以看到这个事情了对吧。
这这三个点a b和d各自都对应了一个小的面,对吧,然后他们这这这这个面有一定的面积,然后往一定的方向,然后这些面怎么样对p点进行呃,会有一个什么样的贡献,假设a b和d之前的直接光照。
然后我们都已经算好了对吧,然后那么他们分别对p点的一个贡献是什么,嗯那大家可以看到这里,b和d肯定是对p点会会有一个非零的,有贡献的,然后a点呢由于它朝向它直接往反方向去了,他对p点应该是没有贡献。
那不管怎么样,咱们把这个ab和d这三个得贡献,对于p点把它给加起来没问题啊,啊ok那这就是关于呃d o怎么算的,那就是呃很显然分分为嗯,把你在这个p点的上半球所撒的这么一些点啊,分成两类。
一类是说呃我呃往那个方向看,不会被场景中的东西被挡住,那就没有间接光照,所以跟c没关系啊,然后呢其他a b d被挡住就会有间接光照,这么算好吧,那么嗯上一节课其实我们就已经提到了。
就是说我们做这么大胆的一个假设对吧,我不是想看从p到a这个方向是不会被挡住吗,我其实考虑从camera到a对吧,这个是是两个完全不一样的一个概念嘛,对不对,那那就是说我这么假设。
会不会有的时候会出一些大问题,其实是会的哈,右边这个结果就是在告诉大家,这里会出问题什么呢,比如说唉大家看这新的a点和b点啊,从p到a这个方向大家可以看到啊,完全没有被挡住嘛,对不对。
但是呢这种情况正好比较倒霉的情况是,a前面悬浮了一个物体,正好会被camera看过去挡到a啊,这个意思也就是说,你会认为用刚才的判定方法哦,camera看不到a那么p看向a也就会被挡住。
那不就判断错了对吧,那反过来这样也是对b点来说,camera很明显可以看到b点对吧,然后因为它记录最小深度在这儿嘛对吧,但是从p点往b方向上看过去的话,他可能会被其他的一些什么东西被挡住。
那这会儿呃这这样的话,camera的话,他的visibility就不能呃,是认为是p点往这个方向上去,他的visibility对吧,嗯那么嗯大家肯定会问这么一个问题了。
就是说呃我原本要判断就是pa和pb,那如果说我认为camera给他一个什么字母呢,q吧,那q a和qb这些这些方向的本子,不得跟p a p b肯定不一样嘛,那如果我想非常精准的话。
那我肯定得在场景中去打一条光线,真正从b往a方向上去,对不对,那在场景中我怎么样去踹死一个光线,然后嘿嘿这块就是我们之后要说的s2 了好吧,那咱们先回到s s d o上面来。
那么ssd呢,大家可以看到从刚才的这么一个计算上来看啊,嗯和s s a o好像计算量差不多,对不对,都是说我我取一个这种半球嘛,然后呃在中间打若干点。
然后根据所谓camera的可见性来近似shining point,对这些方向的可见性,那么嗯所不同的地方是,当我判定有一些方向会被挡住的时候,就是这种时候我不是简单的认为哦,这个方向看不见东西。
不是像a o这么假设,而是说被挡住的时候,我就计算所谓挡住的那些那些像素或者小片,他怎么对这个shading point进行一个贡献,就是要做额外的一些这些计算啊,shading的一些计算。
所以总体上来说还是一个非常轻量级的一个,计算方法对吧,那么嗯所以说呢,他嗯这个得到了一系列不错的广泛应用啊,这个意思,然后它的质量也是非常不错的,相当于是你和a o比嘛对吧。
他可以做一系列的这些间接光照进来的,当然是不错了,那么它有没有问题呢,有那么首先来说我们刚才已经说过了,他只能表示一个小范围内的全局光照对吗,那那呃这个是怎么回事,马上我们再继续说对吧。
然后呃另外一点是呃,他既然在shading point嗯嗯p点,那它往各个方向的可见性,是通过从camera往这些点的可见性去去判断的,那是当然不准对吧,但是他毕竟算是考虑了一点。
在次级光源和协定换人之间,他们的可能性对吧,算是考虑了,但是没考虑那么准还是不错的,这样说,那么它的一个真正的大问题在哪,大问题其实还在screen space这个事情上。
那么screen space咱们之前上节课讲过,screen space怎么理解呢,要把它理解成为一个壳,是不是什么意思,就相当于我从camera看向场景,我我就等于是不同的不同的像素。
它有一个深度对吗,然后呃它就等于把这个场景给变成了一个,我在camera这个位置往场景方向看,我所能看到的一个壳,那至于这壳背后的东西我都不知道对不对,screen space嘛。
我记录都是最浅的深度嘛,那这种情况下呢,呃就会出现一些所谓screen space会丢失信息的问题,丢失什么信息,那自然就是在我直接能看到的这层壳背后,我什么都不知道,就这个事情,那么一个很明显的例子。
就是这么下面一横,大家可以看到,对于左边这幅图来说诶,大家可以看s s s d o非常好嘛对吧,可以可以把这块这个面反射到地板的,这么一部分光线给算出来,挺好的,那它旋转了一点之后,大家可以看到多少。
还有一点吧,没问题,但是当这个正面啊,咱们还是假设这个面旋转到我们看不见的时候,那时就出手对吧,那当然它旋转过去之后呢,我更看不见,那就会出现这么一个问题对吧。
那所以说s s d o它是它是有一个问题的,就是一切s s都会有这么一个问题,就是说我认为我所有的信息都是我cameras,所直接能看到的信息,也就是说我camera可以看到,比如说上面这个面呃。
这么一个小的面,它背后那个大的那么一个面啊,我我根本就不知道它的存在对吗,就是这个意思了,所以所以说他们就更不可能说会贡献到嗯,对于呃比如说地板上它的shading对吧,他肯定不可能有贡献的。
所以是看不到的,那所以这当然就是s s d o的一个问题了好吧。
但是不管怎么样,就是整体上来说还是ok的,那么我们来看另外一个问题,就是我们刚才说的嗯,它只能解决嗯,这个一个一个小的范围内,它的间接光照,那那当然对全局光照来说也是一样的。
嗯但是呢全局光照中间有一有大量的一些例子,比如说像那个经典的corner box对吧,这算是一个改版哈,嗯我先说清楚这幅图是拿pastry啊,呃还是拿photo mapping做的。
对应该拿photo mapping方法做的,然后嗯他当然能解决完美的全屏光照,大家可以看到这个面上对吧,它会反射出这个墙来,那么如果我要考虑呃用s s d o来做,那怎么做呀,那我肯定是一开始没有反射。
然后呢我考虑说我看到了这个点,我取它周围的一个范围周围的范围,那我取再大,也应该覆盖不到右边的这个绿墙对吧,那也就是说他无论如何,他不会考虑到这边绿墙对这个点它的一个呃,一个贡献,所以说这里明确指出来。
他只能处理一个所谓,非常那小范围内的全局光照或者间接光照好吧。
那么由于这是录播哈哈就不存在问题了,咱们直接进展下一个话题吧,好吧,就是屏幕空间的反射,然后嗯屏幕空间的反射,咱们为什么要说这么一个事情对吧,然后他到底是是是干什么的,然后他核心问题是什么。
咱们要关注的几个上嗯,但在讲这个之前呢,我更愿意把它理解成screen space retracing啊,所以那样写也是ssr哈哈,ok就是说嗯其实把它理解成反射是挺狭隘的,我们马上说好吧。
那就是说什么是ssr呢对吧,s2 然后一个正确的一个理解哈,就是说它仍然是一种实现全局,在实时渲染中实现全局光照的一种方式,ok也就是说它它能够做的是,在屏幕空间上做光线追踪。
这就是它的一个更精准的一个定义,就是就是就是这么个意思呃,然后在屏幕空间做呃光影追踪是什么意思,也就是说我不需要知道整个场景,它的一些三维的一些呃网格呀,三角形啊,像这些我不需要知道,我所要知道的。
仍然还只是我屏幕空间上的那么一些呃,已有的一些知识诶,那我我们刚才才说屏幕空间上,其实就相当于是认为我看到的就只是从camera,过去场景中存在的那么一层壳对吧,就是这么个意思。
那这个壳多少它能够表示一些嗯,整个场景的一些信息了,对不对,然后这样的话,我在这么个壳上和一个光线做一个呃,光线追踪求交呃,那这应该就是我要做的所谓s2 要做的事情,但这不是所有的事情。
他要解决两个事情,第一什么呢,第一他要能嗯给给定任何的光线和呃,这么一个场景,咱们刚才才说,其实是在camera下场景能看到的,场景的这层壳和这个光线做求教啊,这是一个重要的一件事情。
另外一件事情咱们不能忽略对吧,他肯定还要找到焦点之后,我还要把最后这种反射的结果给算出来,那要算出来我肯定还要做shady对吧,我要算哦,我求求道焦点了,那个相交的那个像素。
他对shading point的一个贡献,这要怎么算,所以这两块肯定都是要算的,那么还是一样,就是说虽然它叫做screen space reflection,但我不这么认为。
我认为它应该叫screen space retracing,然后这样的话就是说我们不限于考虑呃,所谓反射光,我们考虑的是任何光线和场景的这么一层壳。
它怎么样,求教啊,这个意思,那咱们之后还会有更深入的理解,那看一下啊,就是说我们可以先看在日常生活中啊,这种呃反射的东西那是非常常见的对吧,比如说海景房对吧,嘿嘿大家可以看到呃。
地面上一些这种光滑的这些地地面,然后它会反射出来这些窗户啊,这些牌子呀,然后这边家具啊这些东西对吧,然后就是反射非常明显的,那么在下雨之后的街道上,大家也可以看到这些反射对吧。
然后大家可以看到反射出来的这有灯光,也有这些建筑物本身对吧,所以说啊在这里我就稍微停一下,说一下这个事儿,就是说反射这个事情,本质上来说,它其实就是全局光照,为什么呢,因为大家可以想象。
如果说你有camera ram达到一个shading point,假如说这个点好吧,然后它就应该往上反射,正好反射到了一个光源好,那这就是从光源到shading point到你的眼睛。
这不是直接光照的对吧,那如果说考虑另另外一个点,比如说这里好吧,这个点,然后他反射过去反射到了这个楼,我知道这个楼它又不是光源,它是被别人照亮了对吧,那所以是光源到这个楼的这个表面,到地面。
再到你的眼睛,所以反射本来做的就是全局光照,它没有什么特殊的东西对吧,然后只不过平常人们会考虑说这种呃,镜面反射啊,像这种东西可能会用的比较多,在游戏里面,所以单独的把反射拎出来,然后当做另外一种效果。
其实它就是全局光照啊,没有任何问题,那么在游戏中大家可以看到,比如说地面嗯,呃这个地面上加上了反射之后,和没有加上反射的一个效果,对吧,然后大家会会其实会这么觉得哈。
我觉得肯定有很多同学跟我是一个感受什么呢,我其实觉得这地板不该有反射,这么正常,工厂里面地板哪有那么亮吗,这么地板啊,对不对,然后我觉得右边反而更正常一点,不过呢这是作为能够秀一些技术。
那当然啊左边这个很明显可以看到反射啊,可以做出来这种反射效果还是不错的啊,这个意思啊,咱们就不评价哪个更好了,但是反射挺有用的好吧,那么咱们既然想说屏幕空间的反射,如果我想把这么一个效果给做出来啊。
就是大家可以看到雨雨后的街道,我要把它给做出来,那我假设啊是这么一个事情,就假设场景中先没有反射,那也就是这是地面上啊,没有反射出这些街道啊什么东西的,然后我现在想把反射加进去,那么我问这么一个问题啊。
就是我为了把反射给加进去,那么我肯定要知道任何一个点,它都应该反射到什么东西对吧,然后从这幅图上来呢,我可以发现一个很有意思的一个现象,大家可以看到这个白色这么一块啊,基本上来说。
这这底下这块都是呃反射呃出来的东西,那么它反射出的是什么呢,反射出的其实就是诶上面红色圈出来这么一块,那也就是说啊,其实它反射出来的这么些东西,绝大多数都是在屏幕空间中已经有了的东西,是这么个意思。
也就是说如果说我在反射之前,我就已经有这么一个人一个场景在这,我要把反射加进去,我其实不太需要额外的一些信息,我只需要说知道呃,在反射之前我这场景中的一些信息就行了。
这就是所谓screen space的一个基本思想,我会认为啊这些反射光呃,很大一部分程度上来说,反射出来的都是这个场景中已有的东西,不是不是场景中这个屏幕上已有的东西啊,当然这样假设不一定对哈。
咱们之后会说ok,但是绝大部分,比如说像这个例子就挺明显的对吧。
那么我们就想一想,如果说啊,我们现在就真的就想把这么一种类似镜面,反射的一种效果给做出来,然后假设这个场景中间已经渲染出来了,这这上面这这一部分,然后地面上还没有反射,我们要反射加进去,那怎么做呢。
那也就是说对于任何一个像素来说对吧,那我既然知道我的观察的这么一个方向,然后我肯定知道它的镜面反射方向,假如说我们要做镜面反射啊,镜面反射方向就是一个方向。
那么这个方向那自然就是说从这个shining point,然后往某一个方向上去,这是三维的,咱们先说清楚,对于光线的定义肯定是三维的某一个位置,然后我往往往某一个方向上去,这肯定是三维的一根光线。
我要让他和这个场景求交,和这个屏幕空间上它的几何去求教,也就是说和屏幕上,我能看到这个场景这么一层壳去求教求教,求到的那个点,我就用那个点当做反射光,这是最粗糙的一个做法啊对吧。
然后嗯那么这就是一个基本的思路了,如果我真的要做所谓ssr reflection,然后这里呢为了避免大家,这个就是说认为说屏幕空间反射,就真的就只能做镜面反射。
我给大家说清楚,它可以做镜面反射,没问题,看这里对吧,然后大家可以看到镜面反射非常完美的镜面哈,然后他也可以做有一定的所谓gloy的一些呃,嗯就一些材质啊,这个意思。
刚才镜面反射叫specular specular reflection,然后这种呢叫glossy reflection,它没有镜面反射那么好,但是它它也不是完全diffuse对吧,这个意思。
那么他怎么做的吧,肯定有同学会问,那我这时候过去一个camera,那这时候我知道他b r d f lob反射出来,它应该是一个某种lob对吧,咱们之前老早就已经说过,b2 d f是某一种lob。
然后呢这种情况呢,那我会不会说我要对这个logo我再取一根,反射光线就不够了,我得取多少根对吧,答案是就是这么做,哈哈就是说对于有一定roughness的一些材质来说,我给定一个入射的。
其实就是观察的方向,那出去的这些方向,然后我嗯根据他b2 d f的logo来考虑,它logo越越越细,我可以用越少的光线,如果logo越大,比如像diffuse这种啊,那他当然就会需要更多的光线。
不过没关系,肯定可以做对吧,咱们先不考虑速度什么的对吧,那可以做没问题,然后他还能做什么呢,他可以做任何的东西,比如说地面不平,如果他有一个各各个不同的位置,它有一个什么呢,有一些不同的发现呃。
然后那这样的话,反射光会往不同的方向去了对吧,那也没问题,那大家可以看到效果是可以的,甚至来说不要求地面,这个平面啊对于任何一种物体,然后反正我只要知道他的这个几何,知道它的发现。
我就可以去往任何一个方向去trace,这正好就是我之前所说的就是s2 ,或者镜面的反射,它可以做任何的光线追踪啊,这么个意思,那能做光线追踪,那就能解决任何的这种反射问题,当然了。
比如说不同的位置有不同的所谓roughness,工业界啊,比这里多提一句,工业界有时候会定义一些很奇怪的一些东西,比如说大家可以看到这里叫smoothness,之前呢。
比如说我们在说b r d f什么东西,我们平常会定义一些,比如概念叫roughness,它的粗糙程度,这里呢就是所谓光滑程度,自然就跟粗糙程度相反了,那这里就可以认为啊这块光滑程度比较高。
这块光滑程度比较低啊,没什么意思,ok那咱们想一想怎么做吧,好吧,回到刚才的呃,呃这种镜面反射作为一个例子,那么镜面反射咱们一开始说了,假设说还没反射呢对吧,这地面上看没反射,这块我先先想出来再说对吧。
然后呃我场景任何一个位置,我知道它的法线呃,这没问题,任何一个点知道它的深度也没问题,这作为正常的输入,那么我下面要做的事情,就是说我对于地面上的任何一个像素,我都想计算出来它的反射出来的值是什么对吧。
然后我最后再把反射的东西,就加到我之前这个场景里面去,这就是最基础的一个一个思路了啊,ok那么我要怎么做,现在问题就已经到了最关键的一步,我对于地面上任何一点我都知道,如果是它是镜面,那它的反射光。
它的这个光线3d的对吧,应该是怎么样描述它对吧,我清清楚楚的知道它的反射光,那么我现在就想知道这个反射光,会与场景中的哪个像素相交。
就是想做这么一个事情对吧,那么这个事情怎么做呢,其实一个最简单的一个思路是什么呢,那就是从一个呃呃比如说这里啊,呃呃就是shading point嘛,左边的虚线,这就是反射光,然后我说这个场景来说。
我既然是屏幕空间描述它,那自然啊,如果camera在右边的话,那我看到的这么一个场景,就是最外层这么一层壳,是不是这意思对吧,然后我知道这里有一个光线从这里出发,向斜上方走。
我想问他和这个壳相交的点在哪,在这对吧,大家一目了然,那么在实践中我们怎么做呢,嗯就是在任何一个shader里面对吧,我们可以取,比如比如说初始的一个点在这,然后呢我们可以往往这个方向去往这个方向。
每一次呢我往前走一点,每次往前走一点,然后直到我走到嗯这球壳所描述的对嗯,这个呃这个深度最浅的深度的背后,那么这就说明呃有有焦点了,那之前可以认为哦我的光线的起点,它的深度就是如果从camera看过去。
那肯定深度是比这球壳要比这个壳要浅的对吧,然后我在呃沿着这个光线这走的这个过程中,这些点啊我都可以再考虑哦,如果我从camera再看这个点,然后它的深度是跟我之前看到的场景,这层壳的深度相比啊。
到这里它仍然还是比呃场景的深度要浅的,到这他就比场景的深度要深了啊,那这橡胶肯定就发生在这啊,这么个意思对吧,就相当于用深度来做这么一个可见性判断,还是一样。
跟之前做s s a o和d o一模一样的做法好吧,那么这里大家就肯定想到会有一个问题对吧,我这里面我这步长要取多大,对我每一次往前走都多多远,那如果我每一次我都走得非常嗯,就是步子迈得非常大。
那会不会出现说诶我会找到一个焦点,其实都已经进到这个壳内部了对吧,那肯定就不好嘛,对不对,那么呃如果说呢我在这个点我取得不长,比较小,波长比较小,那当然就可以找到更精准,找到这么一个点对吧。
每一次我只往前走那么一点点来判断,那肯定会非常准了,但是像这种情况下,那肯定是我我做的计算量就会很大,而且大家看到这里只是在trace,一根反射光线啊。
你每一个fragment shader都要做这样一个操作,那当然操作就非常麻烦了,对不对,那所以说呢步长太大太小都不太好,那怎么办,对不对,那咱们想一想这个这个问题啊,对吧哦这里再多说一句。
这里的步长呢你必须得固定一个定值,因为这里呢又没有sdf,告诉你往前走走多少一个安全距离对吧,你怎么能知道这个信息对吧,没有s d f的情况下,你只能盲目的往前试探呢,这么个意思对吧,那那那啊。
这就是说为什么你得你得给一个补偿啊,这个意思好,那么呃我们回到说这个方法对吧,不长大的小的都不好,那么人们是很聪明的,人们就研究出来了一种我来动态决定这不长。
应该是有多大这么个意思哈,那么动态决定步长有多大,是是什么个意什么个做法啊,就是咱们还是假设考虑这么一个反射光,大概是就是从这里,然后往这个方向去嗯,那么一个一个嗯能够观察到现象是什么呢。
从这个反射光呢,我往这些方向上去看,然后我其实没必要,比如说我我每一次往前走一个很小的一个范围,呃,呃很小的一个距离,这个小的距离可以小到说一个呃在场景中,一个像素所描述的一个呃这么一个大小声对吧。
我往前走一格,咱们这这么定义吧,一个像素算是一格,我每次往前走一格固然是好的对吧,是肯定是ok的对吧,然后就是不长,小到这程度总归是够的,但是没必要,比如说像这里我会发现哦。
我往前走四格是不是都ok对吧,然后然后然后到这里都不可能和这个物体相交,那么如果我可以快速的拿到这么一个信息,就是我往前一下可以走几格这么一个信息啊,如果我能拿到这个信息,那就非常好了对吧。
嘿嘿那所以说这就是人们聪明的地方,人们研究出来的一种方法,可以让我们呃可以可以一下跳过好多步,就这么个意思哈,然后然后那这是怎么做的呢,它有一个重要的准备工作什么。
先把场景中间的这个深度做一个mip map,但是做这个map map的时候,跟我们平常所说的map map不一样,因为我们说的mip map呢,就是说形成一个图像金字塔对吧,认为呃整个最啊嗯怎么说呢。
就是最精细的那一层在最底下,然后往上每一次边长除以啊,咱们之前老早就说过对吧,mf是这么做的,然后但是呢它和正常的mmap的做法,不一样的地方在于它认为啊我在做map map的时候。
我上一层存的一个像素,不再是下一层的四个像素的平均,而是它们的最小值,ok这么个意思哈,然后比如说这一层上面一个像素,又对应这一层上面的四个像素,它的一个最小值,那么最小这里我们说清楚。
就是所谓深度离场景更近,就呃呃就是这个时候值就越小啊,这个意思,maple哈哈对吧,这个意思,那么他为什么要这么做呢。
对吧,那这是一个关键,那咱们分析分析对吧,那大家第一反应是什么对吧,不管是在什么空间里,那肯定是咱们之前讲过的呃,就是所谓层次结构对吧,我对一个场景,建立一个所谓b z h r或者kd tra。
之前都说过对吧,那么同样道理,在对于一个就是我我我在屏幕空间上,是这么一个思路哈,能允许我立刻就是相当于扔掉很多这种啊,就是一下扔掉,或者一下跳过很多不可能相交的一些像素,在这里对吧。
那就这么一个思路了,那谁能告诉我这么个信息呢,那就是说如果我可以建立一个所谓,用这个最小操作呃,最小值这么一个操作建立起来的一个啊,mip map的话,那他就会告诉我这么一个信息,为什么呢。
因为我这样的话就会得到一个保守的逻辑,什么逻辑,咱们先把这个事情说了,就是说如果一个光线,就是说呃和上层的一个节点,那这里节点就是一个呃一个像素文素对吧,一个text和上层的一个text都不可能相交。
那它绝对是不可能和它的下层的子节点相交的,那这是什么意思呢,比如说大家看这里,这是一个很明确的一个例子,这里有个光点,从这开始我问他,我们前面trace的过程中,假设我们就考虑这个节点。
那咱们先说清楚啊,比如说mmap,它当然是二维的,那反映在一维的情况下,就是嗯比如说第零层,那就这里就是123456788个格子啊,这里就是竖着的,每一个是一个格子,那第一层。
那就是说每两个格子把它给弄成一个对吧,然后那这就是第一层上一个节点,并且咱们看啊嗯深度来说,那肯定是这样的,就是对于一个场景来说,我我我每一个像素我只能记录一个深度对吧,然后最低零层我肯定比如说嗯。
对于呃这个像素来说,记录深度在这儿啊,然后那第呃第零层对于这个像素记录深度在这,那么我整个在第一层上,那我这两个像素我都要考虑他们的深度,并且取最小值,那么就取得深度取到了,这而不是一个平均在这儿啊。
这么个意思行,那么这样的话就有一个保守估计了,就是如果我是这么建立的mip map,那么大家看这根光线合着整个在第一层上,它的这样一个蓝色的块,它都不可能相交,那么它就更不可能和它在第零层的这两个块。
相交了,对嘛,这就是它的一个基本逻辑了,然后那这样的话有什么好处呢,这样的话就可以让我们快速的,跳过很多的一些格子啊,这么个意思,ok然后嗯那如果另外一种情况,当你的光线和上层的。
比如说这里大家看到四个在一块,那这自然大家知道这叫level 2对吧,从level 0开始的呢是每一个像素一个,然后level一是每两个呃形成一个像素,然后level 2呢就每四个形成一个像素。
这里是再次出进入一维的情况啊,然后那这里呢大家会发现光线啊,和这么一个呃呃一层的一个一个一个node相交,那么如果光线和这一个node相交,那我就知道光线有可能和它的两个子节点。
也就是说level一上的这两个节点,这俩和这俩啊,呃这两个节点可能会有焦点对吗,就是这么个意思,然后根据这个光线,你看这光线根据它到底是相交在了哪边,它相交在这这左边这块呢,还是右边这块呢。
你就可以知道你应该看它的下面的哪一层的,哪一呃,就这就是它们它它下面一层的哪一个节点,那大家知道应该看右边这个节点没问题啊,也就是说呃为什么要做这么一个depth map map。
并且是用最小值来定义的,其实就是对场景做了一个非常非常简单的,就是对对那个我们能看到的一个壳,这么个意思。
我们就可以方便地用它来计算,说我在这个光线啊,在传播过程中到底会相交到哪一个像素上去啊,这么个意思,那呃这里有一个非常不错的一个示意啊,怎么做呢,呃其实伪代码都在这里啊。
然后我先跟大家说一下一个基本思想是什么,基本思想呢,我借用篮球上一个术语,我们把它理解成叫做试探步啊,这么个意思,也就是说啊就是可以这么理解哦,我应该往前走多少呢,呃那我先保守一点。
往往前稍微走那么一点点对吧,走走慢点,如果走慢点的,我发现没事儿,哎我可以没事,那我就就继续往前,我就走得更快一点,就这么个意思,那如果我我也也就是说我下一步就迈得更大,然后如果还没焦点。
我下一步就可以卖的更大,然后当我发现哦什么时候有了一个焦点的时候,那我就知道唉,这这时候就意味着哦,我不不应该把步子迈这么大,因为这个时候肯定焦点就会可能会出现在啊,这呃就是就是在更低的一些层上对吧。
就是这么个意思,也就是说在危险的边缘疯狂试探,就这么一个思路哈,就是呃就这样一个试探方法,那怎么做,大家其实先不用看代码啊,先看呃整个一个示意啊,大家可以看到那最终的结果,如果从这儿有一层光线。
要和整个场景这么一个壳求交的话,那那就应该交点在这,那么这个算法是怎么做的呢,大家看,首先呢我我会先保守一点啊,我往前往前试探的走一步呃,然后我认为啊我现在最精细的那一层,我往前走一个格子啊,这个意思。
然后呢我发现这个时候没焦点对吧,你看看这个红线和记录的最小深度相比,红线还在上面呢,没焦点没焦点怎么办,那我这时候我胆子大一点了,下一次我再往前走,我可就要走两格了,或者这样理解我。
可我可就要在上一层的,就是就是更粗糙的一层的这么一个呃,层次结构上走一个格了啊,这是一回事啊,对吧啊行,那我在粗糙的一层上走一个格了,然后大家可以看到这时候诶我发现还没交点,是不是这个意思啊。
更粗糙的一层上一个呃,文素可不是表示的原本的精细的,这两个文素它的一个呃深度的最小值嘛,所以它表示的是这么一个格子对吧,他表示这么个格子,发现跟光光线还没有交点对吧,那这个时候怎么办。
那同学们已经可以想到对吧,刚才呃就是说我我就是说我在level 0对吧,然后我发现level 0往前走一格啊,ok没问题,没焦点,那我这时候就在level一上往前再走一个。
那么level一上这这样走一格我还没找到教练,那没问题,那我在level 2上再走一格吧,那level 2这我先不到下一页,大家想一想,level 2 level 2的话。
那肯定一格是表示原本level 0上四个格对吧,那四个格呢往往右边走,那应该就是说这四个格它形成了一个最小深度,形成了一个大的格子,然后那就是这点对不对,然后我会发现哦。
那我在level 2上我可终于找到焦点了,是这意思吗,对吧哎那这时候就说我不能再这么激进了,我再再往前对吧,我在trace嗯,八个格,那那那这这这不会为什么呢,因为逻辑告诉我。
这时候光线是有可能和更精细的格子相交了,这么个意思,那么大家可以看到,光线和刚才level 2上这么一个大格子,焦点在哪啊,在这在这儿的话,那意思就是说哦,他跟左边这个格子是没有交点的。
我就直接从右边这个格子考虑啊,这么个意思,那么那我就应该这个时候小心一点吧,就是说不不要再考虑这个呃,那我应该考虑更精细的一层,相当于是我要考虑这个格子啊,这么个意思看到了吗对吧。
然后那我考虑这个格子的时候发现哦,ok那这个时候还是有交点那行,那我们就更谨慎一点,我们来看它它和嗯这个就是光线,是不是要考虑和第零层的呃,这这些格子他们求教了什么意思。
那这个时候呢大家又看到一个图形学上,经典会出现一个情况,这个格子这种情况,你算不算光线和左边这个格子呃,有焦点,还是说香蕉的那个点是在右右侧,就是我们应该看哪一个格子嗯,那这里呢咱们就假设说啊。
他跟左边这个是有交点的啊,这么说清楚,那如果说考虑跟呃,就是说再考虑呃level一的情况下,焦点出现了在了左边边,那我就应该在level 0的情况下,来考虑左边这个格子,然后我会发现没有交点啊。
ok这个意思没有焦点,那么这个时候怎么办,又回到我们刚才逻辑了诶,你不是只往前看了一部吗,然后在这里不是发现呃,光线往这个方向走,和和这个level 0的一个格子没有交点吗,那怎么办呢。
我下一次再往前走,是不是又要考虑level一上,然后我我要再走啊,再走一个格子,也就是要考虑这么一个东西是不是没问题吧,然后那这样的话呢我就可以看到哦,o和level一的这个格子又有交点,并且焦点在哪。
在它左边边,那这个时候我就又回到level 0上,我来看和它是否有交点,最后找到了右焦点,没问题,算法结束,ok那所以说就是这么一个思路了,那就是说总结到代码上来看,超级简单的事情哈。
就是说啊当然这里没有写,完全就是说什么情况下我要继续往前呃,考虑这个光线继续往前走,有两个条件,第一呢你找到了焦点,也就是说也就是说level那会嗯暂时被你制成负的,然后这个意思。
然后另外一个是你在整个屏幕上都找遍了,也没有焦点,就是说当你已经走出了屏幕的时候,那这种情况也应该停下来啊,两个条件停下来不止这一句,ok但没关系,就是说它的一个基本思路就是这样的,就是说在任何时候。
你不是都知道你当前在第几层嘛对吧,你最开始你认为在最嗯就是复杂的那一层,第零层你往前走一个格子,然后根据这个不同的情况来看,如果没焦点对吧,没焦点的情况下,你就大胆一点,下次我就走两个格子。
然后再下次就走四个格子,那其实就是相当于是我把这个呃,level往前提一级对吧,然后我level 0上往前走一格,没上没焦点,那这时候我就在level一上往前再走一格,不是这意思吗。
相当于是把level往前提一层,那么如果他找到了焦点,找到了焦点的情况下,那这个时候我就知道哦,我就应该在它的更精细的一层里面,再继续找焦点,不过这里呢没有那么简单,就是这个level直接减啊。
这里面就是说工业界的实现最混乱的,其实就是这一步,那在这里希望给大家能够,提供一个一个标准化思路哈,这个意思咱们往前翻两页,那以这个为例哈,咱们咱们刚才嗯比如说在这啊,现在再来l1 ,然后发现没交点。
那怎么办,升一级level到level 2和level 2的这个点,然后进行求教,我会发现光线在往前步进的过程中,找到了这个点对吗,然后我找到这个点,我就会发现哦,我其实是知道这level 2呃。
如果我要把它划分成两个level一的子节点,它其实应该相交到的是右边这个字节点,这个事情是我立刻可以知道的,我不用挨个试啊,ok这个事情我说清楚,就是说我在找到焦点的时候,我知道焦点在哪。
知道焦点在哪儿,我就知道他应该是往往他的哪一个子节点里面,继续去寻找这么个意思啊,然后这样的话呢我就是说根据它的焦点在右边,然后我我我下一回我肯定要找所谓level呃,零的对吧。
嗯还是level 0 level一的,这是这是level 2对吧,焦点又在这,那我就应该在找焦点处所在的level 1,它的值是多少,所以他应该直接找到这么一个呃节点,而不会找到左边这个啊,咱们说清楚。
就是说就是就是说它不会一下,一个节点的两个差往下划分,那如果对应mip map的话,就是说呃2d的map map map,它就不会往四个节点啊,分别都去划分,因为你知道焦点在哪,你知道它的精细的那一层。
它会教到哪啊,这么个意思,ok好,那这样的话呢呃就说清楚了,就特别就是这个简简level的时候一定要弄清楚,就相当于是是你的焦点处所在的,就是更精细的那一层,它对应的那个格子这样说就没问题了。
然后就是说这块来说呢,有很多嗯很多就是就是就工业界实现吧,有各种各样不同的思路,然后我觉得这样做是对的,然后另外我多说一句,这一页并不是从嗯这个所谓siggraph of course,里面拿来的。
这要是我发现他他实现的和他写的有点矛盾,我给加上的哈,这么个意思就是嗯大家看这里哈,就是说嗯我就已经回到了mini map 0第零层,然后往前踹死了一下,然后往前踹死一下,发现没焦点。
这个时候我一定是应该在level一上,也就是说每两个格子形成的一个node上,然后我再去找再去找这么一个格子,然后在在这种情况下又发现相较,我才会跟level 0上这一个格子去做。
求教之前他这个给出来的例子,这个中间是没有嗯,没有经过我说的啊这样的过程的啊,然而我觉得那样是错的啊,我这么解释应该才是对的,这样的话能够代码写的就会比较干净了哈,这个意思,那么这时候我再多说一个嗯。
就是说会出现的一个问题什么呢,大家会发现啊,这里我是其实非常依赖于,在mip map的不同层之间对吧,我我我我写了这么一个最小的深度的,然后但是我们之前说mip map的时候,大家还记得吗。
我们可以做呃范围的一个查询,正方形的一个查询,这个没问题,但是呢他其实做不了,就是说呃准确的,就是他起点不在二的k次方上的这种这种查询,这什么意思呢,就比如说大家可以知道啊,我们以哪一步。
伟丽娜以这幅为例吧对吧,然后假如说啊你一个一个图,它总共就八个像素啊,还是一维的情况,就八个像素,那我会生成一个呃,就是在第一层,那我肯定变成四个像素,每两个形成一个,那我现在如果我想问哈。
就是就是说在第一层上,如果我考虑这么一个点,大家可以看到我考虑这么一个点,那他还会出现一个什么样的一个情况,就是说就是说他其实做不了这第二个格子,第三个格子这里嗯,他求一个最小值,如果我硬要的话。
我就得去算一个,就是左边这个格子它记录最小值,右边这个格子记录最小值,他们中间的一个平均我要插值啊,正的意思,其实他做不了这种起点不在二的k次方上面的,是这样一个平均,但是应该还是ok的好吗。
ok那这样的话就应该是没问题的,好行,那这样的话应该就是这块儿,算是把细节都给说清楚了,然后同学们我多说一句,我在直播的课程里面,就是昨天啊并没有说这么详细,所以说如果呃看了直播的同学们。
然后我建议还是再看一下这个就这块来说,说句实话,s2 的各种算法,在网络上是非常非常非常混乱的,然后就是说我们希望能够提供一种,就是说应该是没问题的一个一个思路啊,这么来做好。
那么现在说说了他怎么做的了对吧,然后从这个角度上看,咱们再回到刚才的出发点,我们我们我们在做什么对吧,hierarchical tracing,我们不希望一次往前走一个格子,我们希望一次可以跳好多格子。
那通过这种方法就可以动态的来决定说,我到底啊往往前面应该怎么样去跳,这样的话,我可以快速的求到任何一个光线和场景,所描述的这么一层壳,它的焦点好吧,那就太好了对吧,那也就是说我可以把这种嗯。
屏幕空间的光线追踪做得非常快。
那反射应该也可以做的非常好,那当然是没有问题,但是他会有什么问题对吧,这其实我们比较在意的事情,那么还是一样,他的问题呢完全出在screen space上,o,那screen space。
就是就是说他在这里又会有什么问题呢,一个最严重的问题就是咱们看这幅图非常明显,大家可以看到这么一只手对吧,我们刚才说screen space所描述的场景的几何,相当于是什么呢。
相当于是我从cameras所能看到的一层壳,是不是也就是说我们知道他是一个手,但是对于camera来说,他怎么可能知道他是一个手,比如说这个手心这块是什么,他他完全看不到吗,他不知道。
他会认为根本不存在它所记录的整个场景,就是他所能看到最外层的一层壳嘛,那这样的话,那你反射出来的结果就是这样的,大家会看到非常神奇的现象,这边会会感觉背后就好像没有手掌一样,特别哪里呢。
比如这里大家看这个手指的这个部分,咱们知道这背后应该手指肚对吧,但是对于screen space来说,它就只认为外面有层壳,所以它反射出来就是这么一层壳,底下这块你就看不到这个手指的指肚,这个意思啊。
很有意思的一个这种几何的一个问题啊,这个问题说清楚,这跟retracing没关系,这个问题是出在就是说我对场景来说,我对他的理解就只到这里,就只知道他外面这层壳啊,就是screen space的问题。
那么screen space还有什么问题呢,那就是咱们最早说啊,我会认为说我反射出来的那些物体啊,它都在屏幕里,但是它是不是都是对的呢,这样考虑,那答案是它不完全是对的对吧,比如说我们看这里这个点呃。
如果我们看过去,然后它会反射到哪呢,反射到这个位置上去,但是如果这个点稍微偏下一点,比如这个位置呢,它反射过去就会反射出屏幕了,它反射到上面去了,他再也找不到这个相交的几何的对吗,我们是屏幕空间呀。
对不对,我们不知道屏幕外面发生了任何事情,那所以到这儿他什么也反射不出来,就会出现一个明显的一道cut的,在这里对吧,但这个是非常不希望做到的事情,所以人们平常呢做了很多很聪明的一个做法。
比如说根据你反射光这个走的距离哈,然后做一个衰减,如果你反射光走的距离长了,然后我就认为它呃,就基本上反射的东西看不太着了啊,这个意思,然后我把这个结果最后虚化掉呢,当然对于这个边界来说就不是很明显了。
是不是这意思对吧,ok那我们到此为止,差不多就是关于呃光线追踪这块已经说明白了,但是我们刚才说啊,s s2 要解决两个问题呢对吧,第一你要知道它反射光在哪,然后第二呢你要知道怎么样去做shady。
对不对,那shading是怎么样做呢,那这里来说就是说我们刚才竟然已经提到了,所谓s s2 ,仅仅是把所谓光线追踪这一步,从原本的三维的一个嗯,这种光线和bvh求交给,改成了光线与这种这种球壳呃。
不和场景的横格求交对吗,那那也就是说,其实你之前的pass racing的任何算法,都是可以直接过来用的,那么我们看对于任何一个shading point,你看到的radiance。
那其实就是对整个场景啊,整个呃它的对应的半球做一个积分对吧,然后如果说嗯你的b2 d f,它其实是一个呃完全specular的b r d f,那么这个b2 d f是一个delta函数。
我们知道在积分里面出现一个delta函数,那积分就没了对吧,然后就是沿着反射光去找它对应的这这边呃,呃就是就是反射的光所达到的那个物体,它所反射的嗯这种radiance是多少,那这是正确的一个理解对吧。
然后如果是对于一般性的b2 d f,有些glossy这些没问题,那就是蒙特卡罗方法多采样几根,然后这样的话呃,不管怎么样,我所达到的那些物体反射过来的radiance。
一定就是我对于这个p点接收到的incident,radiance,这里是完全正确的,那么呃大家再这样想哈,就是说我们这里仍然还需要假设diffuse,reflector,就是反射物。
还必须得是diffuse,说清楚啊,就是不是反射的接收物,就是地板什么东西肯定还得还可以是glc,镜面都没有问题,我们只是说反射物得是diffuse,为什么呢,因为你在屏幕空间中,你看到的那些像素。
它反射出来的值,那都是那些像素反射到你的camera,它的radiance是多少,你并不知道那些像素q反射到呃,这任意的一个p点,它的它的reading是多少,除非你假设这些反射物都是diffuse的。
那这样的话它反射到不管是camera还是任何的方向,它他的呃radiance都是一样的啊,这回明白这个意思哈,ok那是没问题,那么其实在直播的过程中给大家了两个问题哈。
然后我觉得大家听录播也可以好好思考一下,这首就是说啊嗯呃就是说我如果这么这么做啊,大家看到我任意一点的shading怎么算,不就是这么算,那这么算的话,会不会还有一个。
那我们最早说的那么一个距离的衰减呢,答案是没有的,ok为什么呢,因为这里你在做的是b r d f3 ,对你并没有说从呃某一些呃刺激光源上,你对他的area进行积分对吧,然后来算任何刺激光源。
对这个视频point的一个贡献对吧,你算的是还是在立体角度范围内,你在shading point上做这种tracy,然后另外一个呢,那就是说这里他有没有处理好。
所谓shading point和刺激光源之间的可见性,这么一个问题呢,那这个答案是处理的好,没问题,他这里这里处理的是非常正确的做法,为什么呢,因为你在任何的p点啊,然后就是shading point。
你往任何地方去trace,你找到的都是第一个能够看到的物体对吧,第一个达到的物体,也就是说在这中间你是保证不会有呃,这边看不见的东西的,也就是说你所考虑的能够嗯对谁领跑,你的贡献的东西都是有可见性的啊。
那这样说就没有任何问题了好吧,也就是说嗯这里呢其实应该在离线渲染,多跟大家说一说这些话题啊,就是说你在做b2 d f sampling的时候,就不会有可见性和距离平方衰减这么两个问题。
然后你在做light sampling的时候,一定会出现这两个问题,并且都不好做啊,这么个意思,那么大家看到啊,在shading上,我我们刚才说了s2 来说,就是说你这个反射光。
这些光线是你自己可以随便取的,也就是说你其实在做的就是pass tracing,相当于这么个意思,就是说你既然做pass string,所以说你有很多现象是直接就可以做得到的。
就是这么个意思,什么呢,就只要你的shading做得对哈,shing可千万不是像我们之前所说,最简单,就是就是说认为说我trace到了一个像素,我就把那个颜色拿过来,那就是它反射出来的颜色好吧。
那那那这嘿这就不是正正确的,投行学应该理解的思路哈,就是说我拿到的那些东西,就是认为是diffuse的反射物,然后他们所能够出色的radiance是多少啊,这个这个意思。
那这样的话它就直接可以解决很多现象,什么现象,就是说首先你的反射可能会是呃,就比如说对于镜面来说,它反射出来的东西肯定是非常锐利的,然后你要是对于一些glossy的物体,那肯定是一些模糊的。
这个现象绝对能做,因为这就是不同的b r d f而已,我们刚才说就是不同的数量的呃,这些光线而已对吧,那么另外一点呢就是说这个现象叫contact hardening,这个现象是什么呢。
就是说我会发现对于对这个物体来说啊,大家可以看到对于它爪子,这这个反射其实挺清晰的,然后离远了呢,然后反射出来翅膀就不怎么清晰,这是怎么回事呢,那咱们可以简单做个假设,假如说物体是一个平面啊。
假如整个这些这些被反呃,就是反射物,它们是个平面,然后你的呃你如果说有一个呃嗯什么呢,有一个shading point啊,然后它会发出一个就是b2 d f load嘛,你比如有个入射光。
打到某一个入射的观察方向嘛,达到某个时间困境,它会有一个有一个这种锥形对吧,往外打,然后锥形的大小是就是由b2 d f决定的,那么这个锥形大家可以想象,如果说呃这个设定方面的,离整个反射物呃比较远。
那么它是锥形,在传播过程中越传播越大对吧,传播越来越大,你就相当于是收集了整个一个大范围里面,他们的所有的这些点,他对谁灵point的贡献,那如果说我是零point的,离这个呃离这个平面非常近。
就是离反射物,那同样一个角度的一个一个呃追啊过来,那其实就只会达到一个非常小的一个范围,那么我就要平均的一个很小的一个范围,然后这个事情都可以解释的没问题,因为你在用正确的b r d f来。
来来做这么一个操作,所以这个操作是这个结果,contact hardening,这种反射是自然而然就会有一个结果,不会有任何的额外操作啊,这么个意思,然后呃那他还能做什么呢。
这个现象叫specular elongation,这个这个意思是什么呢,大家在雨天是非常非常容易能够看到的事情,特别是如果大家在雨天坐车的情况下,你要是看到这些红绿灯什么的,你会感觉这个红绿灯什么东西。
就感觉垂直的被拉长了,是这么个意思吧,这个它的反射就是就是就是上下这么被拉长了,而这个现象是非常好解释的,为什么呢,你可以认为这里用到1年,咱们game z101 之前说过的知识啊。
认为你的地面都是各向同性的,各项同性还记得吗,normal distribution就是法线分布,法线分布是一个跟各个方向都是都是那个的,都是一样的,也就是说类似一个圆嘛,这么理解。
如果如果啊法线分布在一个横标准的一个圆上,那么你给定一个观察的这个方向,那么它反射出去的b r d f logo,其实就应该是一个长条的一个椭圆啊,这么个意思,那这样的话它就会出现嗯。
就是说呃你看到反射的这些这些物体,同样我我还是强调这么一件事情,就是说他这个现象,绝对不是一种什么特殊的现象,你正确考虑了,在刚才呃shading这一步的b2 d f项,它就一定会得到这样一个现象。
所以没有什么什么稀奇的啊,然后最后一点其实咱们已经说了,就是说呃他完全不挑这些嗯,接受反射的这些东西,它是不是个平面啊,然后以及它本身normal是怎么样啊,没关系。
因为我们本来在做的就是pass training嘛,对任何不同的点,然后他的normal不一样,它几何不一样,那又有什么关系,它只是出色的这个呃,反正数据光光线不一样的,对不对,这样写。
那么嗯在这之后呢,我再提一下,有若干嗯提高的地方吧,就是说人们现在在做的一些东西,一个很显然的事情,就是说我们之前在game 1,零幺没有什么没有特别提,但是算是提到了一句对吧。
我既然知道观察的方向过来,然后我就知道b2 d f,我知道它反射出去应该是集中的一个范围内的,这在b r d f lob内对吧,然后我没有必要说去嗯均匀的往四面八方去呃,去呃随机的采样这些光线。
我只需要用一种pdf,使得它长得跟这个logo形状一样,让我更多倾向于随机选择一些,在logo中间嗯的这么一些方向对吧,然后这样的话,我就可以把光线分布在这么个logo内,并且当然既嗯叫什么来着。
就是说一定是要正确的计算pdf的哈,这个事情啊,不过这个嗯101之前没有多说,之后再看吧,对于离线渲染的课来说,嗯以后再开的话,然后再给大家好好说一下。
关于这块important samping怎么回事,但是思路是很明白的对吧,反射它既然都是集中在这么一个方向内,你是没有必要去把它给四面八方,全部都给均匀散开的,对吧好。
那那这样的话呃对于一些glossy的一些物体,然后你就可以来做,那这里多说一句哈,就是说对于glossy的这些物体,大家可以发现,如果glossy到了一定极致的话,那就不就不就变成镜面了吗。
然后也就是说给你一个观察的方向,它的反射数据方向是完完全全就是一个方向,那这样的话不存在noise对吧,那什么时候noise最大呢,那也就是说一个光线进来之后,如果这个物体是diffuse的话。
那它就会往四面八方都会反射,那这时候你需要大量的光线,还记得v x g i吗对吧,然后把整个一个半球拆成了八个呃,空对吧,然后八个够不够还不够对吧,然后也就是说嗯。
diffuse呢一定程度上来说挺难的对吧,但是我们之前也曾经提过diffuse呢,它是最低频的东西对吧,它是constant呀对吧,用b2 d f,然后它本身你用再复杂的环境光去照亮它。
它它最后结果仍然很糊,这也就是说我们之前所说用ssh,用前几节去描述光照的一个基础嘛对吧,那这里大家就会发现一个非常神奇的现象,什么样的材质是最容易的diffic,什么样的材质又是最难的,还是tpu。
所以说这个啊比较有趣的一个现象,我跟大家说一说好吧,然后另外一个事情呢,这块反正就越越说越难了,这里我就简单提一下这个概念,什么意思呢,就是说大家会发现,如果真的有gloy的一些物体啊。
你可能一个shading point,不止要出去trace一条空间,那么你会达到对应的焦点,那这样的话你就会觉得啊这个开销好大呀对吧,那怎么办呢,就是人们会研究一些所谓时间和空间上的复用。
那么时间上咱们不再多说,在呃在那个real time retracing,我们会大量的说他那么在空间上的费用,我们应该怎么样去做呢,相当于是啊,我任何一个shading point。
我都可以利用它周围就在屏幕上啊,它周围一圈呃,像素或者稍微更大一点一个区域内,这些像素,他们trace等那些信息我都可以拿过来复用,什么意思呢,比如说啊咱们以左边这个点。
假如他trace出来的是左边这个光线打到,打到这个点,那么右边这个shading point,假如他踹死的是右边这个光线打到这么一点,那我其实可以问这个事情,那我打到的这个点。
这个点是由左边这个shading point达到的对吧,那如果这个点是由呃,右边这个shading point产生的这么一个反射光,打到他的,那我问这个点。
对于右边这个shading point的贡献是多少,我可不可以快速的把它给弄出来,答案是可以的,我可以根据这两个点,它对应的b2 d f我来调整说,如果这个点是由右边这个点trace到它的。
那它的贡献应该是多少,那这样无形之中就增加了三坡的数量了,对不对,这样想的,原本两个点各踹死一条光线,那相当于是两个光线共线,那现在来说对于这个点来说,我又可以算他对右边这个点的呃。
shading point的光线,那对于这个hit point,我又可以算他对左边这个shading point他的贡献,那这样一来就好像说我原本只踹死了两条光线,但我起到了四条光线的作用。
是不是这个意思,那就非常好了,那么这个reduce怎么做,这就很就相对来说高端一点,就是这里呢也正好再多说一句,就是一切离线渲染,他肯定背后都是要有这个呃,离线渲染的内功在的。
那既然我们是先说的离实现实时渲染,这么这么这么一门课,就有很多东西,其实是没有办法给大家说得非常深的,像像这么一个话题啊,但是之后再看吧,再在嗯以后看再给大家补啊,这么个概念。
但是high level是好理解的,没问题吧,就是就是说我复用之前,那其他的pixel踹到了的结果,这是肯定是可以的好吧,然后呢还有一个道理,咱们之前在说split sum的时候,我们说过这事儿对吧。
我对于一个环境光,我先把它给filter一遍,就预先模糊一遍,然后呢我只需要在它的镜面反射的方向上,我去查一次,就好像是我在没有filter的原始的英文文台上,然后我考虑他真正的glc反射。
然后这些范围内我去查好多次,哎,是不是这个意思,也就是说我其实可以把这个屏幕空间对吧,这里我要反射出来的东西对吧,反射物啊,它不就是屏幕空间吗,那屏幕空空间上得到这个图,我先把它做一个模糊对吧。
我把它做成模糊,然后我之后再做这种查询的时候,很可能啊我对glossy的这种面,我也只需要沿着他的specular的方向,去查一次就可以了,诶那这是非常好的事情,但是呢这里涉及到一个问题。
你的屏幕空间得到了这么一张图啊,它各个点不同深度是不一样的,然后不像我们环境光,环境光咱们之前所说假设过对吧,这些呃不同的方向,然后他都认为呃呃来自于无穷远,什么意思,但是你对于屏幕空间来说。
他自己有明确的深度,你肯定不希望说你在做模糊的时候,前景会被你糊到背景上去对吧,然后背景上的颜色,你也不希望它跑到前景上面去,那也就是说对于filter来说,这块对于他的filter是不是不太好做。
你还得考虑一下深度上的差异对吧,像这种情况下,这个filter要怎么做,然后以及说你对于深度本身,他自己是不应该filter的吧对吧,深度本身他肯定是表示任何一个像素,它本身对应的一个一个深度。
你要把连续的,比如说前景背景深度给混合在一块,那是什么意思呢,是不是就是取个平均,是是是没有什么物理意义,这个意思对吧,那也就是对于这一系列的filter,咱们再回到说对于啊对于啊这叫什么。
就整个屏幕你最后渲染出来那个结果吧,那张图怎么样做filter,那这是我们之后要说的,在嗯在实时观念追踪这块说呃,叫做joint bliteral filtering,叫做嗯可能叫联合双边滤波。
这么个意思吧,就是说挺复杂的一个概念之后呢,再跟大家说具体怎么做好吧,就是说关于filter的事情,但是呃关于这里,这肯定是一个提高方法,先filter在quer一次啊。
ok那么咱们总结一下所谓屏幕空间的啊,retracy或者叫reflection,然后他可以很快的做,比如说glossy或者specular的一些反射,这也就是说之前人们大量的用这个技术的时候。
为什么画面看起来特别的油对吧,咱们之前说过这事儿就是呃油呢,那自然就是说这种glossy的反射,稍微多了些对吧,然后如果都是diffuse的话,那当然就好。
但diffuse呢做这嗯屏幕空间的retracing,做起来会比较慢,那肯定的对于任何一个shading point,都要打出大量的光线,往四面八方去,但其实还是可以的啊,然后特别是在现在啊。
实时光线追踪的发展,然后可以让人们做一个非常嗯怎么说呢,比较高效的一些时间空间的一种filter,使得说diffuse的这些物体,你也可以放心的去做retracing,那么这里再多说一句啊。
实时光线追踪,那本身呢就是说光线追踪,就是都可以做的比较快,然后他们本身都是在解决,说快速的做光线追踪这么一个事儿,也就是说他们本质上是一样的,你就可以把它给结合到任何的一些。
就是所谓最后的shading上面去,所以从从这个角度上来说,如果r t r t可以通过用它的方法去解决,diffuse物体上面的反射,那么用spring space retracing肯定也是可以的。
这就是为什么我们的这次作业呃要做的事情,洞穴里面这些物体都是debu吧,对没问题,然后我们就用s2 来做他的呃,呃就是整个的呃间接光照,然后把全局光照给弄出来啊,这么个意思好吧,然后咱们再继续说完。
就是说呃好处呢s2 效果非常好,速度又比较快对吧,然后呢嗯呃这最后一点不,我不太想多说了,就是说他嗯没有这些exclusion的问题,也没有这些spike,spike是什么对吧嗯然后我只简单说一下。
它就是跟我们之前说距离,平方会有一定的关系啊,然后这里嗯这再说吧,我们实时现场课上就不再提这事儿了,就是反正它的好处,就是一切光线追踪能提供的好处,那么它的不好的地方,首先s就会出问题对吧。
就是屏幕空间的retracing肯定要出问题,那么另外一点,做restring对于diffuse来说是挺难做的,咱们刚才已经说了对吧,那就是这么个意思吧,行吧,那今天就到这儿,然后我看啊。
比咱们直播省了大概十几分钟的样子哈。
然后哈哈哈哈还行吧还行吧,然后呃下一节课开始,我们就开始说pb 2材质啊,所谓基于物理渲染中间用到的材质,大家可以看到这幅图是从迪士尼的嗯,big hero six里面来的,大家知道这大白。
但看起来就像那些什么嗯,什么什么什么样的塑料对吧,什么polly,什么什么什么什么英文对吧,然后这为什么看起来像呢对吧,然后我们就要研究说这些材质到底是怎么回事,它们和光线怎么样作用对吧。
然后特别是在实时渲染中又不能太复杂,那应该怎么办,那咱们下节课开始说好吧。
GAMES203: 三维重建和理解 - P1:Lecture 1 Introduction and Scanning - GAMES-Webinar - BV1pw411d7aS
好吧那我们就开始吧,好吧啊,欢迎大家来到那个我开了这门课啊,实际上啊这个title呢首先声明一下,就是这个讲课是肯定是用中文啊,因为方便大家,但是这个flash呢因为呃就是一个是方便嘛。
再一个就是学术术语上面呃更精确一些啊,我们都是用英文的啊,这个希望大家能够谅解啊,啊然后这门课呢啊我首先想想为什么要开这门课,这门课实际上就是说。
这个title相对来说它比较的technical就当为重建和这个理解对吧,但实际上呢我们把它可以可以看成是就是这个motivation这样的,就是说呃其实有两个field嘛对吧。
一个就是像我自己是做做做graph,做vision的东西对吧,在graph里面呢有一个field叫几何处理对吧,其实也有一个会叫simple chargeothy对吧,这个是研究这个三维物体的。
怎么表示啊,重建啊,理解对吧,在这个三维视觉里面呢,就三位数学就是计算机视觉嘛,里面有个bd就是三维视觉对吧,那现在呢大家研究的这个主要的问题呢,也也是这个表示理解什么东西的对吧,然后开这课呢。
就是希望就是说呃,就是我们我们把这两个这两个这两个这个build合起来看对吧,我们看看能不能找到一些共同的东西对吧,就是说啊因为现在这两个fs相对来说这个融汇贯通非常非常多对吧,非常非常多啊。
然后我自己也搞了一个叫做three d cv,three d jp vision的一个series对吧,大家可能有一些呃一些呃啊朋友知道这个事情对吧。
啊啊这个课呢实际上就是说呃我们就是说呃就是这样可以这么来说呢,就是说几几何处理呃,其实他也分很多方面对吧,有些人做微分几何地的这方面的东西对吧。
就是嗯我们这门课呢主要是把它从这个就是in vers pro视觉这个方向啊,方面来看,这个geoning process对吧啊我们也有时候有把它叫做sweet ching process对吧。
这是一个方面啊,然后还有一个就是三维视觉,什么三维视觉里面现在所理解的离不开其他的,就包括自己的东西对吧,就是就是特别现现在这个三维物体这种表示嘛,啊那我们就希望通过这门课呢。
我们把这两个东西呢把把把这打通对吧,我们用一个用一个这个嗯共同的视角来看这个这个东西,好吧,嗯然后这门课呢我重新介绍一下自己的数据,我是在现在又调兵对吧,来了好几年了,现在是做助理教授啊。
这门课的时间是北京时间的,这个就是周五啊,每周五啊早上的十点钟对吧,嗯我们现在还在赛道,不一定infrastructure,如果你有学术问题啊,学术问题你可以直接给我发email啊。
我争取所有的email都回好吧,然后你你如果想了解我的research呢,你可以到我的主页上去看一看啊,然后这门课呢会有两两次作业对吧,两次作业。
然后还有一些呢就是optional的这种啊这种这种这种大作业对吧,这个嗯你可以,你如果如果不管,如果没时间,你不用做对吧,但是我会提供一些包括这门课,我会给你提供一些这个。
呃一些potential profe对吧,让你去选看一看啊,然后呢我刚才提到了嘛,就是说我首先来源营销单纯是吧,就是比如说gg processing对吧,其实就是说这是一个怎么说呢。
这个pu大概也存在了呃,至少30~40年吧,有优惠叫simple george boing,今年应该也是,快20年了吧,2003年开始的啊,快20了,快20年了啊,就是这个东西实际上它是一个什么呢。
它是用一种呃计算的办法啊,计算的办法来研究这个这个physical object对吧,那计算的方法的话,也就是说第一步第一个很重要的问题就重建了对吧,比如说我们看到很多这种b这块的这种物体对吧。
呃这个这个这个自然世界里面对吧,我们在生活中很多非洲object,然后呢我们要把它变成一个三维模型对吧,首先那那首先要通过这种硬件扫描对吧,那我会讲这个东西,然后把它变成三维模型,变成三维模型以后呢。
就做这种处理和分析嘛,比如说我们我们怎么怎么让这个表示形式比较好对吧,比如说首先是怎么表示他对吧,那又怎么样表述它的话,那每一种表述里面怎么去凹陷,表示它对吧,然后有一些处理的话。
比如说我们要做参数化对吧,贴文理,然后我们那你作为做做就把把这种federal变成这种three d的这种object对吧,我们会具体讲这个东西啊,就是说你可以如果你对这个bd的不熟悉的话。
你就理解成就是这么feel your object,我们在计算机里面make了一个copy,好吧啊,这这个其实就是这个事情会牵扯到一系列一系列的问题,是很多人就是有问题去研究。
但是make a physical house的时候呢,我们就可以用计算的办法去做一些分析,比如说啊这个这个东西,比如说它它它的这个part对吧,比如说这个物体跟那个物体哪些地方是对应的。
对吧啊比如说我们怎么怎么把物体组合起来,变成更更更更更多的物体对吧,很多很多这样的问题对吧,然后这个是在说我们也可以可以说有个fc object fsc这个世界对吧。
我们也可以有一个这种这种这种这种虚拟的世界对吧,虚拟的世界收音感觉有点难受啊,现在好一点吗,我对着这个讲吧,唉那那现在这个processing和analysis呢,他就是在这个虚拟的世界里面。
虚拟的世界里面啊,就是这个virtual对吧,然后你你在这个虚拟的世界里面把这个物体编辑好了,你又可以回到这个,你就可以回到这个物理世界,这叫three printing啊。
我们争取讲一点点three printing啊,但我希望将来啊在这给你james这个平台,有人专门来讲这门一门课啊,我觉得这是一个很有意思的东西啊,好好都是gg propeline对吧。
你可以看这里面有两个部分,一个是重建对吧,还有一个就是这种and standing processing对吧,这是graphics对吧。
graphics这个community怎么看这个three d mode,但是three graphics有很多别的topic对吧,animation on the rendering,对啊好。
然后我在讲sd 33维视觉对吧,其实这个肯定ity相对来说他比bp这个肯定更大更大对吧,它其实这个也很interesting对吧,其实三维视觉传统的就是就是非常狭义的去看三维视觉是干什么。
就说我们去recall the underline three destructure for image对吧,就是嗯这个image实际上也是capture这个thesical world对吧。
但是呃呃george poser里面这个重建的他从desc来的sky来的对吧,呃它不牵涉到这个呃,基本基本上不清楚image是吧,v视觉里面就是说啊因为人嘛对吧。
就你这个大部分的camera capture这种q d image对吧,然后我们又问问的一个问题,就是说我能我们能不能呃。
recover就是重建这个on the line in的这种three monstructure对吧,这是三维数学里面一个啊一个fundamental problem,或者就是基本终终止了对吧。
然后这里面有很多问题,比如说stration和motion,motive stereo对吧,这基本上可以说是稍微视觉里面做sd重建两个最重要的问题啊,两个最重要的问题,当然三维视觉里面还有一些别的问题。
比如说processation对吧啊啊这是三维视觉啊,这个是传统的啊,传统的三维视觉,所以这个framework呢跟这个起processing里面,比如说大家研究的这个重建嗯。
嗯他这个他这个framework是不一样的啊,但有一些共同的问题啊,比如说syndication我会讲啊,但是他的framework和是不一样的啊,好这就是三位数学。
那最近呢如果你你去就是比如说或者e c d v i c t v,这些就是我们叫做flash对吧,这种呃conference的话呃你会发现这个呃这个研究啊,就是大量的研究它转向了什么。
转向standing,这原因是为什么呢,就比如说这个这个是因为有海量的这个three model款式了,就是比如说image net对吧,有真正push了这个我觉得是push了这个啊这个计算机视觉对吧。
从从一种真正push to machine learning对吧,就是这种啊或者是低层呢,你就是你需要有大的这种数据集对吧,那个three d这个抖妹呢妈妈有大的数据集以后呢。
大家慢慢开始呢就开始做什么呢,就是说我们不仅是重建这个three monstructure对吧,嗯为什么这个非常interesting,为什么这个three division里面。
它最开始我不不不不不说我们重建sweet model是重重重建swedistruction的,因为从英文来的,相对来说啊,你你做这个重建是非常非常难的啊,所以我们有时候比如说我们重建。
比如说flag对吧,它不像这个其他process里面起点就比较高对吧,是一个一个那种比较比较high,一般情况下比较high,quality deskin对吧,实际上他起点比较高。
呃有些英文词听不清楚啊,有些那那我尽量少讲英文词吧好吧,我如果要讲的话,我就讲得慢一点啊,就是这种three dimensional structures对吧。
我又不是three d surfaces对吧,因为这个vision里面的问题比较难啊,啊对吧,但是现在有了这个three distructure以后呢,你看现在你去这个这个这个这个,下次直播哦。
好像我我可以我可以去换一个麦啊,没有问题啊,然后,啊那我接着讲吧,那个叫做standing和synthesis是吧,就现现现在就是大家研究出这种问题对吧,这就跟那个process里面你做这个呃。
呃processing和劳损失就已经是共性了嘛对吧,比如说研究的问题,大家比如说基本的问题啊,就是classic classification segmentation detection对吧。
就是这些问题啊,对这个麦是我一个我一个那个音箱类似的,可能是可能是这个问题,可能有点这个问题啊对吧,这就啊ok classification semitation detection好吧。
然后这这这里面有一个东西我要讲的是呢,就是说这三位视觉跟二维视觉啊,他到底区别在哪,区别在哪,你比如说你可以说哎他没什么区别对吧,因为我们研究的问题都一样对吧,我们都要比如说我们都要对。
不管是图片还是三维物体进行分分类对吧,我要做分割对吧,我们做检测对吧,没有什么区别对吧,但实际上真的区别大了对吧,区别大在哪,那就是说你如果你考虑,比如说我们学了做做做机器学习啊,机器学习这门课对吧。
你怎么做机器学习呢,比如说你学一门课,肯定你首先会学,比如说这个啊regression啊,我不知道对吧,你你就是一个vex到另外一个vex对吧,你有一个有一个变换对吧,你要你要去你要去优化这个变化对吧。
但是你如果解你如果从这个思想来看这个计算机视觉呢,那就会牵扯到光,那我怎么把我的data对吧,我的数据表示成这种vex y就是这种向量对吧,像x和y对吧,这就牵涉到一个表述的问题对吧,然后三维数据在哪。
那就是它有各种表示对吧,比如说你可以把三维物体表示成一个word magic这个体术对吧,你可以把它表示成一个三角面片对吧,你可以表示成一个点云对吧,你还可以表示成一个嗯嗯light pi吧。
就是很多很多图片组在一起是吧,你还以为有这种sram的这种表示对吧,就是这种啊这这种这种场景的这种图的表示对吧,哎这个东西呢实际上就跟george processing了。
嗯就就是三维处就几何处理呢就就关系很紧密了对吧,关系很紧密了对吧啊好那那这就是一个motivation对吧,然后我们这门课呢就想把这两个东西呢两个build呢,呃用一个一个一个framework对吧。
一个猜出来讲啊,当然重建的时候肯定会不一样对吧,但后面会一样对吧,就是啊我们想做一个这样的这样这样的场景啊,这门课啊,我在我的学校交了有2~33次了吧,啊房价还是不错的啊,评分也还是不错的啊。
好然后现在来了对吧,我讲了这么多抽象的东西,然后你会问,比如说这个东西为什么跟我相关对吧,其实这是sweety这个问题吧,就是说第一呢我觉得是就是他有太多的问题对吧,呃太多的这个领域啊。
跟这个跟这个这个这个几几何处理和和计算机三维视觉相关了啊,再就是呢我觉得就是这个东西做好以后,还会有一些新的啊新的这种应用场景出来啊,就比如说你看啊这种mac对吧,大家做这种呃,将来做这种。
比如说无人驾驶汽车对吧,或者做这种virtual reality对吧,比如说这种augmentor virtual reality,我们队需要对整个地球做这种非常精致的建模对吧,这是一个重建的问题啊。
哎这是一个lication对吧,现在这个并不并没有做的特别好啊,嗯当我们make就是我们有很很啊已经有很不错的进展啊。
比如说我们需要采集,比如说呃这个这个人对吧,采集这个人的这个呃performance对吧,这也是一个vision呃呃呃也也有一些其他的boss的东西在里面对吧。
比如说你我们做robotics对吧,你是不robotics的话,你你牵涉到这个很多时候你是牵涉到这个robert的,这个就是这个机器人跟这个自然界它要做交互对吧,你既然要做交互。
那基本上你要做三维的建模对吧啊还要做三维的理解对吧,to d基本上是不够的啊,嗯唉这个field发展很快。
我待会会讲一点,讲一讲讲一下,如果大家对这个东西感兴趣的话,啊啊就刚才说的是无人驾驶对吧,那他不仅他他也需要一种swedistanding对吧,你这个distance对吧,这个距离非常重要啊。
距离非常重要对吧。
还有就是传统的对吧啊这种反向工程对吧,就比如说你你你制造了一个模型,你制造了一个模型对吧,你你你能不能做一些分析啊,这个东西制造的是不是跟实际的有偏差对吧啊,所以包括包括你少了一个模型。
你能不能就是说你能不能知道这个模型是怎么构成的对吧,你做分割啊什么东西的对吧,哎这个东西嗯呃纯的就是嗯嗯它它实际上它跟这个一个field叫计算辅助,几个设计,计算机辅助设计对吧,相关对吧。
这在呃机械工程那边有很多应用,我只是点一下啊,就是说实际上你像这种比如说在生物对吧,生物对吧,对三维的这种生物的这个数据进行一些分析对吧啊,在医学里面那三三维医学影像分析对吧。
哎多多少少都牵扯的都牵扯对吧,都牵扯对好嗯,然后我就想说的就是刚才我想强调一点,就是这个gei vision它是一个就是说一个交叉学科啊,这是啊,这实际上是非常非常的啊,嗯你可以说他模糊哈。
同时也说他这个非常广对吧啊,它其实跟很多东西都相关,是计算机图形学视觉的biology对吧,生物呃建筑对吧,这个呃医学和机器人相关啊,这是啊,所以我怎么说呢,我嗯嗯对吧,这个我们要学的是什么呢。
就是说不是学一些非常fancy对吧,我们学的这些基本功对吧,我我我我作为一个就是也培养学生嘛,我我自己嗯,我想知道你们这边这个这个听众里面是大部分是研究生还是本科生啊,你们能不能简单的,对吧我不知道啊。
就是你们可以那个就是我强调的就是说研究生是吧,哦大部分是研究生,也就是说实际上就是至少编程这一块,你们应该是对吧啊,还有一些p h d有本科啊,就是大部分情况下就是至少这个编程是没问题的啊,就是。
对就编程是没问题的啊,所以我我想我我就想这个东西它实际上是一个一个交叉学科,一个交叉学科啊,就是说再再一个我想讲的就是还是要强调基本功对吧,基本功。
实际上我知道学生就是说往往现在特别是在这个深度学习的这个阶段,我发现这个很危险啊,一个一一篇文章的,没有一个数学公式对吧,只要你就是就是做一个刷子的,对不对,其实是software。
他他有时候真的要做好了,他有很多测试嘛对吧,你看咱们做的这个demon sof嗯,很多时候测试都不够,你就把文章发出来了对吧,你也不管他这个东西将来会有多大的伤害对吧。
你真的如果是做刷出来命运的话对还有选择测试对吧,真正的这种基本功啊,我觉得是缺失的啊,这个是啊非常不幸的啊,包括我自己带的学生,也多多少少也会发现这种问题啊。
在这门课呢我就是想就是说至少如果你做这个方向的话,我想把这个基本功对吧,给大家好好打一打,你看我推荐的文章大部分都是很老的对啊,当然我有我我那个历史啊,那个主页上的历史不不全啊,我这两天会把它搞全啊。
包括还有一些后面的这个嗯lex这种reaccommodation,对啊啊,就是对这个东西是很重要的,我想我想那个然后我讲讲我们到底到底呃呃cover什么东西好吧,就是我们到底讲什么东西。
我们有三个tp对吧,第一个tp就是重建对吧,就重建对吧,这个当然我们会讲两个pipeline对吧,一个pipeline就是说我们今天会签到一点叫做ky对吧,那就是这个扫描对吧,硬件是什么。
这个三维扫描是怎么做的,然后就是注册对吧,因为因为你扫描只能扫描一部分嘛对吧,你怎么把这个不同的这个不同的这个东西给给合在一起对吧,这是一个很重要的问题,然后还有就是重建对吧,怎么得到这种三维的曲面。
然后还有另外一个一个pass,就是说我们首先做structural motion,multive serial,对吧,three main的话肯定是三维重建了是吧,scary stration对吧。
这两两者都有啊,然后这是这是几何处理对吧,这个反正我就前三个对吧,后三个呢后两个呢一个就是说你如果从image做重建了一个叫做motion对吧,嗯就是得到这个camera的pos啊。
然后一些少量的点对吧,然后motive serious是做那种非常dh的对吧,大大地图的数据结构呢是呃大地图的数据结构我会讲吗,如果你们有这个要求,我肯定会讲,然后会简单的讲一讲啊。
我会在那个surface reconstruction那个地方讲一下啊,然后那个motiv stereo,multiview,stereo那个啊,这是做dance的reconstruction。
然后我还会讲一个问题,就是怎么解决这个multiple object这种这种pose,对我们这我们这个地方地方叫做这个schization slization对吧。
我觉得这里面有一些比较比较比较有意思的东西,请问有slam相关的专题的话啊,分别reconstruction里面有一部分会会跟sm有点关系啊,就def spf 3 slization,它是跟graph。
bassm,graph就是图相关的图,基于图的这种sm会会会挂钩啊,对吧,这是motiv stereo,然后一个textbook呢就是满意这本书对吧,就是你可以啊,明明这个书比较数学,比较数学。
但是演好吧,啊有回放,我们这个这个是在录的对吧,这个是在录的啊,这个是在录的,对这个是在录的,然后,然后这本书啊这本书这个我们会就是我们我们的nature self content对吧。
并不需要你啊啊知道这里面所有的内容啊,但是我觉得如果比如说你是博士生,我觉得还是推荐你看一看啊,第二个部分就是怎么去表示这个东西是吧,data那我们觉得就是说特别是vision出来以后。
真的就是把把这个representation这个全部mesh对吧,范围面片,三角面片或者这种power base对吧,建议就是power base这种model对吧,就是或者影视曲面。
the night field对吧,或者这种呃呃点云对吧,呃我们把它就是,把它从而通过这种物物体表示的角度去看对吧,你传统的传统的那个呃graphics的话,它会一个一个讲嘛对吧,每个都有不同的应用。
对吧啊,但是我们这里真正把它当成一种data representation来看啊,然后呢还有一个很重要的就是data representation呢,我们就牵扯到对吧,比如说你这个不同的data。
这之间是怎么转换的诶这是一个很肥的非常引起的问题啊,在graphic和这个几何处理里面是重新学和几何处理里面啊,大家是研究很多的,比如说一个比较经典的东西,就是你怎么把一个影视曲面。
我会讲什么是影视曲面啊,比如说你如果如果特别curious的话,特别好奇的话,那比如说x平方加y平方加b平方等于一是吧,哎他就是一个球面是吧,这就是也是曲面啊。
嗯你怎么把一个影视全面把它变变换成一个三三角网格对吧,你比如说像这样子的对吧,诶这个这个这个是我们要研究的对吧,啊哎啊包括怎么把点云对吧,你把它变成一个演示曲面对吧,扫描的时候扫描一些点嘛对吧。
哎这这也是非常非常非常有意思的研究问题啊,但有一则研究问题,然后,ok然后我我有两本推荐的书对吧,一个是point base的这种graphics啊,一个是polymath processing对吧。
这两本书我还是很推荐的啊,就是呃也不当然你不需要读制造权所有东西,我觉得这里面讲的大部分东西啊,现在做deep learning的,做做deep learning的,你特别做spring。
你不一定都知道啊,有很多东西就是不知道的,这门课我希望补一补啊,我会讲一些啊啊这门课不可能讲所有的东西啊,我我要讲的,其实你你你也是听一个,我会侧重一些特别重要的算法对吧,但大部分情况下的话。
我会给你一个目录对吧,你自己有兴趣的话,你应该自己看啊,这个这个东西,而且嗯很多时候特别像这种东西,它不是说你听听一个leon你就懂了啊,听一门课你真的要自己去动手实验啊。
实践你懂我意思吧啊这样你才能掌握的很清楚啊,所以这个是要注意的东西对吧,那第三个部分就理解了,比如说这个sensation maching。
the heal class classification classroom啊,这些东西的话就是要要那个呃我们我们我们会讲这个东西对吧,特别我们会讲一些跟deep learning相关的。
还有就是囊deep learning种,其实都很很对吧,嗯对吧,好就是我我我想强调一点,就是说我们会for some basic对吧,基本上比如说我们有时候讲一门课。
我们就说我们把最近的这方面的文章拿过来读一读吧,唉我我不是很喜欢这个方式啊,因为我觉得其实精华的东西往往都是一些比较早期的东西对吧,就是而且也就是说你既要读这种早期的文章,也要读最近的对吧。
你这样你才能了解一个学科对吧,它是怎么变化,怎么发展的啊,就是特别如果如果我们做做守卫的话对吧,做这个嗯这两者都要找不到对吧,这两者都要照顾到啊,就是嗯就是说而且我想想。
比如说你可以也可以做这个recent train ai对吧,大家都对,现在你做的啊,我还讲这种三维视觉里面对吧,对我这种注册啊,重建啊,这种po嗯,感觉就是有点outdated对吧。
现在大家都喜欢这些fancy的东西对吧,比如说deep for learning ro宝,ning manipulation,有个什么automas driving对吧,对吧。
automdriving visual revigation对吧,finite in machine learning,对吧啊,其实就是说现在大学就是学术前沿嘛,学术前沿的话肯定大家你要做这个。
但是你真正要做的东西,你真正做了以后,你发现其实还是回到一些basic的东西,比如说你怎么做classification对吧,怎么做充电对啊,三个物体是怎么表示的对吧,最后还是回到一个东西吧。
你一些很复杂的论文,他最后还是一些基本的东西对吧,如果基本的东西我们掌握不好对吧,底子打得不好,你就很难去做这些呃,比较advance的东西对吧啊,经常我我讲这个东西啊,经常会听到有人跟我说。
他们说哎这个提醒啊,怎么还对吧,你还是做这种好,有点对吧对吧,social distancing对吧,这这这比较fancy对吧,但是我要想说的就是说你真的要把这些复杂的东西,特别像现在做机器人嘛。
很复杂的一个系统对吧,其实你要把那个系统做好,还是这个最基本的东西,基础你要搞好,知道吧,这这是我想强调的一点啊,嗯这个东西大家经常不注意,然后然后比如说嗯比如说他在这些东西。
我们讲的东西它都是一些bob building,block building blog对吧,就是注册啊,重建啊,这种做做分类啊,分类其实做比如说做recognition protection。
最基础的东西啊,对我们要学的,实际上其实我们性能力的机器学习,也不是说机器学习最大的问题在哪,就是你真的要把它实用啊,他对这个data的要求还是比较高的啊,这就是为什么vision大家觉得实用性很强。
因为他的data他是real date嘛对吧,就是你真正的这种natural image,比如说你标注的很好的话,你缺一个deep model,它真的就能用用上对吧。
但很多时候你并不是没有好的data对吧,这个时候机器学习,他就他甚至有时候还比不过这种拿飞机器学习的办法,就是啊这一点我也会讲对吧啊我也会讲,就是说他有时候就是差一点,我要强调的就是说什么时候呢。
你要把一个东西理解透对吧,哎把把东西理解透,这是很重要的啊,然后我在想呢,就是说这个东西大家很不愿意听的,现在你比如说摆拍最高的是吧,很多高的文章上一个他可能一个数学公式都没有对吧。
就是但是实际上呢你要真的把一个东西理解透啊,其实你看比如说做做这种speech mp什么东西是重要的,比如说lini线性代数对吧,那是比较重要的对吧,这种嗯这种这种非欧几何对吧。
或者这种摄影几何这个很重要的,一共大概多少个16个16节课,每节课一个半小时到一个小时,50分钟之内吧,好吧,今天可能会结束的早一点啊,这里面还是有很多干货的啊,就是我不知道。
我不知道你们如果学重新学啊,就是会学什么东西,真是对你们还是会想到很多干货的,一周一次要持续四个月嘛,啊差不多嘛对吧,我觉得这个对啊,我还是很愿意想的。
因为我觉得就是说因为我我我觉得这个这个这个基础很重要啊,其实我觉得基础是非常重要啊,就是线性代数对吧,大家都学过对吧对吧,如果你学过这种机械制图的话,你第二个也没有什么问题对吧。
然后有些东西呢会有一些defense想要什么,就是呃topology的东西在里面啊,这个我也会尽量的去讲啊,尽量的去讲,然后我另外想讲的就是做这一类东西,不管是三维重建啊,包括理解,不是一周一次。
我觉得挺好的呀,就是你可以有时间去读这个,读读文章嘛对吧,而且我觉得周五,有两次作业对吧,行行我我我换一个麦克风,我我我我换换一个推荐文章,在我那个主页上有就是这个课程的主页上。
但是那个现在推荐文章不是很全啊,我会慢慢的把它搞全好吧,呃我争取明天去阿部队的一下主页,我会讲homework to project是哪些py,马上就有,ok,好然后我再想想一下。
就是这个numerical musician important对吧,就是说这个就是优化对吧,这个优化这个东西呢我也会我也会花专门的时间去讲对吧,就是就是优化问题对吧。
你解重建写in worm这个优化问题,就是这个非常重要的对吧,我们会会讲的就是我们会有一定的自由度嘛,就是我会讲讲怎么怎么拿一些performance quanta对吧,稍微重建啊,这这里面对吧。
嗯就是说这个优化呢,嗯其实现在也有很多cosper,有很多软件了,对吧啊但是为什么我们还是强调就是说嗯这个大家自己写这个优化呢,嗯就是特别是有些这种emooring啊,就是但是现在比较抽象。
我待会给我会给几个具体的例子啊,就是说他就说你这个优化的这个算法啊,就是说呃但是这个就是数据相关的对吧,你可能对吧,肯定对,对于不同的这个data不同的环境对吧,不同的问题嗯对吧。
它的这个performance对吧,它是不一样的啊,就是说没关系啊,这个东西我们讲具体的问题的时候,多多少少肯定会缺少这种东西,待会我会讲讲这种优化一些背这个东西对吧对吧。
就是说然后优化的话你要知道一点对吧,就是说你要知道什么是nya或者nnya对吧,你要知道什么是凸的啊,和这种非凸的,你要知道什么是连续的和这个不连续的对吧,你有一些是这种呃,底层文件就是确定的。
和这种所开的就是带一点带一定的不确定性的这种优化对吧,比如是深度神经网络对吧,嗯梯度下降对吧,so city green design对吧,这就是soccer算法对吧,然后优化呢它牵涉很多。
比如说你看就比如说你有些mh,有些图片对吧,然后你有一些点,然后点的对应关系你知道,然后你要重现出他们三三维的这个这个这个这个位置对吧,那这个时候你就解解解解释了一个要解一个优化对吧,写一个优化啊。
我们会讲什么formulate对吧,就是比如说对吧,优化问题呢它实际上就是你有一个目标函数对吧,然后呢你会有一些变量对吧,你想去优化的对吧,然后嗯,对吧,然后这个时候呢呃对啊。
然后我们就想找一个最优的变量对吧,那比如说一最最最小的这个词的这个u2 ,这个目标函数的值是最小的对吧,比如说就是这个so cutreating对吧啊,这也是一个呃,这也是一个优化的问题对吧。
比如说这种马可夫的这种influence是吧,就在做分割对吧啊,做这个对应啊,这用的是很多的对吧,但实际上这就是一个呃,这跟前面不一样呢,它是一个dire,是不是因为它是一个这种离散的这种优化问题啊。
对然后一个优化问题它会有不同的算法,不同算法去解,我们会学一些常用的啊,但是这个这个这个优化这个fid是非常非常广的啊,实际上就对吧,非常非常广的对吧,然后grapcr defend对吧。
非常非常广的啊,所以我们会讲一些对吧,然后比如说这种你说一个趋势对吧,优化趋势以前大家不喜欢大家做这种啊,nonlinear对吧,非要是做做这种logo,比如说高斯牛顿啊啊这些算法对吧。
然后我们做图优化,现在现在大家做的非图优化啊,大家做了很多,对吧,然后趋势比作二二级的方法,一阶的方法,或者说这种distribute的方法,就是我可以这么说吧。
就是如果你想做几几个处理或者做三维视觉啊,想做一些深度学习不一样的地方对吧,或者就哪怕是学优化,它是一个基本功啊,它是一个基本功啊,我我可以做,如果你优化做得很好的话,嗯你没设计应该会做。
你研究会做得不错啊,啊那个课程主页上面有本书啊,我爱你可以去找一找那个pdf对吧,你可以读一读,那本书写的很好啊,你不要什么基础,你也能读懂啊,好然后我再讲讲homework。
homework呢就有两个,一个是bb大作业吧,所以就是第一个大作业就是说我们做这个深度的重建对吧,就是三三维重建啊对吧,这个会过几周再比利时出来啊。
然后呢另外一个创作作业就是做这个primitive extraction吧,你如果是你比如说我们把那个一个一个的mitive对吧,然后啊给给给给重建出来对吧,呃就是给excel出来,对吧。
这个是这个都不难啊,都不难,然后你让大家熟悉一下这种处理的处理的方法啊,然后呢我会讲一讲,就是你如果真的想做一个大会,这个我会讲讲,就是下一节课吧,我会讲讲,对就是下节课我讲讲这个东西到底怎么来弄。
我我现在会给一些potential topic对吧,嗯比如说你你你你第一个第一个就是你可以想想怎么,比如说你是你在那个啊google image search bin,然后百度图片搜索对吧。
你得到了很多这种how der image对吧,就是产品的这种图片对吧,然后你怎么来做这种svd的三维的重建啊,优化是这本书啊啊这个东西呢很呃对吧,我觉得很有海量的数据对吧。
其实里面有很多它有很多details对吧,我们怎么来做这种啊,重新对吧啊,这里面有很多很多问题对吧,你可以比如说哪些image相关对吧,比如说它是同一个物,同一个物体的image,但从不同视角对吧。
很多很多相关的问题,对吧,第二个问题就是实际上就是说我们比如说,对啊,我们给给了一个给了一个一个image对吧,我们怎么来做这个三维的,and standing对吧。
就是recover three dimensional structure对吧,对吧,network tea对吧,它有很多很多的问题对吧,这个就是以前做重建,包括我们这门课里面怎么讲的嗯。
大部分都是做mt,就多个视角的重建,多个视角重建就是实际上就是说每个object每个点我们都看到对吧,都卡不住啊,这是传统的,现在有了海量数据的时候呢,你就不需要observe所有的东西。
然后作为一部分对吧,嗯那种重建对吧,这里面很明确的,就比如说你你可以用deep learning encode方案,但是但是从从计算机视觉这角度来说,比如说他会有一些比如说有些ture对吧。
比如说planet structure line,就是这个线啊,这些东西对吧对吧,这方面的话,三个图片有没有可能很有可能的对吧,就是只要不是你们是一个物体,我觉得还是可以的对吧,比如说抛在imagen。
关键是要有很高的pm对吧,ok第二第三个就是说你你就说我们我们有这么多三维数学的表示对吧,你怎么怎么来debuff new network对吧,我给你讲一个很重要的问题,你比如说你这个三角面片。
比如说现在大家用的用来慢慢的用的人越来越多了对吧,那三角面片你怎么保证,比如说你生嗯先生成的这种三角三网格,我自己对吧,诶这个问题很明确对吧,就是说你这不自交这个东西,你比如说做碰撞检测的时候。
他也需要补强是吧,哎你可以考虑一下这方面,我是比如说,你可以做可以可以可以做起gstanding对吧,你你算算normal啊,traction啊对吧,你怎么把你的算法真的像像1米内那样尖锐的。
非常非常多的这种呃cgis对吧,这都是很对吧,你就包括这种重建,从heavy cs对吧,其实在无人驾驶汽车里面不仅仅有这种找深度扫描仪对吧,还有这种in mage这种30对吧。
你怎么把这把这这这些不同的三个合在一起做重建啊,这也是很重要的,对吧,你比如说你想如果想做机器人的vidivision对吧,比如说san就是说看一个物体从哪个v的哪些视角去看比较好。
就是下一个最好的view对吧,human option interaction对吧,这个是planning对吧,哎这都是不错的问题,如果你对优化比较感兴趣的话,你可以想想。
比如说呃刚才大家说这个弹幕的这个重建有没有可能,这个其实你可以考虑一下这个他从这个呃可以从这个,一个图片里面你可以啊提取这个人的这个呃pose对吧,哎这也牵涉到一些怎么去解这个优化对吧。
有一些东西我想强调的就是比如说一个一个一个比较重要的东西,就比如说deep learning对吧,深度学习来了以后,几何处理和赵云视觉到底会往哪个方向去走,肯定赢,但是就是想取它是不变的对吧。
这种减去考train这些东西它是完全不变的,然后哎呀no和global conver呃,呃这种convergence expect对吧,就是呃你怎么去enforce对吧。
就是怎么去enforce这种几何的这种约束对吧对吧对吧,然后这是一个问题了,就是说你可以singlization对吧,你有很多很多图片以后对吧,你怎么把他们提取的信息啊,这涵盖的信息给融合在一起。
这是一个很fundamental的问题对吧,重建只是一个lication对吧,还有一点就是我想说的就是uncertainty啊,就是说不确定性对吧,就是说你比如说你一个deep learning。
你有个on put对吧,model还有多uncertain对吧,还有他还有说这个不确定对,这是一个很重要的问题,对这是一个很重要的问题,对,这里面就是任何一个vision的问题。
我们都可以包括这几何处理的问题对吧,我最近写了一个写了写写了一篇文章对吧,这个这个做这个配准对吧,怎么去研究它打分问题,就是阿瑟,也就是说我不仅仅要知道有一个out。
还要知道这个output就是这个这个结果对吧,比如说不管是我一个deep neon network,它的output还是什么output,我要知道他有不多不确定对,很重要啊,这个东西是很重要的,好了。
intro我就讲到这啊,然后我们可以休息五分钟吧好吧,然后我们再回来好吧,然后我接着讲这个scanny,好吧啊,我休息五分钟啊,大家有什么问题可以提好吧,那咱们有休息吗。
你你连着讲一个半个一个小时半小时,那,对吧,那谁受得了,没有人受得了对吧,咳咳咳,我也可以通过这个机会回答一下这个这个直播间的一些问题啊,啊我看看,会给人,我会给一些reference对吧。
我我我要想想这个大作业应该怎么做对吧,你这个,我会每节课会查我,我会因为每节课前我会把这个卖的,今年是这第一节课是个特殊情况啊,因为我记得我以前在国内读书的时候对吧,基本上还是中间还是有一个休息的对吧。
留个五分钟对吧,这样会比较好吧,大家有什么问题还可以提啊,因为我后面这个部分我估计讲不到,讲不了这个40分钟,45分钟啊,你们有什么问题可以,我可以通过这个休息机会机会也回答好吧。
可以有一些小练习来帮助理解课内容吗,可以啊,我可以有一些quiz,三维数据面简化优化是在那个三就是全部max在pc里面,会讲到的啊,传统的这种三维建模不落伍啊,因为我觉得三维建模肯定是传统的方法。
深度学习的方法结合在一起对吧,深度学习它不能完全替代这个传统的方法,可以肯定会介绍最新会议的一些成果对吧,但是我的意思就是说,基本的东西对吧,还是要知道的,还是要知道的,这是一门提高的课吗。
他会有有希望做到做成那个比赛去,然后,动态重建,动态重建它它是重建的一部分嘛,对吧啊,这门课将来最后几节课,比如说我会请一些做这方面做的好多人来讲啊,我前面还是讲一些基础的东西。
因为动态重建说白了我以前也做嘛,我10年前也写过一篇文章对吧,然后呃我想说的就是说我想还是强调一个观点嘛,就是说大家肯定是想做时髦的东西对吧对吧,这些东西才能发表,但是,时髦的东西做好。
你就必须把基础打好,而且你你把基础打好了,或者这么说,你想你的这个思考的空间对吧,你知道这个范围它会完全不一样对吧,如果现在一上来就deep learning对吧。
你思考的范围永远就是比如说近23年来发的paper对吧,你看一下,如果你不把你如果对一个学科怎么发展过来的对吧,怎么从最基本的东西发展到现在这个程度,你如果不是很了解的话,你是很难做出那种突破性的贡献。
我们接着讲好吧,然后我在这个地方呢,呃给你的这一块偏硬件对吧,有些东西我们后面也会提到呃,我在这里呢我就想开个头,好吧啊,这些内容呢,它是属于一种就是你了解就可以了对吧,我不建议大家去做这方面的研究啊。
这是是不是表面呈现动态表动态表面呈现会讲对吧,那个我会专门简单来讲,专门请人来讲注册跟surface recontraction我会提到一点对吧,动态的好吧,扫描扫描就是说比如说我有一个fly对吧。
我怎么能得到一个名字三的点云对吧,我给固定视角对吧,把所有看到的那些这种visions我呢重建成,我把它的三维的这个信息给重现出来啊啊这叫sky,我反复强调,这里面我会强调几点你需要知道的啊。
其实这个地方呢我个人觉得呢就是说你知道一些基本的东西啊,就可以了啊,我不要求呃大家把这个东西理解的很深啊,至少这这不是我这门课呃所强调的对吧,因为呃一节课今天有约半小时嘛,我就来做,这个这个英雄。
但是我觉得有点浪费对吧,我在这里啊开个头啊,ky说白了就是你就是第一步对吧,你怎么把这个pc object把它给lift的,就是说就是做一些三维的这种扫描对吧,一个一个的点名对吧,牵涉到很多对吧。
你总报表点云多个视角的点点,把它合在一起对吧,然后把它变成一个曲面,这是几几何处理的问题好吧,sky这个topic你要说从研究的角度放放风呢,它实际上属于属于视觉的范畴,属于视觉的范畴。
其实现在在视觉里面,大家也还是还是有不少不少研究的啊,跟我们后面讲的这个modest struction motion嗯,它是有一点点不一样啊,有一些不一样的,我们再回我重温一下对吧。
什么是georg reconstruction对吧,就是processing是吧,这个field怎么怎么来讲对吧,是不是,首先我们有个非洲object对吧,然后我们有那个multiple camera。
然后我们来进行采样对吧,然后实际上你就会得到一个一个的这种can对吧,对待会我们要讲的对吧,你这种cs它是怎么怎么怎么构造的对吧,你得到了一个时间以后呢。
你然后下面就是我们下节课要讲的就是restration这个问题对吧,你能把怎么把它合成合在一起,然后最后呢你怎么重建一个这种刷绿的这么surface是吧。
对这就是mac surface reconstruction,今天这门课呢我讲讲第一部分对吧,就是说你怎么把它得到一个skin这个东西,你们可以想一想对吧,比如说如果让你做,你会怎么做。
讲一讲讲几个方法吧好吧,然后比如说呃大家是不是都知道有个叫做knight对吧,这种东西大家都知道吗,soft的那个那个scanner,这三位扫描的,对吧嗯我们会简单的讲一讲啊,啊我讲的慢一点啊。
讲得慢一点,然后,反复强调,就是我讲一遍以后,你可能50%的东西你记不住,或者70%都记不住,没关系啊,就是里面呃,太多太多的这个细节啊,你需要自己去阅读。
但是我觉得就是希望你基本上你能能对剩下的30%有一个印象,这就不错啊啊啊,就是原理嘛,就是hello,就是怎么去实现的,可能这个非常非常engineering啊。
是它的这个angeling principle是什么对吧,我们希望希望大家对这个有一个了解好吧,然后这个death session呢它是一个,管啊这个这个这个你比如说有分类,比如说最早的。
比如说甚至不是视觉的这种散热,它是那种contact base,就是用这种一个机械机械手臂对吧,这个物体对吧,那你就知道这个触摸这个点的三位的位置嘛,因为机械臂你是知道比如说他的那个转角是什么的。
contact,就是这种这种这种transmissive对吧,mi啊啊这种我们会讲还有一种就是这种visual的这种东西对吧,就是optimal的这种分子啊,我们会提到啊。
cs它其实这个是非常非常广的啊,就是非常非常广的,那不不是不仅计算机,计算机科学对吧,你比如说这种雷达,这个这种这种这种这种海洋啊,我们要研究海洋,你要做三星对吧,嗯非常非常广啊。
实际上我觉得现在其实很多时候大家直接把地图哪里对吧,跟这个单手键在抛出这门课的范围了,但是你如果有兴趣,你可别你可以给我发email啊,我我我尽量去回好吧,然后我我我简单讲一下。
比如说这种touch base,我刚才讲了对吧,就是说什么东西呢,就是你比如说你有一个呃,你看到我的这个鼠标看的啊,就是比如说你有一个机械臂对吧,然后他有他他有这个jin,然后呢比如说你这个探头插起来。
比如说这个设计是某个点,那实际上你就知道那个点的坐标对吧,这样你就能扫描这个东西,最早的时候,比如说扫描这种,比如说嗯,在工厂里面对吧,还是有一些用的啊,这个能做到非常非常精确啊,能做到非常非常精确。
但是缺点就是慢对吧,你一次只能找到一个点对吧啊,第一个计算机计算机的model对吧,这是一个head对吧,大概是pixt,大概50年前对吧,那其实就是用的这个technology对吧。
你首先得到了这个一堆三维点的坐标,然后你手动去指对吧,就是哪些点和哪些点连在一起,最后变成一个三角面片啊,大家如果你到网上搜能搜到这个东西,就是这个technology。
但是现在这个东西大家一般不做这个对吧,这个东西很笨重很贵,对吧他他只你比如说在室内场景,对于某一类物体对吧,你可以做这个东西是大部分呢,其实是就是这个optical method对吧。
article就是视觉的对吧,就是或者就是光学的这种啊,分为两种吧,一种是passive,passive,就是我到了图片对吧,我用计算的办法或者它的深度信息对吧。
这些人就是或者或者比如说你如果投稿到这个或者c c b c c b的话,有topic就是shape from ex,那么x就是steremotion,shaking tt。
focus focus这些东西对吧,这种东西就是active sensing,什么active sensing,active sensing,就是说我们这门课不会讲啊,单位会讲的。
就是说改变这个input对吧,使得这个重建对吧啊更更好对吧,就是或者就是说我用那种主动这方法对吧,去去去去去啊,主导这个重建的这个或者就是def sin,这个过程是这里面会有一点点其他的群。
会有一点点其他的群啊,会有一点点这种集合的东西在里面。
这个passive我们不会讲啊,就是会在那个主要是motion theory的时候,我会讲一下对吧对对吧,就是说它是给定image去除重建,然后呃这个主要是个什么情况呢。
比如说你在网上download的一些下载了一些这种图片对吧,你可以用这个passage方法对吧,我们有两节课会讲这个东西,今天我们主要会讲一下这个i p i p v有两种嘛。
一个就是pg of a flag对吧,实际上就是说你send out的一个那个light对吧,ulaser对吧,你你可以对吧,你你然后这个杯子适当的那个物体对吧,然后再反反射回来对吧。
然后你matter这个time对吧,这个实际上就d就等于1/2 c就是那个光速对吧,乘以那个得到t t t就是这个时间的时间呢很短了,你需要一个很好的这种这种我这么中对吧,去控制这个东西啊。
这个东西呢就是适合做这种非常距离的这种扫描对吧,远距离的扫描,就比如说你一个building啊,或者就是这种比如说你一个一个一个一个city的mascape,你可以顺应这种方法,但精度不是很高啊。
精等于有办法提高精度啊,嗯一般情况下这种精度不会很高对吧,因为你你是这么想的,关注这么快对吧,不可能有对吧,它它实际上是翻到那mental limitation,就是你这个时钟对吧。
一个第一个sam到底是frequency是多少对吧,决定你的精度对吧,就是扫描远距离的东西可以对吧,因为你这个光光那个是它的这个时间比较长嘛对吧,它相对来说它就比较好对吧,laser cannon对吧。
你看这种要做,有时候在那工地对吧,你经常可以看到一些这些东西对吧,大概就是你把一个呃building,就是一个一个建筑建好了以后对吧,你去捡好啊啊有有对,是用相位差的。
对你你去检查对吧啊啊那个这个这个这个building是不是非常精确,这个只是一个呃你用相位差,我那我我有几个slash给删掉了,我没有讲那个东西啊啊对啊,实际上它它它它也有也有做做相位。
它它实际上是相位差的那种东西,它实际上是啊嗯实际上是给一个这种呃精度跟这个跟这个时间嘛对吧,就是说这个呃第一个trade off啊,是,思路是这样的,其实你说相位差其实也是一个时间嘛对吧。
这是一种间接的这种啊measurement。
然后我重点想讲一下这种trigulation,tangulation,实际上这个就牵涉到一点及格了对吧,实际上就是说你是这么想,你有俩你,你比如说你在这就是这就是视觉的几个问题,比如说这这个物体对吧。
然后你这边你有两个锐对吧,两个线是他正好相交到这个物体上面的一个某个点,你要两个方向吧,你要两个方向,然后你知道这两个方向的vc对吧,实际上那你就知道,然后你就知道他们这两个vex相交到一个点。
你就比如说你就能知道这个点的dio cation对吧,比如说这是一个在二维对吧,我们去我一个一个一个illustration对吧,比如说你有你有一个big fly对吧,你有两个锐对吧,相交的x对吧。
这个时候呢你就能通过说这两个呃他之间的这个这个叫base嘛啊,这个东西就是说这个所以就是说比如说它的def对吧,这是我们想知道的,你是你如果有两个锐才相交对吧。
然后呢你知道这个x和x方他们之前做的offset对吧,实际上这个然后你知道这个f对吧,就是image这种play,然后你就知道这个deft z对吧,z是比上等于比如说x减去x方就除以b嘛对吧。
这是这是这这这个是非常简单的,这种几何的关系对吧,我再说一遍啊,就是嗯,f和z它的这个ratio与xx相减除以这个b对吧,就是非常的简单的几何关系,就是说如果我或者换句话说,如果比如说我们呃有两个。
我们能制造两个锐对吧,它正好相交到capital x这两个red的这个方向呢,它的这个它的这个direction我们是知道的,我们就能知道depth,后面stereo也是同样一个东西对吧。
但是我想说的是这个这个translation,实际上它有一种你可以想想这个东西,这个东西我是希望大家理解的啊,就是怎么利用这个原理,这种death sense啊,可以我们可以想想这个东西。
啊实际上就是说其基本上我们想想我们能能能怎么来造呢,这个地方讲得慢一点,希望大家如果你如果你知道这个东西是trivial,非常非常简单,如果你知道这个东西是什么呢,你如果不知道呢,我们希望大家想一想。
这个得花一点时间,就想清楚他是怎么怎么怎么怎么怎么work的,实际上就是说我们会有两个东西对吧,我们会有一个lis,我们就是project对吧,就是说实际上就是说我们做一些project对吧。
做一些project就是我们project一些light在那个physical的surface上面对吧,然后呢这个light的这个project呢我们是是可以控制的吗,你可以知道它沿什么方向去做。
去project the life对吧,之后呢我们可以在另外一个跟这个lisource projection不同的方向对吧,这个lisource实际上就对应了,比如说这个是一个lisource对吧。
左边这个对吧,你project的一个东西对吧,右边呢我们一个一个caa去看这个lisource projection对吧,比如说你看这个地方就是这样子,对你你的projection看的时候呢。
如果你能发现这个boss这个pattern,这时候呢你就实际上就如果你能计算出这个,比如说呃能recover出对吧,比如说拍一张图片,唉你发现非常亮对吧,它是这个camera这种projection。
如果你能把这个这个量的这些p所得到的,实际上你就得到了是吧,你就得到了另外一个类对吧,而且你知道这个redirection吗,因为你知道这个它是哪哪几个pixel对吧,如果如果你知道这个pk和转换对吧。
就是说你知道这个intersex camera frances的话,你就知道诶另外一个瑞对吧,然后如果你这个开了跟这个lisource base on是固定的对吧,你一般一般一个scanner对吧。
这个东西它是csgo里它是固定的,那实际上你就那你就知道b对吧,b也知道这个cp的,你知道这个焦距嘛对吧,这个这个image这个这个也是从什么地方captured对吧,你做到郊区对吧。
这个时候你就能知道depth,这个原理非常简单,但是实际上它代表了一系列啊,你不会k net,它也是这样啊,那现在这个问题来了对吧,这个这个这个里面最重要的问题是什么。
就是for the projection对吧,我是可以可以可以那个什么的对吧,嗯,你这个camera能拍图片对吧,拍图片你要做成一个automatic panda的话,你要知道什么。
你要知道这个比如说这个street对吧,这个rap它的这个image里面px是多少,我们要比cover出来对吧,或者就是自动的recover出来,啊唉这个怎么做呢,大家可以想一想对吧。
我如果recover出来了,比如说因为这个东西对吧,这个projection我是知道的对吧,是可以控制的,可以拍张图片对吧,那比如说这个pixel,它是比如说,坐标是500对吧,坐标是100对吧。
那我就能知道这个点,我就能知道这个点的三维坐标对吧,因为我知道这个东西对吧,我知道这个是另外另外一个东西对吧,原理清楚吗,不会说这原理清楚吗,很简单对吧,讲的实际上是元年,你说比如说你是一个硬件厂商。
这个东西到底怎么去做对吧,哎这你还是有很多很多学问的对吧,你比如说你你这个像素参数我估计偏差了对吧,对吧,还是有很多学问的,但是我希望大家了解这个基础啊。
所以说最难的问题实际上就是说我怎么能知道自pixel对吧,或者就是说这边的每一个对应的这个pix对应的这个pattern对吧,这个这个life我们能在右边我能把它识别出来对吧,你把它识别清除出来诶。
这这这个怎么办对吧,或者这么说,你是这么去想吗,我们这个地方我们就会有一个space对吧,就会有个就是说我们怎么来design这个projection pattern,后面我造了一张image以后呢。
我一眼就能知道啊,这个pixel对应了这个雷泽,这个这这这这这这他的是哪一个对吧,那我一下子就能recover出来对吧,所以呢就牵涉到一个很重要的问题,叫做python design。
里面呢就是说你希望大家去想想每个python它后面的idea啊,其实每个python都是都是一个pattern patent,就是一个专利啊,其实这个我觉得呃特别比如说动态物体,你怎么来抵抗对吧。
只能你这个扫描的更精确的这些问题没完全解决啊,亲爱的,非常有意思啊,tnt非常有意思啊,听到非常有意思啊。
我给大家简单的看一下这种cp对吧,这个手对吧,就protect一个这种vertical pattern,为什么vertiful呢,因为其实就是说你稍微扫描了,你是两个瑞相交对吧。
一个r一个什么跟一个一个一个plane对吧,就是这里每一个rip实际上是一个三维的plan对吧,你如果对一个rain跟一个play相交,一个play相较之下是一个点嘛。
一个蟹跟那当然你就可以得到dex对吧,所以你不需要就是说你python就可以对吧,无理的python就可以,你可以看,比如说这篇文章对吧,嗯我到时候那个啊明天吧。
明天那个我会把那个文章另一个放到那个主页上面对吧,你会看到,比如说你如果如果你能在image里面,你把每一个re一个p手对吧,每个p手它都有一个不同的color color就是每一个rip是吧。
它有一个不同的color,你如果把能把所有pixel在一个rip上都recover出来呢,你就能得到de就能得到depth啊,就能得到depth,很interesting啊。
这个我我想你们要记住的是什么呢,记住就是一种主动的思想对吧,就比如说你比如说从第一张图片啊,你看你以后他是没有dsq的对吧,不知道哪个peter在很难的这个你拍了你本来比如说你如果你这么想,就说。
这个object它是一个平面,比如说对比一个强对吧,丞相要求很高,但是很高的,对这个强,那你这个stream会怎么样,他就是直的,对不对,他没有他没有这个deft的变化对吧,他就是直的。
你这个单子你别说这个手指啊,这个q从哪来的,你看这个shift他都弯了对吧,关了他都是他都是克服他,这是拿它它它它都不是直线了对吧,为什么不是直线,因为你这个袋子是在发生变化嘛,对不对。
变变化嘛对吧对吧,然后你你你如果能把每一个这种streets,你都能从这个image里面抠出来对吧,能碰到depth对吧,用刚才我们讲的translation,对不对。
就全呃就就应该是translation,那你怎么考出来呢,牵扯到你对每个rip是不是有一个unique id对吧,因为有link的id,你比如说这个东西,它它做的这个呃,分颜色对吧,不同颜色的引扣对吧。
唉你就recover recover,从每一个你可以从这个图成像的这个这个这个存在,这个这个image里面对吧,你能recover出不同的不同的rap出来啊。
然后这个当然当然就是说问题就是你能不能保证每个rip,它都有一个unique的i d对吧,哎这就是你怎么去顶上这个python的问题对吧。
比如说有一种idea就是你有三rip的unique uniqu,你有没有called over time对吧,比如说你给我找,比如说早期的问题就是比如说我只能是这个头打这个白的和黑的对吧。
那如果如果如果我们不能打这种彩色的对吧,但到后面大家可以抵抗这种牌子了,如果这开始的话,我们不能不能把这个彩黑白的这种拍照的话啊。
彩色拍的话怎么办呢,那这是提出了一个思想对吧,那我就是可以说啊,我们用这个time cody的npat对吧,就是说啊我他可不是踩一个图片对吧,我不是一个图片对吧,我就是说我们把那个image对吧。
就是配image和这个pattern,把它给siri对吧,就比如说对于同样的一个pattern一张图片对吧,换一个拍的,我又找一张图片对吧,然后我把这个图片啊全文在一起对吧。
就是说比如说呃第一个他t等于一的时候对吧,我黑白黑白对吧,但是我不能区分,比如说所有黑的和所有白的对吧,没法区分,对不对,第二个时间点呢我就把这个黑白的这个电影对吧。
就变了一下这个python这个时候呢就是说你一个p时候,第一个t等于零是白的,t t等于二,t等于一是黑的,这样子一手他就只有那么几个了对吧,然后你随着时间的变化的话对吧,你可以啊。
你可以再加不同的python,到了最后呢就是每一个pixel呢,就是每个pixel对吧,你是采了很多种图片嘛,那边也是打同样的pattern,不同的pattern,但都是黑白的对吧,这个时候你。
这这这个时候你就能给这个每个pixel一个code对吧,每个pixel一个need code对吧,就说明上每一个点一个code,你就能identify对吧,也能the sociate。
就是说我看了一个pixel对吧,我它有一些黑白黑白这一个code是吧,那我就知道它对应的是哪个瑞吧,然后transition我就知道那是depth思想,我希望大家知道,但是如果你已经学过啊。
这东西都是垂柳的,没有什么难的东西啊,作为作为作为一门课来讲的话,用课来讲的话啊。
这个这个还是要讲到的啊,这就是我刚才说的这个,比如说你有一个投影仪对吧,这有这这这边有一个camera对吧,不但打不同的pattern对吧,这边踩了不同的pattern。
然后我把over time把它合在一起,我就cold world of diseo对吧,如果identifier corresponding。
corresponding pattern street对吧,这样的话你就能得到得到那个det,如果就是这种这种是can scanning device的话,其实你如果你真的有兴趣的话。
你有多少能力强的话,你是可自己去可以自己去做的啊,但是你真的要做得好,跟你做成一个还可以的,这个这这个差别还是很大的,差别是很大,这个思想呢其实它还是有一定的局限性的,就是说对吧。
就是比如说你这个这个since static对吧,就是说你你你打不动拍的时候,你这个这个这个这个物体它是不能动的对吧,一动的话,那你就不能用那个扣的了对吧。
还有一种就是那种special continuity assumption,对吧,就是one object对吧,就是嗯对后面啊啊我还有一这种东西,就比如说你可以project一个grade,对不对。
其实跟跟刚他的这个这个这个思想也一样,就是你不在一个,看得到是吧,然后然后你可以用reason的方法去解除,比如说每个dot它跟周围的一个dot,那四个neighborhood是什么对吧。
就是你证明一个observation对吧,同样的就是你project物理上面,你你可以这么想,就这个这个物体它是一个强的话对吧,那你看到的实际上也是一个regular对吧。
就是一个长一个regular regular dobreed of do,那如果他有曲面了,然后你这个dos它的分布它就不那么规则了对对,因为你有这个death这种variation对吧。
你可以用一些比如说dnm pro画面的方法啊,你可以去做把这个每个pixel对吧,你可以把这个x和y对吧,它它是怎么这个淘宝上去是怎么样的,把它给连起来对吧,你连起来以后呢。
你就知道每个品种它与ex的id对吧,比如说在那个original规则上面,它是第54行,第26列对吧,然后你知道那个你也可以用translation的办法对吧。
把这把这个把这个dex给recover出来啊,有兴趣的话,你可以自己写一个simulate对吧,可以去做一下这个事情啊,这还是很interesting interesting的。
所以的问题呢其实还是有人研究的吧,现在比如说computational photograb,包括vision里面还是能见到这样的文章的,包括你可以想想怎么啊用deep learning对吧,嗯对吧。
你可以去想怎么去mod这个问题,只能解决一下ity的问题吧,用这个prior,啊,就是,怎么做呢,呃你不一定清楚我说过了吗,你不一定记得住啊,也不要求啊,我因为我上过很多课啊,我觉得这个东西要细讲的话。
你得花很长时间啊,我得把硬件都给你切,怎么解决缺点的问题,非常好对吧,怎么解决缺点的问题,他有allusion嘛对吧,pollution,这个时候实际上就是怎么去model,哪些点是看不见的,对。
这个非常好对吧,这是一个研究的问题对吧,我刚才说什么,我就是就是我我想做个思想,就是说你怎么python去做projection对吧,然后从从image一看呢。
每个点对应的那个你都能uniquely identifi,这就是这就是这就是这这这这个id对吧,我希望大家能掌握对吧,然后下节课一开始我会出一个quit对吧。
哎,然后他扣的呢,他还会还有一些这种生命,比如说你这种故意的python,他这个随al continuity对吧,如果你在discontinuous的话,你怎么我保证这个怎么怎怎么能保证这个这个东西。
它它是它谁对应谁对吧,唉这个东西的话,它还是这这也是比较困难啊。
它还是有一定局限性的对吧,对吧,比如说这些方法它实际上都是嗯都是这个这个code还是有意见的,diss community,no cosplit,包括connect这种scanner这种skin。
它也是基于这个下面会讲这个tnt啊。
实际上是对吧,它有一个它有这个rgb com对吧,但是你看左边这个对吧,和右边这个这两个东西,它实际上是组成了一个three def cs是吧,command structure。
the light to classic computer,vision technique steps on focus steps on seo,对我就讲讲这个defx的stereo吧,好吧嗯。
经常用这个东西,我相信大部分人还是看到过啊。
对这个us sparkle啊,is sparkle啊,呃呃python ok他这种python的话相对来说啊,它是这个东西,它是有一个pattern,ok啊,那怎么算出来是非常复杂非常复杂。
但是能保证的那个uniqueness对,就是uniqueness对嗯,就是它是它是它是一种呃,他也他也是通过,播啊有录播的啊,那个,嗯具体我怎么我就不讲了好吧,这门课呢主要我我给大家太多压力吧好吧。
就是我简单讲讲讲了这个深度,简单就是讲了这个深度相机里面,比如说这个translation对吧,triangulation这个idea,以及就是说啊我去那个做这个呃。
python比上来自recover death对吧,哦。
这节课呢我讲就是讲最最重要的问题,比较重要的问题就是restration,就是因为你你一个视角,你只能得到一部分对吧,你怎么把它给融合在一起啊,这是一个非常反对mental的问题啊。
水神其实就不管科科学怎么发展,不管scandal你怎么提高对吧,唉你是避免不了的啊,我们会讲讲两两类算法吧,对啊,我希望这个,不开源他啊好吧,然后今天这门课我们就到这好不好啊。
我这节课呢下下周自己的一之前呢,我会把那个主页啊,就下周我想就明天这个时候吧,你们起床好吧,然后你应该可以可以看到一个updated这种呃,呃主页好吧,然后我会多放一些文章上去,然后应该也会有录播好吧。
然后下节课的话我就会讲得慢一点,重点讲两个算法,一个i c p对吧,还有一个就是这种把这跟一种重建的算法结合在一起的啊,啊做the morning castration的算法好吧。
然后我们会讲得慢一点啊,讲得非常慢一点,我会换一个麦啊,你们不要着急好吧。
GAMES203: 三维重建和理解 - P10:Lecture 10 Geometric Deep Learning I - GAMES-Webinar - BV1pw411d7aS
大家好啊,那我们今天接着上课啊,我下面几节课呢,我想想一想,有一个就是比较时髦的名字,叫起来这个电的你吗,嗯其实呢啊我在讲这个之前吧,我就想讲讲,就是因为这是一个提高课嘛,很多人打分很多。
听了大家都是研究生,对不对啊,就是这个我想讲一个什么观点呢,就是有时候他有一个学派的问题对吧,嗯其实说three d呢,呃大部分人啊现在都发私语片啊,你包括我像我以前导师对吧,包括我一些club的。
大家都发自语片啊,对不对,然后那个他有两个学派是吧,一个就是rm,就是既然你视觉这个方向的这个学派对吧,实际上就是说这一套人做东西呢,它会比如说呃它会从这个就是比较更多的是倾向于learning对吧。
就是比如说减轻一些具体的问题对吧,嗯你像在这个网络omatic,对不对,嗯,你包括这种image base对吧,这种three d的东西对吧,这是vision的一个学派啊。
注重注重呢就比如说data set对吧,然后就是说把一些vision的处理手法对吧,把应用到three d来啊,还有一个学派呢就是从重新学对吧,其实就是几何处理对吧,就讲the processing啊。
这这个这个学校来着,他们其实就是说这些人呢背景比说都是做做这个diredefom吧,match processing对吧,强调的是什么,强调的是我们是有一个连续的这个观点吧。
就连续的这个呃continuous max对吧,然后我们把disp哎这部分人呢啊做做做节目,就做做低能呢相对来说就比较principal一些,比较principle一些,我的我不能说princible。
其实两边你从学术的角度来说,我觉得都是有嗯很很好的一部分对吧,但是就是说从呃就是这部分他做的这个风格不一样对吧,其实我觉得就是从长远来看吧,嗯也包括我们以前在这个做这个。
在surface上面就是全面上面做这种处理对吧,现在我们来做deep learning啊,就是说啊我觉得就是说有很多东西我们可以探探讨探索,呃,我我今天我会发几发几节课,讲一下这个gmc能力啊。
这是在这里面呢,呃有一部分今天要讲的一部分东西跟那个special deposit这些bola research,让他们他们07年有一个state of brother report对吧。
就是嗯你包括像这个在重庆学院里面怎么跟像这种special的词对吧,你包括final max这些东西通通都是相关的,嗯它实际上呢呃也是牵涉到一个三维ship。
就three d shape怎么表示的问题啊,three d这个ship怎么表示的这个问题啊,这些东西通通都相关啊,我就是希望就是比如说开这门课啊,我觉得就是说你不仅仅是技术的一篇文章的吧。
你记住这个学派,其实吧我个人感觉啊,就是说你不管deep learning怎么发展,你包括能deep learning之前啊,其实这个学派也存在什么大学研究的手法不一样。
我觉得地图的你并没有改变这个学派的这个东西提升啊,那可能改变了,比如说那个performance改变了c不了的technique,但是学派我觉得并没有太大改变啊,对吧,就是你我自己的话。
我反正两边我都都有对吧啊我我我觉得就是对都有好处啊,都有好处啊,我觉得我觉得就是你包括我们上节课讲的,那肯定是计算机视觉的学派啊,啊计算机视觉的学派啊,那么今天要讲的就是计算机重新学。
就讲讲positing的学派啊,啊这是我开头要给大家谈一点自己的观点吧,好那我们下下面开始讲好吧,你们会有一些数学符号对吧,我就提一提对吧,我觉得就是说呃呃这个srt其实mc boy time对吧。
他在那个我爸那个three d tv有讲过对吧,我就是讲给个pop可以可以听听听听,那个听听听听,那个啊就是他他这个flag上面有,我还是我就拿出来讲一讲自己的一些观点对吧。
我觉得这些东西往往是最重要的啊,啊就是说分段就说几何,就三维这个东西,它最大的体量是不是就是从一个欧式空间对吧,比如说就是image或者是这个video,它比欧式空间对吧。
然后呢我们现在就是把它变成了这个非欧的这个空间,这样我们在上面并convolution,对不对,convolution对吧,就是咱们在这个three d data上来定义对吧啊。
这个东西呢往往他是很challenging对吧,因为其实我们马上要看到它最大的一个问题,你比如说keep boy,比如说dnn这些东西对吧,非常非常流行对吧,它实际上它有一些很优秀的性质嘛。
比如translation visangergy对吧,他是ability of quality,但是这些问题嘛你到了曲面的losd上面是吧,如果你在曲面上去做对吧,就是我们当时讲的point cos。
它有一些别的处理的方法对吧,包括in business service,我还有就是别的处理方法,那么那么我们把它变成一个显示的这一方面对吧,displeases这种web page上面对吧。
就比如说match对吧,比如说一个primary sy是一个全新的match,哎真正上面定义呢它就会有很多对吧,你going to nulean,对不对,那那就会出现很多challenges,对不对。
哪有clean什么的,然后有clean的,其实其实在这个visual computing嘛,就是计算机视觉,计算机是同一学这两个方面嘛,啊所以是比较比较常见的这种比较常见的这个它就是有两种表述吧。
一个是manifold啊,一个是manifold啊,还有一种就是这种graph对吧,这种graph啊啊这是两种常见的表述形式啊,就dep,其实我们在图形学里面讲的这种graph呢。
你跟那个social network里面的graph呢当然有一些不一样对吧,因为你他同一学里面这个grap它实际上它还是有一个on the surface对吧。
这个概念在这里面跟那个搜索network那种grap它的它都不一样的对吧对吧,对不对,就是说实际上就是说你那问题就是来你怎么在怎么在这个呃,就是说你怎么在fo的空间上面来定义这种competition。
比啊,这种convolution这种structure,对不对啊,就是这种,而且你要快对吧,你要快啊,这个challenges对不对,然后呢第一类方法呢。
其实我我觉得这个东西呢就sallocation graph manifold,这个东西是非常好ful啊,实际上它有这个呃,它有非常跑火的这个这个这个理论啊,呃跟machine learning很相关。
你就grapc是sm循环能力,这些东西都统统都是非常相关的啊,然后ctrl c对不对,呃,我会讲讲这方面的东西啊,我觉得跟大家补一补其实有好处对吧。
然后实际上呢你说这个东西为什么跟deep learning相关,那就是因为这个选手啊,劳拉这个东西给你种了呃,给了你一种representation啊,让你来做这个东西啊,好吧好。
那我们首先讲讲这个graph theory对吧,graph theory啊,其实就是说,呃其实你是这么想嘛,你这个graph上面也说扛不住血,首先你要给他一种代数结构是非常抽象的这种概念啊。
给他一些代数结构,那这个地方呢我就简单讲讲这个什么是这个grafs这个东西呢,啊比如说你在这个单位super learning,好吧,嗯上面再也经常出现啊,grafpsection learning啊。
graph呢实际上它也是不仅仅是表示data嘛,有时候你organize connection data,你这么qu图的表示它也是很重要的对吧,the graph theory。
它就是waited on the graph tee,what is this edges对吧,h with对吧对吧,它其实这是一种非常基本的这种图的表达形式。
然后he was very with a for that,对不对,就是说它实际上就是说你给了两个mac对吧,然后你要你要在上面定义这个就是定义一个inner product,就是两个fashion。
对不对,两个bank之间的inner product,对不对,这样你就有了距离的概念对吧,然后你就可以定义这个呃beautienergy for air对吧。
就是说实际上是呃每个每个那个图上的这个function它都有都有一个energy对吧,比如说这个的ition energy就是manager,这个这个f是都是木子啊。
就是说实际上比如说你如果一个fashion是吧,就每个国家只有一个词,如果相邻的那两个我他距离很小的,那这个东西就比较smooth对吧,哎这个单品其实很有意思。
这个sona实际上就是这个古拉普拉斯拉不拉拉布拉对吧,这个东西对吧啊,这这这个东西呢实际上就是说它有很多华为从这后面会讲到,你比如说这个德尔塔这个这是一个什么。
这是一个n乘n的symmetry mazing,对,比如说它的最小的特征跟他一定是零对吧,第二个最好是能跟大于零,单是简单,这个grave connected,对不对,然后这个mandy的决定。
你这个graph多多多对吧,呃多connected的就是就叫做代数连通性啊,这些东西,ok remain manifold in one minute对吧,就是说然后我们再讲讲这个黎曼弥漫这个流行嘛啊。
这个东西呢实际上就是给大家一种什么概念啊,就是说低音要知道就是前面我们做的这个东西啊,它是他是在从连续中来的对吧,连续中你比如说你可以定义啊,这个这个我觉得讲比赛的时候,大家可能会骗我对吧。
比如说每一个点上面有个tangent space,对不对,有个tangent space对吧,然后那个你们几个你们的曲率呢。
它实际上就debu这个就是在这个in pagrain the product对吧,然后呢你是个scale seed对吧,实际上它是就是把你连续的东西变成离散,变b站的东西变联系嘛。
然后你可以向这个你可以定义两个fashion之间的这个in the pdp,你还可以定义两个black of use对吧,这个reacuse in the pdx,对不对,然后呢。
然后这个my plant operator对吧,这是一个fashion对吧,你是一个fl去,这些符号可能很复杂,你如果没见过这个东西,我觉得没关系啊,就是说它实际上就是说实际上是表l l q。
就表示这个流程上面的一也一个一个就是严格意义上讲,就是它的二维积分它是有限的啊,但实际就是任意的fashion嘛,这是一个smooth,一个continution,就这么去理解好了对吧。
然后有个operator的概念,就是一个fashion进来对吧,acquire operate对吧,就等于负等于这个for diversion,可以gradient对吧。
然后这次we这个gradient divergence是吧,昨晚都grade上满足这些形式,对不对,这些,对吧,对然后然后然后呢你就会有一个这样的东西。
它就是一个apple填一个diversions和一个那个fashion diversions,对不对,然后他的这个l q呢对吧,然后就等于这个负的diversion of fx乘以f对吧,lpl是吧。
然后这个maples cal joint,对不对,它是这样一种,它是这样一种,对不对,就是你对他是实际上它你可以把它理解成它是一个就是只要是什么,只要是一个就是matrix表示形式,只要是一个对称的。
他就满足这个,然后呢你比如说像那个孙健是吧,现在清华的还有那个王玉书王吧,他们他们以前就是在那个他们已经证明过一些东西,比如说你这个b站这个graph对不对,你一个流行对吧。
你用你的coco function没,然后你就有graph proxy,知道吧,你可以说证明在那个在某种情况下,那个以上的那个拉普拉斯对吧,那这种情况卡不知道这种continur plus啊对吧。
哎这个东西就是你把两者结合在一起嘛,对吧啊,一般情况下呢,就是说如果大家对这个definal前提,或者甚至是基本的这种就是defense manual,这些东西也不是很了解的话呢。
一般情况下你就记一个这种be many of many这个graph,blah blah on graph,它实际上这两页实在就是讲的,他自然是有一个cradio flation。
然后呢比较interesting呢,就是啊你就是比如说你在这个比如说dllation对吧,你在这个国23d e,然后前面讲了一个扩张form对吧,你把每个扩张form把它听到一个what。
实际上他就干了一件什么事情呢,就是嗯就是你把你把所有周围的这个different,是把一个点到到相邻的一个点,它这个低分是v的l相当于围棋l相对于,那你就成了这个dire这种拉法小,可以对吧。
这个t恤呢同样情况会很有意思对吧,其实在graphics里面和大家对这个formation很感兴趣的话对吧,你比如说not function ma editing,包括周坤老师对吧,做过那个破松对吧。
你举一个命令基本可以把它用来做这个可以比如说他们有一种东西,就比如说这个左边这个德尔塔f对吧,这个东西左边这个东西啊,这个东西呢叫做实际上在在在在这个magic formation里面可以写。
这个叫做defensive coda对吧,你可以可以可以可以通过copy page defcon做it啊,这这些工作都是很inferenti啊。
然后呢你在全都mac上面有一个东西叫做contingent in啊,这个东西的话怎么说呢,就是它是一个大家公认的,特别是你全都卖,他相对来说这个配置比较好的时候呢。
这种cos er定理可以使用它来算这个拉八寸啊,好,so ematic notation呢实际上就是你要对另一个max operate是吧,他是满足一种这样的形式。
a级实在是打的那局比赛也是个打个w就和微信内就是stness strix好,到目前为止呢,我们就说我们如果有一个gram,有个match对吧,我们可以在上面第一个拉拉of bridge,对不对啊。
他有很好的这个dereal foundation to continue max对吧,比较interesting呢,其实后面就是讲的就是你这个举证啊,这个这个这个拉拉斯矩阵如果是对称啊。
他的这个leading a matter,它是非常好的啊,就是说他的leading安装mac当时的这个空间,章程的这个空间它是非常非常rich的,非常非常这个呃非常powerful的,非常pop。
很好很好的property啊,你像这个可以看大家以前你可以查一个首位吧,基本上有七七到十个vacation做code remission对吧。
有时候用这个东西还有很很好的quality和quarter remix啊,做back to future design啊,啊有很好的性质对吧啊,deep learning啊。
其实也有很多vacation啊啊然后呢实际上就是说你可以你比如说嗯,然后呢这就是一些线性代数的东西,就是说实际上就说比如说如果你给定了一个拉普拉斯矩阵的,比如说这个dota对吧,他是一个n乘n的矩阵。
然后呢你找那个比如说,发发一犯人怎么就是首先他要正交对吧,他要正交,同时呢他要尽量的实木,那也就是说相邻的我开始之间他这个这个对于每一个杯子对吧,每一个比一个杯子就是一个fashion对吧。
就是可以说max上每个我还是有一个词对吧,它就是一个fashi,然后你minimu是这个东西对吧,那你知道这个ution是什么,如果大家学过前一代懂啊。
就知道这个find实际上就是这个dla master,就是not plus,not flash mac,他的那个那个iphone b,实际上也就是说你最初的那个东西相对来说比较聪明的人。
他就相对来说跟跟那个怎么一点是吧,跟那个什么一点对吧,就是这样子对吧,就是把装备的some negative matrix。
然后就是一个egg fections of a graph of watch对吧,are you on section的graph老师,你可以看,比如说这样一个graph对吧。
第一个iphone fashion他一定是走b嘛对吧,你都你一个constant fashi,他肯定是最死木子的嘛,因为他他那个a的角色平嘛,你第二个东西呢。
实际上这个function呢你就会找一个这个gram to beat的cut对吧,你在cos一边呢基本上都差不多,靠的命运也差不多对吧,你后面的其实也类似对吧,他对吧,它其实这个ios安全的。
比如说呃你比如说在dfs里面对吧,有什么用呢,主要就是找这个不同的basics,不同的basis,这样,然后比如说你在一个mac上面拿一个faction of mankind not fashi。
这种形式对,对吧,他第一个是consoser,后面相对来说相对来说都是这种机型,这种structure,i can think of a manipulation,对吧,ok然后呢我们再讲一讲呢。
就是说那这个东西为什么跟convolution相关呢,对吧,为什么跟栗子和你相关的哎哎这个东西我觉得很interesting对吧,他为什么跟deep learning相关对吧,那我们再讲讲什么。
是就是说我们从就是deep learning从哪来的对吧,我我在那个ut讲一门课叫计算机重新学啊,讲讲一门课叫计算不计算机视觉,那我们最开始讲讲什么。
ftering filtering就image filtering就是对吧,这个这个是低不了你的基础对吧,其实你说convolution它只是有可能的一种形式对吧。
the image sec coseason,seal processing的那个condition base福利啊对吧,那我们首先研究一下the full of layers。
and you glean spaces,对吧,研究这个东西啊对吧,就是说好,那我手机,然后呢我慢慢的就发现跟他跟考的路程相关,然后我们在某几位去想想,怎么在这个这个这个这个这个曲面上面。
我该定义这种考,我录制对吧啊,这个fashion呢是比如说我这个东西大家学那个啊写这个信号处理对吧,其实我们读书的时候,当时讲的叫做,是一门电机系开的课,就是那个什么电视哎,我也那个那个那个歌名搞忘了。
有可能我也觉得不是很好啊,反正就不了了,好像不是微积分学的对吧,就是我微积分也会讲吧,讲这个弗利尔劳了水这种靠文人士啊,就是说你看啊就是说对吧,实际上就是说你你他在你这个里面对吧。
就是说但实际上就是说弗利尔lost是很简单,就是你能把一个fx对吧,把它写成这种形式对吧,就是说你首先k对吧,你首先对这个k你对这个记忆对吧,你做一个积分。
你就得到一个那个complex number对吧,就是一个复数对吧,就是这一块对吧,然后呢你再对这个东西吸回来了,你又会得到原来的感,实际上就是说你可以把一个fx呢把它表述成这种形式是吧。
e i k x这个东西就是cos啊,cos k x加上i sk k k x啊,这个东西它是一种basic,其实它是一种basic的概念啊,哎这个东西我觉得在数学上。
我觉得一个fundamental感觉比较少,特别是这种fashion logic里面,然后对吧,你就对这个机器人做做积分的问题,然后呢然后呢你但这把他可以变成一个复数对吧,然后你乘以这个东西对吧。
那实际上你把一个你可以表示成这个对吧,第一个可以ition乘以这个东西对吧,加第二个乘以这个加上后面的对吧,因为fx它是一个实数实数,对不对,嗯你你那个辅助部分你不用画出来是吧。
你把每个北子的复数和实数部分画出来,然后产业这个东西是吧,就能得到一个这样的使用,很英雄的事情就是什么,第一个就是实际上它有多它的option meme,然后你不懂的基因呢。
实际上是嗯这个口诀表示你在这个谱对吧,这个呃这个谱上面有多大的那个啊,我把系数对不对,就fully conficient对吧,好这个忽略coefficient。
full coffishbasis的这个东西非常有意思,那么one one dimension呢,其实好多时候你知道吗,就是我我插一句啊,我就给他,就是,你比如说你做工程,咱们顶上一个new newp。
对不对,咱们追求的是什么,追求的就是performal最好对吧,performance number one嘛,但其实科学啊,这不仅仅是这样的,你比如说初学好多时候他不追求的是,比如说。
比如说你证明了一个定理,对不对,你证明了一个定理,比如说呃那个哎比如说这个呃那个孪生知识之数猜想对吧,你第一次证明,那当然是,文盲普拉门那个迷城王问了我问哪发生的那杯水,拉普拉斯只要说那个graph。
它永远是sev,这是定义啊,从定义上来讲啊,对啊,你不是smetic的话,从因为我们用的是这个cos form嘛,你可以把一个加上他的那个转置对吧,再除以二就变成image,好好我接着讲,我这个小差距。
我就说你得做数学上对吧,你比如说我们做做做benchmark对吧,你这个陶瓷品,一般情况下你要是cf 2的对吧,你不然不会投,对不对,不然不会投啊,我后面会讲讲,其实也不一定对吧。
就是然后呢输血量是这样的,比如你首先证明了那个防身制作对吧,有有无穷对吧对吧,那后面别人再证明了这个东西有没有意义呢,你如果从vision的角度来说,那没有意义对吧,因为那个东西已经解决了对吧对吧。
那个performance已经到那了对吧,但实际上实际上你往深了想的其实不是那样的,你解决一个问题,你又不能方法,你可能那个方法也带来了,比如说对这个领域对吧,它它是有风发展是有贡献的对吧。
所以数学上呢好多时候啊你build你就是build这种不同的这种学习方法,不同学科之间这种connection和外insi诶,那其实有时候也是能发文章,甚至有些文章是非常fditional啊。
那实际上有时候我画,换句话说,比如说你抽一篇水平啊对吧,你做一些就是做一些深入的分析,对不对,哎你有时候你不一定是devp的一个新的方法对吧,但实际上它也是有fd贡献的啊,实际上也是反对什么贡献啊。
好好,那我们,那我们来讲这个呃fly basis,fully basis呢,对啊,他是问啊,然后呢还有一个什么什么什么有意思的东西呢,比如说福利也在一维,它是什么一维的这个llshoperate。
它实际上就是那个second order解决问题,三个老的dvd,为什么呢,就是实际上就是中间对中间那个值减去两边那个字的和对吧,再to dimension对吧。
在mac上面就是中间那个是减去周围的时候想想加,好那这个时候呢你就会发现这个拉普拉斯,i can expression,对你对这个福利basis求这个二级的这个导数对吧,有二阶的导数。
然后你就发现它等于什么呢,实际上就是说这个fly basis so funchie confession fa,对都是老婆,logicon faction对吧,哎就是拉布拉多opera对吧。
哎哎这个view很interesting对吧,你可能这个东西大家不一定知道对吧,拉interesting啊,那实际上我们这个拉普拉斯在mac上面的拉普拉斯,对不对对吧,i confession。
它当成了这个space,实际上就是实际上就是我们的忽略of alois的一个什么一个推广对吧,如果从这个没用的角度来说,对不对,那实际上我们就说你如果求在在曲面上求了一个拉普拉斯。
i跟你说fk那个fk那个,fk是那个dk的icon,vention的话就是那个平面上的哎,那你实际上对任何一个f你都可以用这个东西来表示的话。
你可以把它变成一个变成可以可以在每个基上面表示一个fashion,对不对,那个福利base就是lpsi confession是吧,就是这种东西,对不对对吧,of flash convention对吧。
就是那个pk的那个gradient,那个那个那个dvd是真的nk乘以4k对吧,然后这个东西好吧,这个是是这样一种形式对吧,ply fply face,it不sha sanction,就是这样一种对吧。
啊这个view就很重要啊,实际上就是你可以把这个选上任何一个fashion啊,都可以用它这种表示啊,ok这个b我觉得很重要,fly了三grass对吧,然后还有一个cgated的东西。
那就是这个he is the fusion of a manifold啊,这个东西呢就跟卡a路线有关啊,这个东西这个这个这个跟这个我们把这个key man啊,这个东西很重要的啊。
然后再讲讲这个这个few mandal吧,就是就the,这个应该怎么翻,我又不翻啊,我觉得还是还是不发为好,这个实际上呢它实际上干了一个什么东西,它也跟这个拉普拉斯这个东西有关系啊。
实际上也会说你说你算这个点,you fusion,你可以在这个拉普拉斯算子,就是这个背景上面去算,就是说实际上他就是说任何一个fashion对吧,他的这个沿着t对吧。
就是他是他是一个time rain your byt的这个,这个gradient对吧,实际上就是等于你在这个点的这个拉普拉斯拉普拉斯对吧,呃热扩散,那不是,这不但我觉得这个有点别扭嘛,我们还是用屁对吧。
但是就是我我个人感觉就是是我们还是国际接轨比较好啊,然后然后他就是一个这种t d e对对,就是说做一个对吧,那个t f t小t3 就是那个gradi,然后这个of the tian equation。
只要你可以,你可以表述成什么呢,可以表示fx t对吧,等于e的负t表款对吧,这个东西是什么呢,这个东西是一个match,是pf 0对吧,这个f b x c ber对不对啊。
这一人负t主要实际上就是说这is financial food对吧,一个matrix啊,这这这这这也是一个matrix啊,啊你可以用那个提示表示啊啊,然后这个东西呢你可以把它写成这个福利basic对吧。
就是说你可以把它写成这种形式,就是用复利的人basic展开,对不对,然后呢你可以把它写成那个f0 x2 x point对吧,你可以把它写成那个,形成这种形式对吧,那里面呢比如说那个那个e的负t。
咱们打开咱们的k是那个在delta的那个dk,一个i跟value,okay,因为里面这个东西呢就可以把它写成一种pel,实际上就是说fxt它是它等于什么呢。
等于integral of那个在这个曲面上对f0 对吧,求极限求积分,然后每每个f0 在x y那个点的contribution呢,就决定就等于那个h t x x方,就是它实际上是两个之间的距离嘛。
可以理解的越近的感觉变成越大嘛,它指定作等等对吧,它是一种这样的形式,然后p的坑呢我们可以看一看对吧,你中间有一个点,然后他们都不断的对吧对啊,你那里有一个点,然后又不让dp对吧,这里有个点不给配什么。
那里有个点,然后也不给,ok,对吧,然后然后那个嗯然后在那个最下面那个点有点学生对吧,好ok然后convolution given to sanctions吧,然后你就可以绕后。
我们就把这个技术完全记着,看到这个东西,然后提问这个这个是黑的kernel啊,黑的kernel对吧,就是在一个点越靠近一点,它就越越大啊,然后呢我们再讲讲convolution好。
现在我们来讲convolution,这个我们有了一些preparation以后,然后我们再讲讲cvs的conclusion,很很显然对吧,他是那个地址,你的基础对吧。
然后我们现在想想怎么把这个东西用到这个曲全上去啊,怎么把这个东西用到全面上去对吧,然后你有两个section呢,它的convolution实际上有这么低的那个fx方减x x方,把dx方都这样。
然后这个conclusion呢它有一些properties是吧,有个shift in rain,对吧,然后一个convolution seven fully transform segmas。
composition,convolution,can be computing fully,呃,弗利种类对吧,就是两个东西都convolution对吧,得到那个fashion呢实际上是什么。
实际上你就可以把他们每个fashion做忽略变换对吧,然后你在那个复列变换呢,你把他们的图存在一起之后,就连续往存在一起,然后再做一个荧幕初略传统是吧,这也可以得到这个convolution对吧。
这个convolution sir对吧,convolution con就比如说两个对吧,你可以对吧,但如果你是给定了两个vx的话,会考我数学,那就是这种形式对吧。
那个那个中间那个记忆实际上就是一个叫做srance matrix,对啊,实际上你可以把它打开官网,反复裂飞行,你可以把它打开官网啊,就是fi实际上就是那个复裂飞机的啊,那集忘记他说他的普嘛,对不对。
然后就是卡不住跟sir啊,然后呢你可以把它变成这样的形式,对不对,那第一个呢实际上你就是对这个f做普列变换对吧,乘以那个mac形式,这样这样的话就是你你首先对f go忽略变换,对不对。
然后呢乘以这个t的那个对吧,然后再用was full transform对吧,好,然后呢有了这个有了这个convolution以后呢,我们就可以想想怎么去定义这个special conviction。
special conclusion,就是你两个就是在曲面上两个gcb方案是要log对吧,就是说你可以你首先对什么,你首先用那个富力杯子晒黑,你记住啊,这个东西是在一个局面上对吧。
一个曲面上我的那个拉普拉斯和max对吧,然后你就可以对这个用fk呢,你首先算出对吧,你觉得夸张,你的复率被首先算出每一个bank的基,每个翻译是coefficient,就是复利非coefficient。
然后你把那个for coeffen在一起对吧,然后呢你再说再占用这个范畴,把他家里选择到了一个英文处理,全错是吧,乘以x x o对吧,乘以这个φ的四乘以f中间那个形对吧,他就是这就是那个东西。
但这个东西呢当然他不是shift in bon,因为他special这种convolution是吧,ok好那我们现在就现在就想想,我们就是有像我们我们有一些组合。
我们研究了这个是这个special alysis对吧,我们研究了这个his decision是吧,然后研究了special convolution,对不对,当然他不是那个shift spin。
他不跟那个传统的这个东西还是有点差别的好,那我们现在下面要讲讲,就讲讲这个东西,有了这些东西以后,大家怎么在这个graph上面或者mac上面所顶着你呢,地图内我讲了小满主题。
不是你他还是有很多不同的形式,这种东西呢它是一种它是跟这个special lol相关的啊,后面我们会讲一些这种对吧,这种这种local的那个covolution这种东西啊,我们会讲这些东西啊,然后。
然后那个我们会,然后我就会想啊,这是第一种啊,就是说那个多呢对吧,这个现在在慢慢又在外面一,你也定了一种叫special engers,special这种平a啊,实际上他干了一件什么事情呢。
就是说你首先想如果你在你他就说在grap上面做兼任,无非就是grap上面对吧,你想英语上做cn就是你每个品凑一个值对吧,然后你最后每个新手对吧,当然我们会做一些处理啊对吧。
那每个pm上面会有一个special bor,是不,实际上每个layer呢,你是把一个pixel的一个b shmap到另一个layer的demer对吧。
the convolution expressing structure,后面就是g对吧,然后你有一个fan对吧,你有个w有个fc转成cf是吧,有次跟n和n乘n的w都没举手。
n然后special pscomb对吧,对吧,那是欧平方cp对象,for input to transform是吧,on no ground tia,special special。
no patient of you是吧,所以说它实际上是是无无非呢,但是呢这地种就是早期的这种操作模式,然后他他满足是什么花呢,就是把一个比如说国际上每个点有一个value对吧。
经过这个东西转化也会变成另外一个value是吧,变成另外一个function吧,现在是一个function出去也是一个function对吧对吧,实际上这个东西呢你如果大家你如果我对吧。
我们这个这个这个nbbk什么样子,就这样啊,all right对吧,然后我们还要提的,比如fal map啊,就这样有很多研究,然后我自己研究对吧,你可以就说这把你可以把那个fashion of f。
这个fashion map我对我记得我08年吧,09年19年是吧,我前前那个max来这个game什么就给过一个那个top,你们讲过fman好吧,你可以把那个把那个那个slides翻出来再看看好吧。
把那个套餐啊,如果大家有兴趣的话,我个人感觉30卖我现在做的研究,我感觉fashima其实你可以把它用它上来,a boy太多啊,反正这个东西我觉得有点远啊,我觉得这个东西很好啊,就是只要是线性的结构。
我觉得都是很好的东西对吧,你可以把两个呃两个那个shift之间的这个这个map对吧,有facial的东西来表示,对吧,然后呢你也可以就是说当当然就是说如果你对啊。
你如果对这个用用这个东西来做做做deep learning的话,牵扯到一个问题,就是说你这个对吧,你应该怎么把它变成cc啊,把它变成cc,对吧,实际上呢就是说这个东西实际上是说呢就是说呃这这篇文章。
比如说那个117年嘛,就是这个eric avc e对吧,就是我我一个实例吧,就是上次那个他也来这个game,应该应该做过嘉宾吧,然后那个说比如说three d上面。
如果我们要做这个special的这个东西呢,比如说你首先我们要有一个basis对吧,有个basis如果要说地图那种的话,也有个杯子,可是拉布拉跟杯子nblush mit的问题在哪。
就是你把这个shift换以后啊,哎你把这个shift换了以后,你这个basic变了对吧,你不像image image,它是一个rapper on main,真的如果我们做npc basis的话。
那个rap怎么不管你那个里面的东西怎么变,对不对,他不会变的对吧,它不会变的对吧,上面呢如果我们做出来找老老粉丝了,你你两个,比如说human是吧,你这里三个human model对吧。
你不能听懂mode,你这个杯子是不一样的对吧,那这个时候就切出来一个什么东西呢,就是我们在用这个basis表示这个fashion的时候,就是我们首先要把这个base要把它做成lion吧。
或者叫做calibration对吧,把它对对齐,对不对,哎那这个时候应该怎么去对齐呢,比如说你怎么去对齐呢,比如说你special analysis,对不对,他如果是用c basis。
它实际上就是do not general costal main对吧,你比如说你可以当然你可以像这种conclusion pure special面,你看这个东西很有意思啊。
这就special loss,然后做deep learning呢,你加一个文书对吧,就是你这一这个雷也出来的时候,你加了一个人录就spc,但是他的问题就是你不同的走位。
但是但是就是说实际说你觉得ly这个东西就是因为因为他的这个,因为他的这个这个这个这个杯子它不不对齐对吧,如果你你用不对齐的杯子去学的话,你得到的实际上就是什么。
你得到的实在是热的这个basic videbasing vide,对吧,对吧,那我们怎么怎么来用这个怎么怎么改进这个问题呢,就比如说这个对吧,他们那就是我们怎么办,我们加一个transformer对吧。
我们就是加一个transformer指的就是说我们给一个shape做input的对吧,我们去学你怎么把这个怎么把这个basis给给calia在一起对吧,category在一起对吧。
就是把那个杯子给calibrate一下对吧,然后然后你做芙利尔来做这个,然后你做这个special标准对吧,哎就是你把这个时间special field就是信号处理里面的filter对吧。
哎这个special那个对吧,然后你搞完以后,你再把它怎么样,你再把它参数出来对吧,传出来,然后你在做在做,因为处理穿什么在走的路是吧,transformer现在很火对吧对吧。
他former现在是不是很火啊对吧,transformer应该是很火的对吧,哎好吧,哎那这个东西呢我就跟大家讲一讲对吧,就是这个我觉得这都是很不错的东西对吧,其实你像这个传说嘛。
上上次我们讲point net也有个传说嘛对吧,他只是他是那个是什么,那个是在那个special的懂main对吧,在那个special的走位,我们我们把那个给transform一下对吧。
诶那在这个在这个情况,它是那个special呢对吧,你去做一些transformation,那个transformation对吧,然后这就是一些一些结果吧,好吧,就是normal prediction。
using a special,这个one network ridict和这个光球很相近啊,然后你会发现有一点我就希望大家看一点啊,就是说你可以看出就实际上就是说你比如说上面跟下面对吧。
你会发现有那么几个特点吗,第一第一点就是你发现没有第三个人prediction,因为它是用那个special bation是吧,这个predict相对来说是比较沉默对吧,相对来说比较实墨子啊对吧。
对不对,跟光子true相比对吧,第二呢就是有些特别小的那种形式来,看不到他用的这个杯子有些关系是吧,你知道那个special basis在有什么好处,他就自动的给你做了一些regalization对吧。
然后你可以做shift entation对吧,专属内容好吧,我那个今天不好意思啊,我今天那个就只能讲到这好吧,因为我那个下面呢我还会就下个星期呢我会接着这个讲话,那个。
我今天主要是给大家就是我们回忆一下吧好吧,然后给那个大家讲一讲,就是我们看看我们在讲些什么东西啊,就是我们讲的就是学派的问题对吧,第二点呢我们就讲了这个batural losis对吧。
这个忽略basis对不对,就是同一学校,实际上好多时候就是说你知道了这个为什么,就是后面我们讲了这个呃fly fly fici讲了这his devision是吧,然后我们就讲了convolution。
convolution对吧,然后我们这个special上面的commotion是吧,就是利用这个poly basis,对不对,上的fly basis就是那个llash opera diao max对吧。
啊然后,我想讲一点,你就发现什么,其实其实说白了为什么我们要研究数学,就是数学,实际上它就是不让你一个抽象的做一些抽象嘛,你如果能把一个结果能把它抛到一个抽象的上面去,那就有什么好处啊。
就是你只要能把一个东西抽能抽象到那上面去对只要那那就能对吧,那你就能那个什么是吧,那你就能套用那个结果对吧,你像这个地方嗯对吧,那个拉我们知道这个卡我那个那个对吧,就是那个fly basis对吧。
那个fly basis它实际上就是那个拉拉拉布拉萨那个operators ex的,是有那个东西对,我就能把那个头像过来对吧,好,我们下节课会接着讲这个叫magic deep learning啊。
我会讲一些深入的东西,好吧好。