【GAMES101】Lecture 16 路径追踪

目录

路径追踪

直接光照 

间接光照 

光线爆炸 

递归无法终止

采样问题


路径追踪

为什么我们需要这个路径追踪呢,之前学的Whitted-style光线追踪它只执行镜面反射,遇到了漫反射面就会停止弹射光线

还有一个问题就是Whitted-style无法在两个漫反射面之间传递光线

【GAMES101】Lecture 16 路径追踪_第1张图片

但是渲染方程是可以正确的表示全局光照的,但是我们要用这个渲染方程的话,就得解决两个问题,一是这个半球积分到底怎么算,而是这个递归的radiance到底怎么解决

直接光照 

我们先考虑只有直接光照的情况,并且本身我这个物体不发光,那我这个半球积分怎么算呢,这就用到了蒙特卡洛积分,那就要知道这个f和p对吧

这个f不就是这个入射的radiance吗,这个PDF取一个均匀采样,那这个随机变量是立体角,球的立体角是4\pi,那半球的立体角就是2\pi,那均匀分布的概率就是1/2\pi

【GAMES101】Lecture 16 路径追踪_第2张图片

那我们就得到了这个直接光照的渲染方程

【GAMES101】Lecture 16 路径追踪_第3张图片

那就可以写成这个伪代码,对于某个着色点p,随机采样N个立体角的光线从着色点出发,如果光线可以打到光源,就累加这个光源的L

【GAMES101】Lecture 16 路径追踪_第4张图片

间接光照 

我们刚刚的模型不是没有考虑到间接光照吗,那如果有间接光照Q点,这个间接光照Q点是不是会从某个光源接收到光线然后反射到我这个着色点,那是不是从着色点出发的光线也会打到这个Q点

【GAMES101】Lecture 16 路径追踪_第5张图片

唉那我只需要稍微修改一下刚刚的算法就可以解决间接光照的问题了,如果从着色出发的光线打到的不是光源而是物体,那我就加上从这个物体发射出来的radiance不就行了

【GAMES101】Lecture 16 路径追踪_第6张图片

光线爆炸 

但是这个算法还有两个问题,一个就是这个光线爆炸问题,不是说我从着色点出发很多条光线吗,那这个光线数量在经过多次反射的时候就会出现指数爆炸的情况

【GAMES101】Lecture 16 路径追踪_第7张图片

那这个N什么时候不会发生指数保证,那当这个N=1的时候就不会,无论多少次反射都只有一条光线,唉,那我就改成只采样一条光线

【GAMES101】Lecture 16 路径追踪_第8张图片

唉但是只用一条光线这个效果是不是太差了,对于一个点是只用一条,但是最终渲染的是像素,从一个像素可以出发多条光线嘛

【GAMES101】Lecture 16 路径追踪_第9张图片 这也是为什么会有路径追踪的概念,一条光线就一条路径,此时算法改成从像素产生多条光线

【GAMES101】Lecture 16 路径追踪_第10张图片

递归无法终止

但是这个算法还有一个问题,那就是递归有可能无法终止,这个光线可能一直在弹射下去,那能不能控制这个弹射的次数比分说我弹射几次我就停下来不弹了,这个是不行的,虽然弹射最终会收敛到某个效果但是无法确定这个收敛的次数

解决办法是用这个Russian Roulette(俄罗斯轮盘赌),就是一把左轮手枪,弹容量是6发,然后我往里面装2发一转合上砰上一枪,那我有这个4/6的概率存活对吧,然后还有另外的2/6的情况,那就是另外的情况

这个讲的就是一个概率的问题,那我同样给光线这么一个概率P,概率P我继续弹射下去,并且我把着色的返回结果除以P,1-P的概率我就直接不弹射返回0,唉这样子我不但能停,我还发现这样算出来的着色的期望不变,还是和原来的一样

唉这就很神奇,我只需要略微修改算法就可以解决问题

【GAMES101】Lecture 16 路径追踪_第11张图片

采样问题

但是还有一个小小的问题,就是我从一个像素出发的光线数量问题,如果这个光线数量少,那采样率就低,可能这个效果就并不好

这个问题出在哪里呢,问题就是我从像素出发的这些光线它不一定有效,就是说它不一定碰到东西

【GAMES101】Lecture 16 路径追踪_第12张图片

那这个问题怎么解决?那就直接从光源上采样,但是直接从光源上采样需要解决一个问题,因为从光源上采样积分的是面积dA,而渲染方程上积分的是立体角dw

【GAMES101】Lecture 16 路径追踪_第13张图片

那我就需要完成从dA到dw这么一个转换,立体角不就是一个单位球上面积对应的一个立体角吗,那我就从dA投影到单位球上这么一个面积,然后除以距离的平方就行了

【GAMES101】Lecture 16 路径追踪_第14张图片

然后新的PDF再用均匀采样的话那不就是1/A吗,那又可以用蒙特卡洛积分算了

【GAMES101】Lecture 16 路径追踪_第15张图片

那我们现在其实就把光的来源分成的两部分,一部分是这个来着光源的直接光照,另一部分是来着物体反射的间接光照,对应这个直接光照就用从光源采样的方法,对于这个间接光照就用这个俄罗斯轮盘赌计算

【GAMES101】Lecture 16 路径追踪_第16张图片

其实最后还有一个问题,就是这个光源它可能被挡住了,所以计算直接光照的时候需要判断一下这个光会不会被挡住,不被挡住再计算

【GAMES101】Lecture 16 路径追踪_第17张图片

现在路径追踪可以说是差不多100%正确了

【GAMES101】Lecture 16 路径追踪_第18张图片

你可能感兴趣的:(GAMES101,图形渲染,games101)