环境光遮蔽
一种渲染技术,模拟环境光在缝隙、角落和物体接触面被遮挡的效果,通过添加细微阴影增强深度感和空间真实感。
环境光遮蔽 (Ambient Occlusion, AO) 是一种全局光照近似技术,用于计算场景中每个点接收环境光的程度。在凹陷处、角落和物体紧密接触的区域,环境光被周围几何体遮挡,形成柔和的阴影;而开阔表面则较为明亮。这种效果虽然微妙,却能显著提升画面的深度感、空间真实感和物体的接地感。
AO 的核心思想是:对表面上的每个点,向半球方向发射采样射线,统计被几何体遮挡的比例。遮挡率越高,该点越暗。
- 光线投射方式:从每个表面点向半球发射射线并计算遮挡比例。射线数量越多精度越高,但计算成本也随之增加。离线渲染通常使用 256-1024 条射线
- SSAO:屏幕空间环境光遮蔽,2007 年由 Crytek 在《孤岛危机》(Crysis) 中首次实现。仅使用深度缓冲近似计算邻近遮挡,可实时处理,但存在无法考虑画面外信息的局限,是游戏中最常用的方案
- HBAO+ / GTAO: SSAO 的改进版。NVIDIA 的 HBAO+ 采用基于水平方向追踪的计算提升精度、减少伪影;GTAO (Ground Truth AO) 则以更低的成本实现物理上更准确的结果
- 烘焙 AO(纹理烘焙):将预计算的 AO 信息烘焙为纹理贴图。适合静态物体,运行时成本为零,质量最高但不支持动态场景。可用 Substance Painter 或 Blender 的 Cycles 生成
- 光线追踪 AO:使用硬件加速光线追踪,兼顾质量和实时性
游戏开发中通常将 SSAO 系列的实时方法与烘焙好的 AO 贴图组合使用。Unreal Engine 5 的 Lumen 会把 AO 作为全局光照的一部分自动计算。AO 强度过高会显得不自然发暗,一般推荐以 0.5-0.8 左右的系数相乘。
在 2D 图像处理中,AO 的概念被应用于为平面元素添加接触阴影,增强层次感。Web 设计中的 box-shadow 和 drop-shadow 在视觉上模拟了类似的遮蔽效果。