将CubeMap的每个像素当成一个光源。

漫反射IBL

预计算出一个新的cubemap,存储了用卷积计算的每个采样方向ωo的漫反射积分结果。

镜面的IBL

镜面反射部分依赖于入射光方向和视线入射方向,尝试实时计算有入射光和所有入射视线的积分是几乎不可能的。
使用预卷积镜面反射部分的方法:分裂和近似法。


加入粗糙度,根据不同的粗糙度等级,在预过滤环境图的mipmap等级存储更模糊的结果。
需要用到两个输入:法线和视线向量。卷积环境图并不知道视线防线,所以采用了一种妥协:V=R=N

假设所有方向的入射辐射率是全白的,那就可以用给定的粗糙度和一个法线n和光源方向ωi之间的角度或n⋅ωi来预计算BRDF的值。
Epic Games存储了用变化的粗糙度来预计算每一个法线和光源方向组合的BRDF的值,该粗糙度存储于2D采样纹理(LUT)中,它被称为BRDF积分图(BRDF integration map)。

上图水平表示BRDF的输入n⋅ωi,竖向表示输入的粗糙度。
2D采样纹理输出一个缩放(红色)和一个偏移值(绿色)给表面的菲涅尔方程式(Fresnel response),以便提供第二部分的镜面积分。
完整的IBL
- reflect(-V, N)求出反射向量R,再结合粗糙度roughness采样prefilterMap,得出镜面反射颜色prefilteredColor。
- 用V、N的夹角和roughness采样BRDF查找纹理,得出缩放和偏移合成反射系数。
- 反射系数乘以prefilterColor,得到镜面部分的结果。
- 用N采样漫反射IBL的辐照度图。
- 根据反射系数和漫反射系数,将将镜面反射和漫反射相加得到最终的IBL结果。
本文详细介绍了IBL(环境光照)的实现过程,包括漫反射IBL的预计算,镜面IBL的预卷积方法,如分裂和近似法,以及如何结合粗糙度和BRDF积分图进行处理。最后阐述了如何通过反射向量、法线和粗糙度计算完整的IBL结果,将镜面反射和漫反射相加得到最终的光照效果。
877

被折叠的 条评论
为什么被折叠?



