一、漫反射和Lambert
对于粗糙物体表面的一点,其亮度应该和入射光线与该点的垂直程度相关,也就是入射光线与此点法线的夹角相关。
l表示入射光,n表示该点的法向量,C表示光线的强度和颜色。
为单位向量,
按照这种方式对物体进行照明计算的模型叫Lambert光照模型
二、镜面高光和Phong
对于光亮的物体表面的一点,其亮度应该和入射光线形成的反射光线与观察视线夹角相关。
l表示入射光,n表示该点的法向量,R表示反射光线,v表示观察视线,C表示光线的强度和颜色。
r,v夹角=0,cos值=1;夹角>0,cos值<1,则p次幂使R,v夹角cos值迅速趋向0,表示若R,v角度相差一点,就会看不到高光的反射。
反射向量R,可以通过CG函数
求出,通过推导得
三、半角向量和BlinnPhong
BlinnPhong是Phong的改进,因为Phong需要进行两次点乘运算,而半角向量只需要一次点乘运算。
l表示入射光,n表示该点的法向量,v表示观察视线,h表示半角向量,C表示光线的强度和颜色。
四、注意点
1、所有计算的向量都需要单位化,保证计算的正确性。
2、所有向量需要在同一个坐标系中进行计算,或者世界坐标系,或物体坐标系,(通过矩阵的乘法进行转换)
3、法向量在非等比缩放的坐标系转换中,已知法向量N,该点平面上的一个向量T,坐标系转换矩阵M
通过已知,得
在等比缩放情况下 矩阵
在非等比缩放情况下,存在一个矩阵G,使得
且使得
已知
,要使得式1成立,则
,得
所以当且仅当
,才会使得法向量N经过坐标系变换之后,依然垂直于
参考资料:
《ShaderLab开发实战详解》
GAMES101-现代计算机图形学入门-闫令琪