目录
光照模型
光线分类
将光线简单分成三类:镜面反射、漫反射、环境光。
泛光模型
泛光模型只考虑环境光的影响:
其中是物体表面对环境光的反射率,是入射环境光的亮度。
这个模型只能得到物体的平面结构,但体现体积感还需要添加下面的漫反射模型。
Lambert漫反射模型
漫反射指的是光从一定角度入射之后,从这个点向四面八方反射,且各方向反射的光的强度相等。
模拟漫反射首先考虑入射光的角度:
入射角度越倾斜损失的能量越大,应该将光强乘上,其中是入射光方向,为平面法线方向。
光源与照射点的距离也需要考虑,离得越近强度越大。得到以下公式:
为漫反射系数,为入射光强,取max是为了剔除夹角大于90°的光。
将泛光模型和漫反射模型结合,可以得到如下结果:
观察图片,加上高光才会更真实,所以需要用到反射模型。
Phong反射模型
在Phong反射模型中会考虑镜面反射角度与观察角度的夹角:
其中为镜面反射系数,添加指数p的原因是加速衰减。
将以上的模型累加得到结果:
对计算反射方向与人眼观察方向角度进行优化,就有了下面的Blinn-Phong反射模型。
Blinn-Phong反射模型
避免计算反射方向,为此引入新的矢量:半程向量,对和取平均后再归一化来得到:
这种方法的优点是加速了角度计算,提升计算的效率,具体来说,算出的近似角度是正确角度的一半。
总结上面的几种光照:
着色方法
在光照模型中涉及法线向量,法线可能对应三角形面,也可能对应顶点。这涉及到了着色频率的问题,可以分类为面着色、顶点着色、像素着色,即是三种不同的着色方法。
Flat Shading
以一个面作为着色单位,利用每个面的法线向量进行一次Blinn-Phong反射光照模型的计算,将颜色赋予整个面,效果如下:
计算很快,但是效果很差。
Gouraud Shading
Gouraud Shading对每个三角形的顶点进行着色,顶点法线计算方法是将所有共享该点的面法线向量相加求均值,再标准化。对于三角形内部的点,利用重心坐标(参考链接)来插值得到它的颜色:
、、是三个顶点的颜色,、、是三角形内一点的重心坐标。
可见对顶点计算,效果有明显提升。
Phong Shading
Phong Shading对上面的方法进行了改进,通过插值法线来真正对每一个点都进行光照模型的计算:
得到每个点的法线后,再进行Blinn-Phong模型计算,效果对比如下:
不同精度下的对比:
透视矫正插值
在屏幕空间进行重心坐标插值会有误差(因为经过了变换),所以需要透视矫正插值来确保插值正确。
参考笔记: