由浅入深学习PBR的原理和实现part_05(理论知识)转载
Hello .大家好
今天是2020年03月03日星期二


01集回顾点击跳转PBR知识体系_认知和应用(重要)
02集回顾点击跳转PBR在游戏引擎的应用
03集回顾点击跳转双向反射分布和PBR制作
04集回顾点击跳转PBR的光照实现
3.3 基于图像的光照(Image Based Lighting,IBL)
基于图像的光照(IBL)是对光源物体的技巧集合,与直接光照不同,它将周围环境当成一个大光源。IBL通常结合cubemap环境贴图,cubemap通常采集自真实的照片或从3D场景生成,这样可以将其用于光照方程:将cubemap的每个像素当成一个光源。这样可以更有效地捕获全局光照和常规感观,使得被渲染的物体更好地融入所处的环境中。
当基于图像的光照算法获得一些(全局的)环境光照时,它的输入被当成更加精密形式的环境光照,甚至是一种粗糙的全局光照的模拟。这使得IBL有助于PBR的渲染,使得物体渲染效果更真实。
在介绍IBL结合PBR之前,先回顾一下反射方程:
如之前所述,我们的主目标是解决所有入射光wi通过半球Ω的积分∫。与直接光照不同的是,在IBL中,每一个来自周围环境的入射光ωi都可能存在辐射,这些辐射对解决积分有着重要的作用。为解决积分有两个要求:
需要用某种方法获得给定任意方向向量ωiωi的场景辐射。
解决积分需尽可能快并实时。
对第一个要求,相对简单,采用环境cubemap。给定一个cubemap,可以假设它的每个像素是一个单独的发光光源。通过任意方向向量ωi采样cubemap,可以获得场景在这个方向的辐射。
获取任意方向向量ωi的场景辐射很简单,如下:

对要求二,解决积分能只考虑一个方向的辐射,要考虑环境贴图的半球Ω的所有可能的方向ωi,但常规积分方法在片元着色器中开销非常大。为了有效解决积分问题,可采用预计算或预处理的方法。因此,需要深究一下反射方程:

可将上述的kd和ks项拆分

拆分后,可分开处理漫反射和镜面反射的积分。先从漫反射积分开始
3.3.1 漫反射辐照度(Diffuse irradiance)
仔细分析上面方程的漫反射积分部分,发现Lambert漫反射是个常量项(颜色c,折射因子kd和π)并且不依赖积分变量。因此,可见常量部分移出漫反射积分:

因此,积分只依赖ωi(假设p在环境贴图的中心)。据此,可以计算或预计算出一个新的cubemap,这个cubemap存储了用卷积(convolution)计算出的每个采样方向(或像素)ωo的漫反射积分结果。
卷积(convolution)是对数据集的每个入口应用一些计算,假设其它所有的入口都在这个数据集里。此处的数据集就是场景辐射或环境图。因此,对cubemap的每个采样方向,我们可以顾及在半球Ω的其它所有的采样方向。
为了卷积环境图,我们要解决每个输出ωo采样方向的积分,通过离散地采样大量的在半球Ω的方向ωi并取它们辐射的平均值。采样方向ωi的半球是以点p为中心以ωo为法平面的。

这个预计算的为每个采样方向ωo存储了积分结果的cubemap,可被当成是预计算的在场景中所有的击中平行于ωo表面的非直接漫反射的光照之和。这种cubemap被称为辐照度图(Irradiance map)。
辐射方程依赖于位置p,假设它在辐照度图的中心。这意味着所有非直接漫反射光需来自于同一个环境图,它可能打破真实的幻觉(特别是室内)。渲染引擎用放置遍布场景的反射探头(reflection probe)来解决,每个反射探头计算其所处环境的独自的辐照度图。这样,点p的辐射率(和辐射)是与其最近的反射探头的辐照度插值。这里我们假设总是在环境图的中心采样。反射探头将在其它章节探讨。
下面是cubemap环境图(下图左)和对应的辐照度图(下图右):

通过存储每个cubemap像素卷积的结果,辐照度图有点像环境的平均颜色或光照显示。从这个环境图采样任意方向,可获得这个方向的场景辐照度。
3.3.1.1 球体图(Equirectangular map)
球体图(Equirectangular map)有些文献翻译成全景图,它与cubemap不一样的是:cubemap需要6张图,而球体图只需要一张,并且存储的贴图有一定形变:

cubemap是可以通过一定算法转成球体图的

完整文章 公众号 有些公式无法排版
完整文章 公众号 有些公式无法排版
完整文章 公众号 有些公式无法排版
