需要理清的概念:兰伯特,半兰伯特,冯模型,布林冯模型
高光反射specular,代表物体表面反射光线。漫反射diffuse,代表吸收然后散射出表面的光线。
环境光ambient,自发光emissive,
漫反射
漫反射从任何方向看都是一致的,漫反射只依赖于入射光线和顶点(像素)法线。
Lambert模型:漫反射点颜色 = (光照颜色强度*表面漫反射颜色)Max(0,dot(表面法线,顶点直线光源的矢量))
高光反射
反射矢量R,可以通过,表面法线N,光源矢量I(和入射方向相反)计算。R = 2*dot(N,I)*N - I
Phong模型,是一种高光反射模型
Phong模型:高光反射颜色 = (光照颜色强度*表面高光反射颜色)pow(max(0,dot(视角矢量V,反射矢量R)),高光反光度)
高光反射度,用来控制亮斑区域,高光反射越大,亮斑越小。
Blinn,提出一种新向量H,H为normal(V+I),经验表明,dot(视角矢量V,反射矢量R)与dot(表面法线N,布林向量H)取值类似,所以用后者代替前者得到布林冯模型。
Blinn_Phong模型:高光反射颜色 = (光照颜色强度*表面高光反射颜色)pow(max(0,dot(表面法线N,布林向量H)),高光反光度)
布林冯的好处:1避免反射的计算,减少了一次点乘的计算,即一次矩阵乘法。2在极远处,V,I是定值,所以H也是定制,可以继续节约计算。
逐像素和逐顶点
逐像素光照也称冯着色PhongShading,逐个顶点光照也称高诺德着色GouraudShading。顶点着色之后的像素颜色依赖于线性插值,对于非线性的高光反射,看起来会有明显棱角。