自发光,高光反射,漫反射,环境光

环境光

  • 使用环境光来近似模拟间接光照
  • $c_{ambined}=g_{ambient}$

自发光

  • 直接由光源发射入摄像机,直接使用材质的自发光颜色
  • $c_{emissive}=m_{emissive}$
  • 在实时渲染中,自发光的表面不会照亮周围(不会被当做光源)

漫反射

  • 视角的位置不重要,在任何反射方向的分布都是一样的
  • 入射光的角度很重要
  • 符合兰伯特定律:反射光线的强度与表面法线和光源方向的夹角的余弦值成正比。
  • $c_{diffise}=(c_{light}*m_{diffuse})·max(0,\hat{n}·\hat{l})$
  • n:法线,l:指向光源方向,c:光源颜色,m:物体漫反射颜色,max截取到0,防止被背面的光照亮。

高光反射

Phong模型

  • 用来计算完全镜面反射方向被反射的光线

  • $c_{specular}=(c_{light}·m_{specular})·max(0,\hat{v}·\hat{r})^{m_{gloss}}$

  • mgloss是材质的光泽度,也叫反光度,用来控制高光区域的大小,值越大,点越小。mspecular是高光反射颜色,用来控制高光反射的强度和颜色。同样也要用max截取。$\hat{v}$是视角方向,$\hat{r}$是反射方向。

Blinn-Phong模型

  • 使用$\hat{v}$和$\hat{l}$的中间方向$\hat{h}$和法线$\hat{n}$的夹角代替$\hat{v}$和$\hat{r}$的夹角
  • $c_{specular}=(c_{light}·m_{specular})·max(0,\hat{h}·\hat{n})^{m_{gloss}}$
  • 计算量小,且效果影响不大,被广泛运用。

着色方式

  • 逐像素:在片元着色器当中计算

    Phong着色:通过对顶点法线进行插值得到片元的法线的方式

    计算量小,有非线性运算(高光),会出问题

    片元内部颜色暗于顶点最高颜色,容易出现棱角现象。

  • 逐顶点:在顶点着色器中计算

    高洛德着色:在顶点上计算光照,在片元中线性插值得到颜色

    计算量大,但不易出错