UPL9-14——光照探针
UPL9-14——光照探针
光照探针
上一篇提到的光照烘焙,主要是为静态物体服务的,静态物体的光照信息直接烘焙进了光照贴图中
而动态物体由于自身会不停移动,受光影响的结果是不能直接烘焙进贴图的,所以烘焙光照无法作用于动态物体上
如果需要让动态物体收到直接光照,可以将光源改为 Mixed 模式,不过动态物体依然不能受到间接光的影响
而光照探针(Light Probe)可以用于解决 烘焙光源产生的间接光不能作用于动态物体 的问题,它让动态物体在场景中通过插值获得周围环境的间接光信息
间接光照(Indirect Lighting)是由光线在场景中经过一次或多次反射后,再照射到物体表面的光照
举例:
- 灯直接照在桌面上为 直接光照
- 桌面反射的光线照亮了墙壁、天花板为 间接光照
- 墙壁又反射出微弱的光照亮房间阴暗处为 多次间接光照
注意
光照探针只会烘焙间接光,这就意味着,如果一个动态物体希望受到某个光源(比如点光源)的直接光影响,那么我们需要将该光源设置为混合(Mixed)光源!
这样对于动态物体来说,该光源对它的直接光照,通过实时计算表现,而间接光照通过光照探针计算!
这样光照探针就优化了关于间接光照的表现和计算,而直接光源还是在 Shader 当中计算出颜色表现!对于动态物体:
- 想要受光源直接光 → 光源设为 Mixed 或 Realtime
- 想要受间接光 → 启用 Light Probe
了解这一点非常重要,这样我们就可以根据我们的实际需求进行取舍!
光照探针只是间接光照的优化方案,用于让动态物体获得逼真的环境光效果,而无需实时全局光照计算。
不用再让 CPU / GPU 实时计算复杂的光线反射了!
例如如下场景:

添加探针并在场景中烘焙光照后,动态移动对象将根据场景中最近的探针接收间接光:

光照探针(Light Probe)的原理
-
烘焙阶段
在场景中放置多个光照探针点,Unity 会对每个光照探针点计算来自周围的光照方向和强度分布
这些光照数据不是用贴图存储,而是存储为 球谐函数(Spherical Harmonics, SH)系数球谐函数(Spherical Harmonics):
是一族由同一个通用公式定义出来的函数,是一个模板公式,通过不同的参数生成许多具体的函数
在图形学中的作用是把球面方向上的光照分布用有限个系数(基函数)近似表示出来
利用球谐函数,我们能够根据表面法线方向,计算出该方向上的环境光照颜色 -
运行阶段
对于每个动态物体,Unity在空间中找到它附近的光照探针
根据物体所在位置,对这些光照探针的数据进行三维插值
将插值计算得到的光照应用到物体上,模拟出真实的光照环境
总结:在场景中预先采样并用球谐函数记录各点的环境光分布,运行时通过插值这些数据让动态物体获得逼真的间接光照
优点:
- 几乎零运行时成本(插值 + Shader 乘法)
- 光照平滑过渡
- 能与烘焙光照无缝结合
缺点:
- 无法产生阴影(只是光照颜色变化)
- 光照数据是静态的(烘焙时固定)
- 探针过少时容易出现亮度跳变
光照探针(Light Probe)的使用
-
在场景中创建 Light Probe Group(光照探针组)
场景上会出现很多黄色小球,一个小球就是一个探针点
在 Hierarchy 窗口内右键选择 Light —— Light Probe Group 即可创建

-
在 Scene 窗口中编辑探针点的位置
注意:好的间接光表现,需要好的 Light Probe 布局,一般大场景中,光照探针点会有非常多!
Unity 2022 版本以前需要在 Inspector 窗口内开启光照探针编辑:

- Show Wireframe:显示线框
- Remove Ringing:消除振铃(默认开启即可)
- Selected Probe Position:选定的探针位置,可以编辑位置
- Add Probe:添加探针
- Select All:全选探针
- Delete Selected:删除选择的探针
- Duplicate Selected:复制选择的探针
Unity 6 版本后需要在 Scene 窗口内选择编辑光照探针模式:

两个版本的编辑选项都是一致的,这里不再阐述
-
编辑好后,在 Lighting 窗口中烘焙
具体烘焙步骤和参数可见:UPL9-13——光照烘焙

-
动态物体需要将其 Renderer 组件上的光照探针设置为 Blend Probes(混合探针)

-
验证测试效果
假设存在一个场景,平行光是 Mixed 光源,红色点光源是 Baked 光源,绿色点光源是 Realtime 光源,球体是动态物体,其他物体全都勾选 Contribute GI
使用光照探针前:

使用光照探针后:

可以看到,球体收到的红色点光源的间接光影响,球体的颜色显然变红了(不过球体并没有受到红光的直接光关照,这是因为红色点光源不是 Mixed 光源)
布局主要思想:让光照探针足够密集地分布在光照变化明显的区域,以便动态物体在移动时获得平滑、准确的插值结果
尽量满足以下 3 点:
- 覆盖动态物体活动区域
- 在光照变化剧烈处密集
- 保持空间分布均匀、连续、不过度重叠
