93.性能优化-GPU-着色器优化-降低填充率压力-光照探针
93.1 知识点
光照探针的作用
上节课学习的光照烘焙主要为静态物体服务——静态物体的光照信息直接烘焙进光照贴图中。而动态物体会不停移动,受光结果无法直接烘焙进贴图,因此烘焙光照无法作用于动态物体。
光照探针(Light Probe) 就是用来解决这个问题的:让动态物体在场景中通过插值获得周围环境的间接光信息。
间接光照(Indirect Lighting): 光线在场景中经过一次或多次反射后,再照射到物体表面的光照。例如:灯直接照在桌面上是直接光照;桌面反射的光照亮墙壁、天花板是间接光照;墙壁又反射出微弱的光照亮房间阴暗处是多次间接光照。
光照探针的原理
1. 烘焙阶段: 在场景中放置多个光照探针点,Unity 对每个探针点计算来自周围的光照方向和强度分布。这些数据不是用贴图存储,而是存储为球谐函数(Spherical Harmonics, SH) 系数。
球谐函数是一族由通用公式生成的函数,在图形学中用于把球面方向上的光照分布用有限个系数近似表示。利用球谐函数,可根据表面法线方向计算出该方向上的环境光照颜色。
2. 运行阶段: 对每个动态物体,Unity 找到它附近的光照探针,根据物体位置对这些探针数据进行三维插值,将结果应用到物体上,模拟出真实的光照环境。
总结: 在场景中预先采样并用球谐函数记录各点的环境光分布,运行时通过插值让动态物体获得逼真的间接光照。
优点:
- 几乎零运行时成本(插值 + Shader 乘法)。
- 光照平滑过渡。
- 能与烘焙光照无缝结合。
缺点:
- 无法产生阴影(只是光照颜色变化)。
- 光照数据是静态的(烘焙时固定)。
- 探针过少时容易出现亮度跳变。
光照探针的使用
主要步骤
- 在场景中创建 Light Probe Group(光照探针组),场景上会出现黄色小球(探针点)。
- 在 Scene 窗口中编辑探针点的位置。
- 编辑好后,在 Lighting 窗口中重新烘焙。
- 动态物体的 Renderer 组件上将光照探针设置为 Blend Probes(混合探针)。
- 验证测试效果。
布局思想: 让探针足够密集地分布在光照变化明显的区域,确保动态物体移动时获得平滑准确的插值结果。要满足三点:覆盖动态物体活动区域;在光照变化剧烈处密集;保持空间分布均匀、连续、不过度重叠。
创建 Light Probe Group
右键 → Light → Light Probe Group。

创建后,场景中会出现一组黄色小球,每个小球就是一个探针点。

编辑探针点位置
选中 Light Probe Group,点击左侧编辑按钮进入编辑模式,可以通过 Add Probe、Delete Selected、Duplicate Selected 来增删探针,拖动到合理位置。

编辑到合理位置后的俯视效果:

重新烘焙
编辑好探针后,需要在 Lighting 窗口中重新点击 Generate Lighting 烘焙。

设置动态物体
添加动态球体,注意在 Renderer 组件的 Probes 区域将 Light Probes 设置为 Blend Probes(混合探针)。

移动球体可以看到它已经受到烘焙光的影响了:

探针不足的问题
如果球体离红黄光已经很远,仍然能看到红黄色,说明探针分布不够密。图中下方的白色点位表示当前使用了哪些探针进行混合——由于远处缺少探针,球体仍然在用红黄光附近的探针插值,导致颜色不正确。

增加探针并重新烘焙
在远处区域增加更多探针,重新烘焙后效果正确——离得远就不再受红黄烘焙光影响了。


清除烘焙数据
如果想清除已烘焙的探针数据,可以通过 Edit → Lighting → Clear Baked Data。

光照探针只烘焙间接光
光照探针只会烘焙间接光。如果一个动态物体希望受到某个光源的直接光影响,需要将该光源设置为 Mixed 或 Realtime。这样对动态物体来说:直接光照通过实时计算表现,间接光照通过光照探针获取——探针优化的是间接光照的表现和计算。
对于动态物体:
- 想要受光源直接光 → 光源设为 Mixed 或 Realtime。
- 想要受间接光 → 启用 Light Probe。
光照探针是间接光照的优化方案,让动态物体无需实时全局光照计算即可获得逼真的环境光效果。好的间接光表现需要合理的 Light Probe 布局,大场景中探针点通常会非常多。
93.2 知识点代码
Lesson93_性能优化_GPU_着色器优化_降低填充率压力_光照探针.cs
public class Lesson93_性能优化_GPU_着色器优化_降低填充率压力_光照探针
{
#region 知识点一 光照探针的作用
// 光照烘焙为静态物体服务,动态物体无法直接使用烘焙光照。
// Light Probe 让动态物体通过插值获得周围的间接光照信息。
#endregion
#region 知识点二 光照探针的原理
// 烘焙阶段:在探针点用球谐函数(SH)记录光照分布。
// 运行阶段:对动态物体附近的探针数据三维插值,应用到物体上。
// 优点:几乎零运行时成本、平滑过渡、与烘焙光照无缝结合。
// 缺点:无法产生阴影、数据静态、探针过少会亮度跳变。
#endregion
#region 知识点三 光照探针的使用
// 1. 创建 Light Probe Group,编辑探针位置。
// 2. 重新烘焙(Generate Lighting)。
// 3. 动态物体 Renderer → Light Probes 设为 Blend Probes。
// 4. 探针布局:覆盖活动区域、变化剧烈处密集、分布均匀连续。
// 注意:Light Probe 只烘焙间接光,直接光需光源为 Mixed 或 Realtime。
#endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com