# 定义

对于一个表面定义以下单位向量
法线方向 n\vec{n}
指向光源方向 l\vec{l}
指向观察方向 v\vec{v}
半程向量 h=v+lv+l\vec{h}=\frac{\vec{v} +\vec{l}}{\left \| \vec{v} +\vec{l} \right \| }
表面属性若干

# Blinn-Phong 模型

近似的经验模型
有三个参量
相加为最终结果

# 漫反射

Ld=kdIr2max(0,nl)L_{d} = k_{d}\frac{I}{r^{2} } max(0,\vec{n}\cdot \vec{l})

LdL_{d} 着色结果
kdk_{d} 为漫反射系数,可以是表面颜色、漫反射程度等
r 为观察者与表面在 v\vec{v}方向的距离
可知漫反射与观察方向无关

# 高光反射

Ls=ksIr2max(0,nh)pL_{s} = k_{s}\frac{I}{r^{2} } max(0,\vec{n}\cdot \vec{h})^{p}

kdk_{d} 为 镜面反射系数系数
p 为高光大小,一般在 100~200

# 环境光

La=kaIaL_{a} = k_{a}I_{a}

IaI_{a} 为常数,假设环境光相同

# 着色频率

现在我们已经知道如何对一个表面单位进行着色
对于不同的方法取定义一个表面的单位,对应着不同的着色频率
主要为以下三种
对每个三角面进行着色
对每个顶点进行着色,顶点法线为周围面法线的平均,表面颜色又为顶点颜色的插值
对每个像素进行着色

# 阴影

对于阴影的实现,光栅化算法中主要只能实现点光源的硬阴影
实现思路如下
由于一个像素被渲染为阴影的充要条件是相机看得到而光源看不到,不妨以光源为摄像机光栅化场景并应用深度缓冲只记录深度值,在真实相机光栅化时,对于可见的像素,根据原本的世界空间坐标转化为光源摄像机的视图空间,也就是得到它在光源摄象机下的深度值并比较,由于浮点数的精度问题,难以比较,所以一般是设定一个 bias(偏差)之后大于深度为阴影等方法处理