【GAMES101】Lecture 18 高级光线传播

这节课不涉及数学原理,只讲流程操作,大家当听这个十万个为什么就行

目录

高级光线传播

无偏光线传播方法

双向路径追踪(Bidirectional path tracing)

Metropolis light transport (MLT)

有偏光线传播方法

光子映射(Photon mapping)

Vertex connection and merging (VCM)

实时辐射度(Instant radiosity )VPL / many light methods


高级光线传播

无论样本量多少,最终期望是正确的,这个时候就叫无偏估计

其他情况都是有偏估计,有偏估计中有一种特殊情况,就是当这个估计使用无穷多样本让期望收敛到正确值时,这个时候叫做一致性

无偏光线传播方法

双向路径追踪(Bidirectional path tracing)

我们之前的路径追踪是根据光线的可逆型从摄像机这边出发打出光线然后到达光源这样的一条路径,然后这个Bidirectional path tracing双向路径追踪,BDPT,是从光源和摄像机都出发打出光线,然后再连起来形成路径,唉这个听起来实现就不简单,实际上确实也是很难

【GAMES101】Lecture 18 高级光线传播_第1张图片

我们只要知道在哪些情况下适合用这个双向路径追踪就行,就是当这个光线传播比较复杂的时候,我从摄像机出发要找到这个光源比较困难,像下面这个图,可以看到这个整体的光照来着这个向天花板照射的灯,如果要从摄像机出发靠弹射想要找到这个光源是比较困难的,因为四周都是漫反射,所以路径追踪就会出现左图的情况,而双向路径追踪它有一边从光源出发,那天花板上就会反射出一堆光线,这样就效果比较好

Metropolis light transport (MLT)

这个Markov Chain Monte Carlo,叫马尔可夫链蒙特卡罗,是统计学的一个工具,可以生成一个和当前样本很相似的新的样本,之前学过的蒙特卡洛积分可以以任何的概率分布函数去采样,而马尔可夫链蒙特卡罗可以生成和被积函数f很相似的概率分布函数p,而当f和p形状很相似的时候这个方差就会很小

这个事情应用到光线追踪上就可以根据一条已有的光线路径生成一条很接近的路径,从而找到其他所有的光线路径

【GAMES101】Lecture 18 高级光线传播_第2张图片

那这个有什么用呢,当场景中这个光路太过复杂的时候,用这个MLT就可以从找到的一条光路中生成其他光路,特别是这个水池的底光,可以看到它是这种鱼鳞斑一样的光纹,这是怎么形成,光线会先经过水面的镜面反射,这个specular反射,然后到达水底的漫反射diffuse,这个时候光线就不知道往那去了,那会有一部分光线再反射到水面出来再经过一次这个specular发射到达我们的眼睛,这个路径叫SDS,specular-diffuse-specular,这个用MLT就会效果比较好,因为我只要找到一条可行的光路那我就能找到附近的其他可行的光路

但是MLT还有一些缺点,一是很难去估计它什么时候会收敛,二是它是一个局部的方法,每个像素的收敛程度可能都不一样,所以它可能会产生一些比较脏的结果,不适用于渲染动画,因为动画是按帧渲染的,帧之间用MLT可能差异比较大

有偏光线传播方法

光子映射(Photon mapping)

光子映射是一种有偏的方法,分为两步操作,适用于刚刚提到的SDS,并且适用于产生caustics的情况,所谓caustics指的是光线经过聚焦会产生一系列很强的图案

【GAMES101】Lecture 18 高级光线传播_第3张图片

那光子映射具体怎么做呢,第一步先从光源往各个方向打出光子,光子不停反射直到碰上漫反射diffuse部分就停在那里 

【GAMES101】Lecture 18 高级光线传播_第4张图片第二步从摄像机出发光线,光线不停反射直到碰上diffuse部分停下来,然后做一个光子的局部密度估计,这个光子密度大的地方就应该更亮,那怎么算这个密度,对于一个着色点,统计它周围最近的N个光子作为它的密度

【GAMES101】Lecture 18 高级光线传播_第5张图片

那这样会有一些问题,就是我这个N很小的时候,噪声比较大,但是N太大了,渲染效果又会模糊,为什么呢,实际上还是这个密度估算的不对,理论上密度是微小面积上的数量,也就是dN/dA,但是我们这里用的是ΔN/ΔA,哎那这里本身就有系统误差,这也是为什么说这个光子映射是属于一种有偏估计,但是如果这个ΔA接近dA,那这个结果就会接近正确的值,比如原来投射一亿光子,然后N取100个,现在投射100亿光子,光子的密度上去了,而N保持100不变,那我一个找到的100个光子所覆盖的面积ΔA不就比原来更小了吗,这就更接近于密度,这也是一致性的概念

那这样我能不能不固定这个N,去固定这个ΔA呢,那这样的估计永远都是有偏的而且不是一致的,为什么呢,因为这个时候算出来的密度就和投射的光子数紧密相关了,投射的光子数越多,自然固定面积上的光子就会越多,而且这个ΔA不会变小,永远不会得到精确的结果

Vertex connection and merging (VCM)

这个VCM是双向路径追踪BDPT和光子映射的结合,怎么结合的呢,就是在双向路径追踪里面,这两条光线从光源和摄像机出发,最后的两个交点如果不能通过一次光线弹射连起来的话,也就说这两个点在同一个面上了,那这次的路径也不要浪费,对这两个交点用光子映射的方法计算然后平均一下作为这两条路径的结果

【GAMES101】Lecture 18 高级光线传播_第6张图片

实时辐射度(Instant radiosity )VPL / many light methods

这个实时辐射度关键思想就是把被光源照亮的地方当作光源,就是从光源出发的路径上的终点当成虚拟点光源Virtual Point Light (VPL),然后使用这些VPL继续渲染

【GAMES101】Lecture 18 高级光线传播_第7张图片

但是当VPL靠近这个着色点的时候会出现问题,像这个比较窄的缝隙里会突然比较亮,这是因为之前我们把对立体角积分转换到对光源面积积分那里在这里会有一点问题,还有就是这个方法不能用于glossy的材质

【GAMES101】Lecture 18 高级光线传播_第8张图片

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