着色(Shading),有些地方亮些,有些地方暗些,有些地方有颜色,有些地方没颜色。我们给它的定义是给不同物体应用不同材质的过程。
最简单的着色模型:Blinn-Phong 反射模型。
下图分别表示镜面高光、漫反射和环境照明(间接光照)。
我们现在考虑光照是考虑任何一个点上,即 shading point 这个点它的着色结果是多少。定义观察方向 v、法线 n、光照方向 l。既然定义的都是方向,那么这些向量都是单位向量。
着色跟阴影没关系,我们不考虑这个点是不是在阴影内,我们只看这个点跟光照和观察角度的关系,不考虑其他物体的存在,是局部发生的事情。
漫反射:一束光线打到一个物体表面某一点,光线会被均匀地反射到各个不同的方向。
之前的图像也可以看到,同样的光以不同的角度照上去,得到的明暗是不一样的。这是为什么呢?
假如光是离散的,我可以用一根根光线来表示照射,每一根光线代表了固定的能量。第一幅图物体表面与光线垂直,可以接收到所有的 6 根光线,而第二幅图转动了 60° 就只能接收到 3 根光线了,也就是说,这时候物体表面就应该暗一点。推广到任意角度就得到右边的方程,Lambert 余弦定律。
也可以联想到我们地球上为什么有四季之分,也是因为阳光的直射的角度不同,当南半球是夏天的时候北半球是冬天。
点光源光照的衰减。当距离点光源距离是 1 的时候,定义光的强度为 I,当它传播到距离是 r 的时候,光强为 I / r2。
假设我们知道了一个点光源,然后我们又知道 shading point 离点光源有多远,那我们就知道有多少的光传播到 shading point 附近。我们又知道有多少的光会被 shading point 吸收,那我们结合起来,就知道最后漫反射(Diffuse)能看到多少明暗了。
为什么有个 max(0, n*l),因为两个向量点乘如果小于零,我们就认为没有什么物理意义,光线穿过物体表面,打到下面的材质,这里也没有折射的什么事,所以直接令其为 0。
系数 kd 表示有多少光线被物体表面给吸收了,即反射率,如果 kd=0,光线打到物体表面所有光线都被吸收了,没有能量反射出去,那就是黑色了。
在漫反射下,与观测的方向 v 完全没有关系,你从任何角度上看这个着色点都是一样的明暗,从右边的式子上也是如此。