局部光照模型简介:
在上一节,介绍了光线追踪算法的基本框架,里面提到了两个新的概念,其中一个是局部光照模型(phong模型),另一个是光线投射算法。光线投射算法我会在下一节介绍,本节主要介绍什么是phong局部光照模型。
局部光照模型,顾名思义就是只考虑光线在该物体上的作用,而不用考虑物体之间光能的传递。
phong模型分为三大部分,漫反射分量diffuse, 镜面反射分量reflection,环境光常量e。
漫反射在phong模型中是这样描述的。
diffuse = I*cosa 其中a是光线和法线之间的夹角,I是入射光的亮度。如果夹角越大,也就是入射光入射角度越倾斜,漫反射的亮度越低。这也叫做余弦发光体,又名朗博体表面散射模型。用文言文描述这一现象是:日初出沧沧凉凉,及其日中如探汤。。。。
镜面反射和漫反射的一个差异就是,物体上某个点的光亮度不光和光源位置有关,还和视点有关。
reflection = I*(cosb)^n 其中cosb是反射光线 和 视线的反向射线 之间的夹角的余弦,n表示光滑程度,由于cosb是(0-1)之间的小数,n越大相同的b会导致镜面反射结果越小,也就使得光斑的面积越小,也就说明越光滑。
这里采用的局部光照模型是phong模型,属于一种经验模型,所以为了表现不同物体的材质十分困难,需要繁杂的参数调教。在目前业界已经普遍采用基于物理的渲染,即pbr,我希望在之后的迭代过程中可以引入。
下面给出已知入射光线求反射光线的解法以及公式,都是高中立体几何知识。具体推导很简单,我这里只给出了结果。
直线入射点(a,b,c),方向向量(l,m,n)
x = l*t+a
y = m*t+b
z = n*t+c
法线 方向向量( o,p,q )
x = o*t+a
y = p*t+b
z = q*t+c
可以求入射向量的反方向向量(-l, -m, -n )关于法向量( o, p, q )的对称向量
令ol + pm + qn = A, o^2 + p^2 + q^2 = B
对称向量为(-2Ao/B+l, -2Ap/B+m, -2Aq/B+n), 又已知入射点(a,b,c),所以易得反射光线。