BRDF作为比较流行的渲染算法,但凡成熟的引擎的都有此功能,我们自己写引擎也不例外,我在编写引擎时也会参考网上的一些资料,这也是学习的过程,先介绍BRDF,它是双向反射分布函数,说白了它是对于物体表面上光的处理,BRDF有很多模型,我们在编写Shader的时候也是基于这些模型。BRDF使用的数学模型是Cook-Torrance公式,如下所示:
我们实现的BRDF渲染算法会参考Unreal Engine 4中所使用的函数,其中D使用Trowbridge-Reitz GGX,F使用Fresnel-Schlick近似(Fresnel-Schlick Approximation),而G使用Smith’s Schlick-GGX,下面我们就重点实现DFG,先看D的实现算法:
我们根据上述公式可以写出Shader代码,如下所示:
其实我们就是用编程语言写出算法而已,接下来再看F的算法实现,它主要是处理反射的,公式如下所示: