简单实现了一下类似环境映射的光照效果渲染
之前的渲染框架只支持点光源和面光源,所以很难模拟自然环境光的渲染,于是现在简单地加入了一个类似environment map的环境光照的渲染。实际上环境映射(environment mapping)在实时渲染中经常被用到,主要用来模拟光滑表面对周围环境的反射,如镜子、光亮漆面的金属等等。但环境映射有两个很强的假设:1.所有入射光都来自无限远处;2.被渲染的物体必须是凸的,不能有自反射。这两个条件在实际中是很难达到的,当然这是在实时渲染框架下的限制。在光线跟踪引擎下,我们可以轻松地突破这两个条件,当然代价就是效率的降低。在path tracing中,我们还可以对漫反射表面进行环境映射积分,从而达到处理漫反射表面的目的(这对于通常意义下的环境映射是不能完成的)。这里我的做法是,使用类似球形环境映射的方法,首先把一张选好的环境图贴到一个包围了整个场景的球面上,然后对场景使用path tracing算法,终结条件是射线击中这个球面(而不是击中光源)。由于这个巨大的球面包含了整个场景,所以找到有效路径的几率几乎是100%,效率还是可以接受的。当然,这里其实还可以加上重要性采样,比如在环境贴图中亮的部分更多地采样,但这就不是标准path tracing能够做的事情了。
使用这个方法,就可以更好地模拟自然环境下的光照,从而使结果看起来更加真实生动。下面是两组渲染结果: