Unity Shader Lambert光照模型与漫反射
一、漫反射简介
一束平行光入射到凹凸不平的表面上,光线被反射向四面八方的现象叫做漫反射。
当一束平行光触及光滑物体表面时,光线则发生规律性反射,反射后的光线也相互平行,这种规律性反射称为光的单向反射或镜面反射。但物体的光滑程度是相对的,而一般物体的表面多粗糙不平,入射线虽然为平行光线,但反射后的光线则向各个方向分散,此种现象为光的漫反射。
现实中的物体,如植物、墙壁、衣服等,其表面粗看起来似乎是平滑,但用放大镜仔细观察,就会看到其表面是凹凸不平的,人眼之所以能看清物体的全貌,主要是靠漫反射光在眼内的成像。
漫反射的特点
- 光照强度与观察角度没有关系
从各个角度观看灯光时,它都具有相同明显的强度 - 光照强度跟灯光的入射角有关系
如果改变光的入射光方向可以看到模型表面的光照强度发生了变化
二、漫反射光照模型-Lambert(兰伯特)光照模型
lambert光照模型属于经验模型,主要用来简单模拟粗糙物体表面的光照现象
此模型假设物体表面为理想漫反射体(也就是只产生漫反射现象,也成为Lambert反射体),同时,场景中存在两种光,一种为环境光,一种为方向光,然后我们分别计算这两种光照射到粗糙物体表面所产生的光照现象,最后再将两个结果相加,得出反射后的光强值。
首先是计算环境光的公式:
I_inDirectionDiffuse = K_d * I_a;
其中,K_d为粗糙物体表面材质对光的反射系数,这个系数由程序编写者在宿主程序中给出,I_a为环境光的光强,也就是环境光的颜色数值,一般是一个float3型的变量
然后是计算方向光的公式:
I_directionDiffuse = K_d * I_l *