前提
有了基本的BXDF数学的原理之后,我们就需要进行光照的渲染计算了,一般情况下,我们只会使用BRDF模型进行计算,下面我就介绍一下几种常用的模型。
光照模型
本文只研究BRDF,也就是反射模型,一般的有,反射模型有二个部分组成,漫反射(diffuse)和高光反射(specular),使用d和s来进行表示,由于各自的关于,我们把它抽象为:
Lambert模型
lambert是最简单的着色模型,没有镜面反射g()=0,于是我们可以得到BRDF:
Phong模型
从phong模型开始,ks就不再为0,还是提一下定义的量,R为高光反射的光线,N为法线,V为射入相机的光线,I为光源射出的光线(定义为指向光源)。
Blinn-Phong模型
和Phong模型相比,只是多了一个H,称之为半程向量,H=normalize(I+V),相比于Phong模型,计算量减少了一些,其余无太大的区别:
Cook-Torrance模型
Cook-Torrance模型是一种基于物理的渲染的模型,主要采用了一种微平面的模型,这里只进行大致的说明,不进行过多的介绍,在PBR中自行了解:
渲染方程
关于渲染方程的也有二种的形式,这是对于不同环境中的光分别做不同的处理,分别是半球形公式和区域公式:
半球形公式
以着色点(像素),的法线向四周做一个上半球形,这就是基本的半球形的公式处理,对于一个点的颜色值由二个部分组成,一是物体自发光L(e),二是物体接受到其他物体的反射光L(r)(入射光的反射,也包括光源直接照射的光)。 所以我们着色公式为:
区域公式
对于一个着色点,其入射光来源是场景中所有物体的表面,可以使用该公式来求所有入射光表面的积分,来代替球面的积分,被照射点(着色像素)记为x,发出点为y,添加函数V(x,y)表示可见性,1为可见,0为不可见。
x的入射光为y的出射光。
区域公式比较少的用到,也不进行多余的解释。
直接光照和间接光照
直接照明指的是光从光源直接照到材质表面,间接照明指的是光在场景中经过反射若干次后照到材质表面。经验表明,当考虑直接光的时候,区域公式更有效;考虑间接光的时候,半球形公式更有效。可以这样去想这件事:直接光一定是从光源发出来的、没有经过反射的,因此其来源一定是光源,我们可以很轻松找到光源并在其表面区域上进行积分;而对于间接光,由于其光线经过反射,因此很难找到其来源,所以只能使用半球形公式。 渲染的过程也比较的简单,后续进行更新。