着色,顾名思义就是给物体上色。在计算机图形学中,着色就是确定物体上或者图形上的每个像素的颜色。
像素或者物体表面的颜色受光照和材质的影响,光照中光线的颜色一定程度上决定物体表面的颜色。而物体的材质决定物体对光线中不同颜色分量的反射率。反射率越高,相应的颜色分量占比越大。
就拿头发染色来说,如果头发没有进行任何染色,那么头发的材质就不会反射任何光线,所以,看到的颜色就是黑色的。如果对头发进行染色后,头发的材质发生了变换,导致头发会反射阳光中一定的颜色分量,最终合成出来棕黄色的光,那么我们看到的头发颜色就是棕黄色。
再比如金属和木头,金属表面材质较为光滑,就会出现高光效果,而木头表面较为粗糙,就没有高光效果
如上图所示,Blinn-Phong光照模型将光线分为三种:高光或者镜面反射光、漫反射光和环境光;而Blinn-Phong光照模型的最终结果就是将这三项进行叠加
其中,ka为物体表面对环境光的反射率,则Ia为环境光的强度(可以理解为光线中RGB三种分量的大小)。反射率越高,最终人眼接收到的环境光强度La就会越大
如果只有环境光模型,那么最终物体表面的颜色只是个统一的值,没有深度的变化,如下图所示
首先先说下平方反比定律:如果将物体和光源之间的距离加倍,它会照亮比以前大四倍的表面区域。
然而,较大的表面积导致光强度与距离的平方成反比,因为相同量的光必须分别分布在较大的表面区域上。因此,我们看到光线衰减,意味着光强度的降低。
因此,为了表示四面八方的漫反射光线强度,用一个一个圆形来表示光线的强度
光线的强度或者亮度有了,但是,这些强度或者亮度有多少能被物体表面接收呢,这里可以通过兰伯特定律来计算被接收的光线强度和亮度
如上图所示,当光线垂直射向物体表面,接收到的光线亮度或者强度是100%,当光线和物体表面成角60度时,原来的六根光线只有三根光线被接收到,原因是因为物体表面的法线向量和入射方向的夹角为60,cos60*6就是三根光线。因此,接收到的光线的亮度或者强度与入射光线与平面法线的夹角有关。
负数没有物理意义,所以保证入射光线与平面法线的点积必须大于0
到此,再乘以物体表面的反射率,就可以得到最终物体表面的亮度,所以,物体表面的漫反射亮度为
根据入射光线和法线向量,可以得到反射光想的方向,根据反射光线的方向与视角方向的夹角计算人眼接收到光线的强度,这种高光模型称为phong模型
blinn对该模型进行了改进,根据光线方向和视角方向引入了半程向量,如下图所示,半程向量与法线向量的夹角的cos就间接表示了视角和反射光线的夹角的cos
之所以要加一个指数项,也是为了符合人们的直觉,可以这样想,比如当我们用镜子去晃别人的眼睛,镜子稍微偏转几度,就可能让被晃的人感觉光线强度变化很大,所以,加了一个指数,就是让角度稍微一变化,光线强度就会由剧烈的波动,cos的指数函数图如下
Blinn-Phong高光模型的ks和p变化时,物体表面的高光强度变化如下
至此,Blinn-Phong光照模型就可以写成环境光、高光和漫反射的和;
参考:
GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibili
欢迎大家评论交流,作者水平有限,如有错误,欢迎指出