1.局部光照模型

光线的简单分类:

  • 镜面反射

  • 漫反射

  • 环境光

1.1 泛光模型

泛光模型即只考虑环境光,这是最简单的经验模型,只会去考虑环境光的影响,并且不会去精确的描述,而只是用一个简单的式子表示:

image-20231130091038413

image-20231130091806017

1.2 Lambert漫反射模型

  • 在泛光模型的基础之上增加了漫反射项

    • 每个不同方向反射的光的强度相等
    • 产生漫反射的原因是物体表面的粗糙
  • 漫反射光照强度与光线照射方向和表面法线之间的夹角余弦成正比

    注:漫反射与观察方向无关,光线照射方向和表面法线之间的夹角反应了对于光照的接受率

  • 公式表示:

    image-20231130091906700

image-20231130091824267

1.3 Blinn-Phong反射模型

Blinn-Phong反射模型是Phong光照模型的一种改进,在模拟高光方面表现更为自然。

image-20231130092346846

注:$k_s$为镜面反射系数, I为入射光强, r为光源到入射点距离,指数p加速衰减(用于减小可以看到高光的角度)

image-20231130092850361

注:使用半程向量简化了反射向量与人眼观察夹角的计算(Phong光照模型,即下图中R与v的夹角的计算)

image-20231130092457821

整体计算公式:

image-20231130092944573

注:L=泛光(环境光)+漫反射项+高光

image-20231130093045061

2.着色方法(频率)

2.1 Flat Shading(面着色)

模型数据大多以很多个三角面进行存储,因此也就记录了每个面的法线向量,利用每个面的法线向量进行一次Blinn-Phong反射光照模型的计算,将该颜色赋予整个面。

效果如下:

image-20231130093503703

2.2 Gouraud Shading(顶点着色)

Gouraud Shading会对每个三角形的顶点进行一次着色

点法线:将所有共享这个点的面的法线向量加起来求均值,最后再标准化

三角形内部的每一个点:利用重心坐标来插值

重心坐标:给定的三角形ABC和其中的一个点P,其重心坐标$(w_a,w_b,w_c)$满足以下条件:

  • $w_a+w_b+w_c=1$
  • $P=w_a⋅A+w_b⋅B+w_c⋅C$

重心坐标可以通过面积的比值求出:

image-20231130134307989

注:三角形的重心为(1/3,1/3,1/3),其将三角形分为了面积相等的三份。

重心坐标一般的表达式:

image-20231130134715691

重心插值公式如下:

$P_{interpolated}=w_a⋅P_A+w_b⋅P_B+w_c⋅P_C$

注:$P_A、P_B、P_C$分别是三个顶点上的属性值

image-20231130094402265

注:重心坐标经过投影之后可能会改变,在三维空间中插值一些属性时,要计算三维空间中重心的坐标。

2.3 Phong Shading(像素着色)

要对每个点都进行光照计算,三角形内部的每一个点的法线向量如插值颜色一样得到:

image-20231130094638524

注:$n_0,n_1,n_2$分别是三角形三个顶点的法线向量,α,β,γ为三角形面内点的重心坐标

image-20231130094743068