常用术语

直接光照(Direct light)

间接光照(Indirect light)

兰伯特光照模型(Lambert)

半兰伯特光照模型(Half Lambert)

Phong光照模型(Phong)

Blinn光照模型(Blinn)

自发光(Emissive)

高光反射(Specular)

漫反射(Diffuse)

环境光(Ambient)

光泽度(Gloss)

反光度(Shininess)

逐像素光照(per-pixel lighting)

逐顶点光照(per-vertex lighting)& 高洛德着色(Gouraud shading)

菲涅尔反射(Fresnel reflection)

各项同性(Isotropic)

各项异性(Anisotropic)

环境光

在局部光照模型中,由于没有考虑间接光照的影响,因此为了处理间接光照,为光照模型引入环境光

通常使用漫反射的反射率来指示环境光照的反射光量,模型假定场景中发生多次散射和反射,并在所有方向上均等射向目标物体。

自发光

物体自身发射的光线,通常作为单独的一项加入光照模型,一般使用一张发光贴图描述物体的自发光。

兰伯特漫反射

反射光线的强度与表面法线和光源方向之间的夹角的余弦值成正比

漫反射效果与观察者位置无关,与光源放心有关

反射

镜面反射

通常使用对应的反射贴图描述物体表面的反射率,并且使用光泽度(粗糙度,反光度)描述高光范围的大小。

高光反射描述了光线与物体表面发生的反射(光强不变,方向改变)

  • 其中gloss表示材质的光泽度
  • specular表示材质的反射光
  • r表示反射光线
  • v表示视线向量
光泽度越小,圆锥底面越大
光泽度越大,圆锥底面越小
不同光泽度下的高光效果

Phong模型

Phong模型是第一个有影响力的光照模型,考虑直接光照的反射作用使用环境光代替间接光照。

  • A light环境光量
  • C light 入射光量
  • diffuse 漫反射率
  • specular 镜面反射率
  • l 指向光源入射光向量
  • n物体表面法线
  • r 反射向量
  • gloss 光泽度控制高光反射区域

Blinn-Phong模型

Blinn-Phong模型不再依赖于反射向量,而是采用了所谓的半程向量(Halfway Vector),即光线与视线夹角一半方向上的一个单位向量。当半程向量与法线向量越接近时,镜面光分量就越大。

Phone模型和Blinn-Phone模型的区别

通过对Phone模型的公式和Blinn-Phone模型公式的对比,可以知道公式的不同之处在于使用了半角向量与法线的点积代替了反射向量与视线的点积结果。

半角向量的使用带来了什么变化?

  • 计算更加简洁,半角向量比反射向量的计算更加简洁。
  • 通过对Phone模型的公式和Blinn-Phone模型公式的对比,可以知道公式的不同之处在于使用了半角向量与法线的点积代替了反射向量与视线的点积结果。
  • 计算更加简洁,半角向量比反射向量的计算更加简洁
  • 当光源与视线都在物体表面之上时,半角向量与法线的角度永远不大于90。设想一种情况,当材质的反光度非常低,因此物体的被光线照射的大部分区域都会发生高光反射。这些区域中一部分高光部分的反射向量与视线的夹角超过了90度。如果使用Phone模型就会导致高光区域一部分发生缺失。这是由于phone模型只考虑视线与光照分布在法线两侧的情况。当视线与光照在法线同侧时且高光反射对亮度有较大影响时,就会发生断层。

Gourand模型

Gourand模型是以顶点为单位计算光量在通过插值得到每个像素点的光亮度。

在表现物体光滑性上有比较好的表现,但值不再是线性变化的时候,比如镜面高光,由于线性插值导致内插值不可能大于顶点值。因此高光只能出现在顶点。

由于使用的颜色插值,会导致镜面高光蔓延到周边

Gourand的漫反射效果

Flat模型

面着色模型,计算多边形的单个强度,每个三角形只有一个法线方向。以相同的光强度值显示多边形的所有点。通常适用于lowPoly风格的场景

光照模型展示

总结

  • Lambert模型只考虑表面的漫反射部分。
  • Phong模型能够较好的呈现镜面高光的效果,也是四种模型中最接近真实的效果,需要计算较复杂的反射向量。
  • Blinn-Phong模型效果与Phong模型相近,更偏向艺术性的效果,使用方便计算的半程向量代替较为复杂的反射向量,计算量小于Phong,是效果和效率的最佳选择,也是大多数情况下的默认光照模型。
  • Gourand模型计算顶点光照并通过增量法插值计算多边形内部的光强,当顶点密度低时,表现效果很差,对于高光的效果也不尽如意,计算量较小。

相关资料:

《unity shader入门精要》

https://learnopengl-cn.github.io/02%20Lighting/02%20Basic%20Lighting/

https://www.bilibili.com/video/BV1B54y1j7zE?share_source=copy_web

https://zhuanlan.zhihu.com/p/49474631

最后更新于 2021-11-12