本章主要通过Cook-Torrance模型去讲解基于物理的渲染,目前的主流渲染和Unity的Standard Shader采样的都是CookTorrance模型。
一.CookTorrance介绍及其公式
主要公式如下,光照分为普通漫反射+高光部分,CookTorrance模型主要计算的是高光部分的效果。普通漫反射就用Lambert模型就可以了,高光部分由FDG三项组成,D项代表微平面法线分布函数,G项表示衰减函数,F项表示Fresnel函数。其中最重要的是微平面法线分布函数,其有三种模型可以选择 分别是BilinnPhong,Beckmann和GGX模型。BilinnPhong就是传统的高光模型,效果表现一般,Beckmann是后期提出的效果稍微好一点的模型,但是现在主流效果都是采用GGX,该模型在高光边缘表现的光晕渐变效果更好。对于F项和G项也有很多数学模型供选择,如下都列出来了,但是在手机上由于计算量限制和FG项对效果的贡献度不够,一般可以采用省略或缩减FG项,重点表现在GGX函数上。如下列出了大部分目前所使用的光照各项函数:
二.微平面法线分布函数及其表现
微平面法线分布函数重点表现在高光部分,其效果由两个参数控制,分别是金属度和光滑度(粗糙度=1-光滑度)。如下图所示,
使用GGX模型时,当光滑度从0.2到0.9的范围内,高光越来越明显,最终收缩、从该图可以看出粗糙度对高光效果的影响。
下面再来对比一下各种光照模型公式的选取,对高光效果的影响,如下图可看出左边D项对比的时候,GGX模型效果明显好于Blinn和Beckmann模型。再对比右边的F和G项会发现,不同数学模型的选取 也会造成一定的效果差异,但是主体对效果的贡献度还是GGX模型会更大一些。F和G可以根据实际情况进行选取。
三.Fresnel方程
常用的就是Fresnel-Schlick方程,公式如下:
其中F0是表面基础反射率,也就是当我们垂直观察每个表面或者材质时的基础反射率。如下是Fresnel效果