GAMES101-图形学笔记(11)光线追踪(下)

1.Monte Carlo Integration(蒙特卡罗积分)

2.Path Tracing(路径追踪)

2.1、Whiting-Style Ray Tracing光线打到光滑物体表面,会反射或者折射,打到粗糙物体表面会漫反射。但存在两个问题:

  (1)下图中当物体是左边Specular (镜面)reflection时,Whiting-Style Ray Tracing没有问题,但遇到Glossy (光泽)reflection时,Whiting-Style Ray Tracing就表现不好;

  (2)Whiting-Style Ray Tracing无法做到右图全局光照效果,而且Path Tracing的全局光照还能达到color bleeding效果(光线经过左右边反射到中间物体,光染上了红绿色)

2.2、一个Monte Carlo Integration在直接光照上的应用:

     在半球上均匀采样,用Monte Carlo Integration算积分;

     直接光照算法实现:取N个方向的采样,对于每个方向wi,从p点向该方向发出射线r,判断如果碰到了光源,则计算此方向贡献的Lo,并且累加到之前的Lo上;

     即将渲染方程用蒙罗卡德方法转化为N个采样进行积分;

3.Global Illumination(全局光照)

间接光照:

      摄像机的位置为O点,光源为T点,我们想要计算P点射到O点的Radiance。我们在OPQ这段路径上,把Q看做光源,那么对OPQ段解第一次渲染方程;

      方程中被积函数的 P点入射  RadianceLi(p,ωi) 是未知的,而这个P点入射光 Li 又是Q点的出射光 Lo ,则可以在PQT上解第二个渲染方程,PQT的渲染方程中 Li就是光源的Radiance;
       计算p点的全局光照代码如下,仅仅是在直接光照计算的代码中加了一段递归计算,注意-wi是因为shade(q,wi)得到的是Q点出射到P的方向,而我们需要填入的参数的是P看向Q的方向的Radiance;

但这种计算存在问题:

(1)光线数量爆炸:随着弹射次数的增多,打出的光线数量会指数级上升,除非N=1,不管弹射几次都是一条光线;N=1时做蒙罗卡德积分就叫做路径追踪;

  (2)N=1时出现噪点问题:每个像素追踪更多的路径,然后取平均值。所以呢只要用足够多的path,就能够确保有更大的几率击中有效光源或物体,计算出接近正确的着色。

但shade()函数递归没有停止条件,会无限递归下去;

解决办法: 俄罗斯轮盘赌 RussianRoulette(RR)

我们的目标是求着色点的着色结果,即该点到相机方向的Lo
假设我们手动设置一个概率P,以P概率继续发射一条光线,返回Lo除以P之后的着色结果:Lo / P
以1-P的概率不发射光线,返回0,最终计算离散型随机变量的期望 E = P x (Lo / P) + (1 - P) x 0=Lo;
红色部分是实现了手动指定概率P,有P的几率继续递归,1-P的几率终止递归,假如静态变量P_RR = 0.8,每次执行shade(),产生一个随机数0~1的ksi,ksi 落在0.8~1的概率就只有0.2,也就0.2的概率终止执行,即不再继续产生光线,往后弹射了;

但只要一个像素产生足够多路径,每个路径长短不一效果才会比较好,比较看运气;

      (3) 低采样数时噪点太多,高采样率浪费性能:光源很大的时候,可能发射5条光线,能有一条击中光源;光源很小的时候,我发射五万条光线才能一条击中,这种情况的采样方法就太浪费了;

     直接采样光源的表面,这样就没有光线被浪费;之前蒙特卡洛解渲染方程,我们采样的是半球上立体角,并且渲染方程也是对wi进行积分的,我们需要把渲染方程写成在光源上的积分;

     对光源表面的dA进行积分,就必须找到dA和dwi的关系,因为dw=dA/(r*r);dA在w方向向量为dA*cosθ’,距离r是x到x'距离,公式如下:

 最终渲染方程,积分范围也从半球变成光源表面积;

所以对每个像素点的着色包括直接光照和其他物体反射来的光线(需要用到俄罗斯轮盘赌),注意采样光源需要判断是否有物体阻挡;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值