而 environment map 从像素的视角上看,就是一个离散的随机变量。 所以我们可以用别名法来加速这个采样过程。 注意,只对于解析光源进行该操作,本文只涉及 IBL,所以不需要考虑这个。
主要思路就是预计算,把复杂的积分都先算好。 我们会分别预计算漫反射项和镜面项,最终在实时渲染中只需通过简单的纹理采样即可得到结果。 这个预计算有时需要实时更新,那么快速计算就十分重要。
ibl: 2 金属工作流 Metallic Workflow
为了加速收敛,我们可以用重要性采样,但还是需要不少的样本。 Krivanek 的 Pre-filtered importance sampling 可以减少样本数量,收敛提升明显,只引入了一小些偏差。 这两部分都可以用一个 2D 的纹理来表示预计算的结果,它们都是 1 维变量,可以放在同一张纹理里边,scale 放在红色通道, bias 放在绿色通道。
完整的 PBR 计算里才会用到。 这样会引入误差,最明显的现象就是在掠射角(grazing angles)看表面时没法得到拖长的反射。 同时我会给出离线渲染和实时渲染中的基于图像照明(Image-Based Lighting, IBL)的实现。 但这些只是近似结果,最大的误差来自于 spilt sum approximation,也就是说,反射效果会有较大的差异。 这篇文章,我会把公式的由来,推导和理解都尽量讲清楚,做到知其然和知其所以然。