IBL (Image - Based Lighting)
IBL假定光照是从无限远的地方出发。对于从环境光照中采样,有一个通用的解法就是使用蒙特卡洛积分,但是这样做十分低效。在实时渲染中,我们通常尽可能避免sampling(这里是指采样屏幕上的所有像素)。现代引擎中最常用的方法是分解求和近似(The Split Sum Approximation),将渲染方程拆分如下:

The Split Sum : 1st Stage

第一步,我们可以离线生成不同大小的filtered后的环境光照贴图,这就是预过滤环境映射(Prefiltered Environment Mapping)。
根据镜面反射向量R,我们就可以得到Prefiltered后的环境光照。

The Split Sum: 2nd Stage
将渲染方程右半部分拆成和"BaseColor" (R0)和 θ相关的方程

这样Roughness和θ所有可能的组合都能预计算出来,也就是上面那个Roughness - cosθ 图。
可以看到在实时渲染中采用分解求和近似的方法得到的结果和原样非常相似。

值得注意的是,虽然通过分解求和近似技术得到的结果对不同的BRDF都适用,但是我们常常拿它来还原环境光的镜面反射,也就是所谓“glossy”的部分。
其他方法
除了Split Sum Approximation方法之外,还可以通过PRT、Linearly Transformed Cosines(LTC)等方法来实现环境光照。
Shadow from Environment Lighting
在实时光照下,非常难得到环境光照中的阴影。

后记(2023/7/1)
回顾了一下当时这一块确实写的比较简陋,补充了部分数学推导过程和细节。