环境光遮蔽
一种渲染技术,模拟环境光在缝隙、角落和物体接触面被遮挡的效果,通过添加细微阴影增强深度感和空间真实感。
环境光遮蔽 (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 强度过高会让缝隙显得不自然发暗,因此强度宜控制得较为克制;0.5-0.8 左右的系数是其中一种设置示例。
在 2D 图像处理中,AO 的概念被应用于为平面元素添加接触阴影,增强层次感。Web 设计中的 box-shadow 和 drop-shadow 在视觉上模拟了类似的遮蔽效果。