科普:Shadow mapping、Path tracing

Shadow mapping 基本原理:

1 以光源为原点,即光源坐标系,将视点移至光源处,启用depth buffer形成一张depth map,也就是所谓的shadow map,这样得到的是一张离光源最近的图,即没有阴影的图;

2 恢复视点到其原来的位置,启用frame buffer,计算场景中每个像素到光源的距离,然后与depth map比较,如果到光源的距离相等,则不在阴影中,如果距离大,则在阴影中。根据比较结果,对light fragment和shadow fragment分别使用不同的方法计算光照,从而实现阴影效果。

Path tracing (路径跟踪)


Path tracing 是指从一个像素中发出multiple random rays, 相当于从眼睛到像素这一个方向打出很多条ray,然后在同一个交点上发出secondary ray, 有多少条primary ray就有多少条secondary ray,然后secondary的方向任意,不一定要是发射光线的方向。到secondary就停止tracing,这是其与ray tracing的区别。

因为secondary ray的方向任意,所以就出现了各种采样的方法来确定secondary ray的方向,使得能够更好的模拟真实场景。因为如果采到比较强的镜面反射,这样的反射光贡献更大,也更接近现实,也就是说,如果确定的反射方向的光强越大,其实是更准确的模拟了现实的,因为低光强采到与没有采到对真实情况的影响不大。最终将多条的primary ray 和secondary ray利用phong局部光照模型进行计算,并将所有结果累加在一起就是这一个交点的光强。

所以采用重要性采样能够较好的模拟真实场景。但是有时候也会出现很多noise,原因是我们对场景面的反射不了解,可能没有采到高度镜面反射的光,从而导致noise。

来源:网络整理

推荐阅读