Blinn-Phong反射模型
Blinn-Phong反射模型为环境光、漫反射和镜面反射的相加
镜面反射
一般而言,对于镜面反射,我们会认为观察的角度与出射角的方向越接近,观察到的方向越亮,而Blinn-Phong模型将其转换为半程向量(入射角与观察角夹角的一半)与法线的方向,简化了计算
上图中Ls公式中的p为指数,引入该指数是为了使观察到高光的角度变小,更加符合实际情况,一般p会取值为100-200
如下图,随着p越来越大,能观察到的高光变得越来越小,印证了上述结论
环境光
由于环境光过于复杂,我们粗浅将各物体接收到的环境光看作一个常数(这并不对),由于环境光的存在,图像上不会存在全黑的部分
着色频率
如图,对相同的模型采用不同频率的着色,第一个为对每个面做一次着色,第二个为对每个顶点做一次着色,第三个为对每个像素做一次着色
Flat Shading
对每个三角形做着色,如上图,效果并不好
Gouraud Shading
对每个顶点着色,效果优于对三角形着色
Phong Shading
对每个像素着色,与Blinn-Phong模型不是同一个
可以看出,当面足够多足够复杂时,使用Flat Shading也能有不错的效果
如何计算顶点的法向量
对于基础几何,例如一个球,其表面顶点的法向量较为容易计算,而对于不规则的模型,我们可以参考顶点周围的面,对周围面的法向量求平均以得到顶点的法向量,公式如上图
如何计算像素的法向量
在得出顶点法向量之后,可以使用重心插值的方法得出像素的法向量
图形管线(实时渲染管线)
从一个场景到最后的图片这中间的过程,就叫做管线
输入为在3D空间中的点,将点映射在屏幕上,组成三角形,对三角形光栅化,对离散后的三角形进行着色,得到最后的输出
推荐网站
纹理映射
任何三维物体的表面都是二维的,如上图,纹理就是一张图,将纹理贴在三维物体的表面,就是映射
纹理坐标系
每个三角形顶点都被分配一个纹理坐标,一般而言,都默认uv的范围都在0-1之内
纹理可以被多次使用,而像上图那样可以无缝衔接的纹理,称之为tiled texture