IBL计算总结
IBL 通常使用(取自现实世界或从3D场景生成的)环境立方体贴图 (Cubemap) ,可以将立方体贴图的每个像素视为光源,然后在渲染方程中直接使用它。
IBL计算主要有两部分组成,一个是光源产生的颜色,另一个是环境产生的颜色。
1.光源产生的颜色
光源产生的颜色计算,直接将数值带入Cook-Torrance反射率方程即可,
2.环境产生的颜色
环境产生的颜色,其实就是天空盒产生的光照,由间接漫反射光和间接镜面光组成。
将立方体贴图的每个纹素视为一个光源。使用一个方向向量 wi 对此立方体贴图进行采样,我们就可以获取该方向上的光照强度。
对于天空盒产生的环境光,应用反射率方程:
将反射率方程拆分成漫反射和镜面反射两个部分:
(1)间接漫反射光
间接漫反射计算公式:
计算irradiance,即
给定每个片段的积分球坐标,对半球进行离散采样。
如下图所示,在两层循环内,获取一个球面坐标并将它们转换为 3D 直角坐标向量,将向量从切线空间转换为世界空间,并使用此向量直接采样 HDR 环境贴图。我们将每个采样结果加到 irradiance,最后除以采样的总数,得到平均采样辐照度。
最终由间接漫反射产生的环境光为:
vec3 ambient = kD * diffuse * ao
总结: