GAMES101渲染部分(4)

蒙特卡洛积分

在积分定义域上随机采样加权,最后求平均

image-20211110193305716

image-20211110193421655

样本越多,最终的结果距离正确值越准。

在哪个变量上积分,采样哪个变量。

路径追踪

和Whitted-Style Ray Tracing有所不同

Whitted-Style Ray Tracing

问题:

对于Glossy材质,简单将其和Specular等价是不合适的。

没有计算间接光照(Diffuse材质之间的反射)。

Whitted-Style Ray Tracing是有问题的,渲染方程是正确的,我们需要正确地解出渲染方程。

解渲染方程需要

解半球积分

image-20211110194625758

如何求当前点的直接光照?

image-20211110194846720

目前假设是均匀分布的

image-20211110194955757

如果只考虑直接光照,且不考虑可见性的话,目前这个结果就是求解渲染方程的一种方法了。

引入间接光照

image-20211110195211685

这里,假如光线弹射到了Q点上,那么就相当于在P点观察Q点,获取Q点的直接光照。

image-20211110195526357

但是还有问题…:

光线弹射次数爆炸

image-20211110195644645

解决方案:打出一根光线。

现在就可以被叫做路径追踪了。

image-20211110195751524

如何解决噪声?直接对单个像素打出多个光线

image-20211110195933468

类似于对逐像素做蒙特卡洛积分。

image-20211110200003987

以及另一个问题…:

俄罗斯轮盘赌(RR)(递归停止)

如果单纯限制弹射次数的话,很可能会导致能量损失。

采用俄罗斯轮盘赌来决定在一定概率下停止追踪。

image-20211110200551387

image-20211110200608772

目前已经是一个正确的路径追踪的算法了。

但是不够高效。

最终结果还是需要对单个像素打出多根光线。

image-20211110200802530

对光源采样

image-20211110200929250

因为是对光源采样,因此想要使用蒙特卡洛,我们也需要对光源积分。

image-20211110201133739

首先需要把渲染方程写成关于光源面积的形式,因此我们需要找到光源面积和立体角的关系。

image-20211110201237754

这样就可以更好地对光源进行采样

image-20211110201419859

我们把光线传播分成两部分

image-20211110201514051

image-20211110201603347

但是还有问题

对光源采样的遮挡问题

在直接光照计算的部分,需要再射出一根光线判断是否有遮挡。

image-20211110201754537

更多的方法…

image-20211110202057202