本篇IBL部分数学高能

引言

这一节我们来复现一下经典PBR模型,并引入IBL环境光照计算。这一章的数学公式和分析相对较多,难度较大,需要沉下心来阅读。

Part1. 微表面模型理论

之前我们使用过phong和blinn-phong模型,它们的BRDF都是漫反射项和镜面高光项的加和:

$$f_r = k_d * f_{lambert} + k_s * f_{phong/blinn-phong}$$

这些材质模型虽然可以提供不错的外观效果,但是它们终究有几个比较严重的问题:

1、局限性大,有很多现实的材质是上述模型无法通过调参拟合出来的;

2、模型没有模拟出真实物体表面的粗糙构造,现实很少有完全光滑的表面;

3、光照计算不完全基于物理,像blinn-phong经验模型甚至违反能量守恒。

所以后来诞生了微表面模型的概念,其核心思想是为表面假象了一个微观的粗糙结构:

这样起伏不平的表面意味着:微观法线的方向是具有随机性的,同时表面内部会有互相遮挡的现象,这样的结构比较清晰地模拟了现实世界中粗糙物体的性质。当然,由于它影响的是“微观法线”,所以实际上受影响的是高光的值(漫反射的值与法线无关)

cook-torrance就利用了这样的微表面结构,并提出了这样的一种BRDF:

$$f_r = k_d * f_{lambert} + f_{cook-torrance}$$

相当于在原本phong、blinn-phong的基础上,将高光分量的计算公式替换成了微表面分布下的高光计算公式。那么具体这个式子长什么样子呢?

$$f_{cook-torrance} = \frac{D*F*G}{4(\omega_o · n)(\omega_i · n)}$$

这里面提出了三个新概念,分别是D、F和G,这三个分量描述了一个完整微表面的性质。接下来我们详细探讨一下它们的性质。

1、法线分布函数D:

在讲D之前,我们回忆一下blinn-phong模型。blinn-phong模型比phong模型的提升点在于“半程向量”的概念,并且论证了半程向量与法线的cos值是描述高光强度的关键所在。微表面模型其实依旧沿用这样的准则,肯定半程向量的作用,只是由于微观表面是粗糙的,因此并非所有打在该点上的光线都会沿着相同的方向出射,那么半程向量的贡献就不再恒定了,而是有一部分会流失掉。

那么有多少能量会流失掉呢?取决于表面的粗糙程度。但表面趋近于完全光滑时,那么半程向量的贡献就是最大的;而如果表面非常粗糙,那么就会随着粗糙度的提升,半程向量的贡献越来越低。D函数就是要描述半程向量部分的最终贡献到底是多少。所以,一位叫做GGX的人提出了他的D项经验公式:

$$D = \frac{\alpha^2}{\pi((n · h)^2(\alpha^2 - 1) + 1)^2}$$

具体这个式子是怎么推出来的就不分析了,我们主要来分析一下它的性质。首先,当alpha非常大乃至接近1的时候,那么无论n · h等于多少,最后D的值都相差不大,这就意味着半程向量的高光贡献几乎被消除,那么材质表面处处都是相同的高光值: