【技术美术】光照模型
本文最后更新于 2025年5月7日 晚上
【技术美术】光照模型
光照模型实际就是用于计算光照效果的方法,发展至今已有多种光照模型可用。
光照类型
从来源分类
- 直接光:直接来自光源的光。
- 间接光:通过其他表面反射的光。
从组成分类
- 漫射光:光在粗糙的表面进行多次反射后再反射进眼睛的光。
- 镜射光:光在光滑表面进行一次反射后直接反射进眼睛的光。
- 环境光:从其他物体表面反射的光照在物体上后再反射的光。
- 次表面散射:光通过一些半透明的物体内部后再反射进眼睛的光。
光照模型类型
从计算范围分类
- 局部光照模型:只计算直接光,或环境光等直接打在物体上的光照效果。
- 全局光照模型:在局部光照模型基础上,还会考虑光折射反射后打在物体上的效果。
从计算原理分类
- 经验模型:基于人们对光照现象的直观感受,用经验编写的公式来模拟光照。
- PBR 模型:基于物理的渲染方式(Physically-Based Rendering),这类模型基于真实的物理现象和公式演化而来。相较经验模型,拥有更真实的呈现效果和物理正确性。
从着色风格分类
- Gouraud:为每一顶点计算光照,再通过插值的方式得出最终效果。
从函数类型分类
-
BRDF(双向反射分布函数):
用于计算入射光与反射光关系的函数,即计算漫射光和近射光等从物体表面直接反射的光的函数。是常见游戏引擎中所使用的利用光栅化计算的光照模型。
-
BTDF(双向投射分布函数):
用于计算入射光与投射光关系的函数,即计算透过物体内部再折射出的光(次表面散射)的函数。
-
BSDF(双向散射分布函数):
BRDF 和 BTDF 的超集,是既计算反射光也计算折射光的函数。是常见图形软件中烘焙灯光时所使用的光照模型。
主流光照模型
Lambert
https://en.wikipedia.org/wiki/Lambertian_reflectance
1760 年提出,是只考虑了漫射光的简单模型,其通过点乘模拟漫射强度的思想,奠定了后续光照模型的基础。
- 光照信息
- :表面对每单位漫射光的反射率(不考虑衰减)。
- :表面接收到的灯光 m 的漫射光(不考虑角度衰减)。
- 方向信息
- :表面法线。
- :表面到灯光 m 的方向。
Phong
https://en.wikipedia.org/wiki/Phong_reflection_model
1975 年提出,是一个完整的局部光照模型,在 Lambert 的基础上还考虑了环境光和镜射光。
- 光照信息
- :表面对每单位漫射光的反射率(不考虑衰减)。
- :表面对每单位镜射光的反射率(不考虑衰减)。
- :表面对每单位环境光的反射率。
- :表面接收到的灯光 m 的漫射光(不考虑角度衰减)。
- :表面接收到的灯光 m 的镜射光(不考虑角度衰减)。
- :表面接收到的环境光。
- 方向信息
- :表面法线。
- :表面到灯光 m 的方向。
- :表面到相机方向。
- 其他参数
- :光泽度
可以看出 Phong 模型中,漫射光系数采用与 Lambert 一致的方式,比较特别的是增加了镜射光,其镜射系数计算公式为:
Blinn-Phong
https://en.wikipedia.org/wiki/Blinn–Phong_reflection_model
一个改进版的 Phong 模型,对其镜射光的计算方式进行了调整,有更高的计算效率和更好高光效果,是过去很多图形接口的内置光照模型。
Blinn-Phong 和 Phong 的区别在于,其对镜射系数的计算方式上做了修改:
这种方式改用半角向量点乘法线来得出镜射强度,相比原版,高光边缘会更清晰真实,不过光斑范围会变大,因此需增强光泽度系数。
CookTorrance
https://graphicscompendium.com/gamedev/15-pbr
1982 年提出,相比前几代的经验光照模型,由于其是基于真实物理现象设计(PBR 模型),因此拥有更真实的呈现效果和物理正确性,如今更是被广泛使用。
由于 CookTorrance 过于复杂,详细信息见文章“基于物理的渲染”。