光照模型
着色是渲染管线中的核心任务,光照模型是光栅化管线中着色技术的核心原理。光照模型通过考虑光源特性、物体表面材质属性以及观察视角的相互关系,来模拟光照照射物体模型的表面时,物体应当具有的颜色。
着色频率
着色频率决定了法线采样的位置和频率。Flat Shading 对每个三角面片使用统一法线(面片法线通过顶点位置叉积计算)导致面片感强烈,适合低多边形艺术风格。Gouraud Shading 在顶点处计算光照后使用重心坐标插值光照强度到内部像素,但无法正确处理高光且会导致马赫带效应。Phong Shading(注意与 Phong 反射模型区分)对每个像素插值法线后独立计算光照,通过双线性插值获得像素级法线,能获得最平滑效果但计算量最大,是现代 GPU 的默认选择。
Blinn-Phong 反射模型
Blinn-Phong (布林冯)模型是一个被广泛使用的经典光照模型理论,是当今光栅化管线的奠基理论。
Phong 反射模型
传统 Phong 模型首先计算反射向量,其中
然后计算反射向量与视线方向
指数
Blinn-Phong 改进
Blinn 提出使用半程向量:
替代反射向量,高光项改为:
半程向量是光线和视线角平分线方向,当视线与光线关于法线对称时与反射向量相同。该改进省去了反射向量计算,仅需一次向量加法和归一化,在高光指数较大时计算效率提升明显。完整的 Blinn-Phong 光照公式为:
其中
能量不守恒问题
Phong 和 Blinn-Phong 模型都存在能量不守恒的问题,当
PBR 理论
基于物理的渲染(PBR)通过微表面理论、能量守恒和菲涅尔效应来保证渲染结果的真实性,使得材质在不同光照环境下表现一致。是现代引擎(如 UE5、Unity)的实现标准。
微表面理论
微表面理论认为宏观表面由无数微小的镜面组成,每个微镜面都是理想的光滑反射镜。微镜面的法线方向服从某种概率分布,粗糙度描述了法线分布的离散程度,粗糙度越高意味着微镜面法线方向越分散。当表面越粗糙时,微镜面之间相互遮挡和阴影效应越明显,这是高光在掠射角下衰减的主要原因。
菲涅尔效应
菲涅尔效应描述了反射率随观察角度变化的物理现象,垂直观察时反射率最低,随着观察角度增大反射率逐渐上升至 1。完整的菲涅尔公式需要考虑材质的折射率,实时渲染中常用 Schlick 近似:
其中
能量守恒
能量守恒要求出射光能量不能超过入射光能量,对于不透明材质意味着反射率和透射率之和为 1。在 BRDF 建模中体现为漫反射和镜面反射的能量分配,镜面反射越强的材质漫反射越弱,金属几乎全部能量都用于镜面反射因此没有漫反射项。
BRDF 双向反射分布函数
BRDF 定义为:
描述了给定入射光照方向
BRDF 性质
有效的 BRDF 需要满足:线性性允许叠加多个光源的贡献,能量守恒要求:
亥姆霍兹互易性
其中
漫反射 BRDF
理想的朗伯漫反射 BRDF 是常数:
其中
Cook-Torrance 镜面反射 BRDF
Cook-Torrance 模型将镜面反射 BRDF 分解为三项:
分母中的几何项修正了微表面面积与宏观表面积的差异。
法线分布函数 D
Beckmann 分布:
基于高斯分布假设,
GGX 分布(也称 Trowbridge-Reitz):
的长尾特性更好,能产生现实中观察到的明亮高光周围柔和的衰减效果。
Blinn-Phong 分布:
计算简单但长尾效果不如 GGX,
几何遮蔽函数 G
Smith 函数是现代 PBR 中的主流选择,将几何项分解为:
对于 GGX 分布,Smith 函数的解析形式为:
该公式在粗糙表面时能有效模拟遮挡效应。更精确的 Smith 相关函数还考虑了入射光和出射光的相关性,但计算复杂度更高。早期的 Blinn 函数:
通过取三个值的最小值来近似,计算简单但不够准确。
菲涅尔项 F
Schlick 近似:
是实时渲染中的标准选择,其中:
是垂直入射时的反射率。对于导体(金属),
各向异性反射
各向异性 BRDF 考虑了表面存在方向性纹理(如拉丝金属、头发、布料)时反射特性的变化。这类材质需要定义切线方向
当