92.性能优化-GPU-着色器优化-降低填充率压力-光照烘焙
92.1 知识点
搭建测试场景
搭建测试场景:添加几个 Cube 和三个不同颜色的点光源,并让白色光源动起来。

挂载移动脚本:
using UnityEngine;
public class Lesson92_MoveLightY : MonoBehaviour
{
private void Update()
{
this.transform.position += Vector3.up * Mathf.Sin(Time.time) * 0.003f;
}
}
什么是光照烘焙
提前离线计算场景中的光照、阴影、反射、间接光照等信息,将结果保存为贴图或探针数据,运行时直接使用,从而节省实时计算的性能消耗。
- 实时光照:每帧都需要计算,开销很大。
- 烘焙光照:提前算好,运行时直接采样光照纹理,几乎零性能开销。
简单来说:把光照表现提前算好存进纹理,运行时直接取出用于着色,避免实时计算的高开销。这是典型的内存换性能的优化方式。
哪些光照信息可以被烘焙
可烘焙:
- 直接光照:光源直接照射到表面的光。
- 间接光照:光线在场景中多次反射后的柔和照明。
- 阴影:可烘焙静态阴影(不会随动态物体移动)。
- 反射:通过反射探针(Reflection Probe)烘焙环境反射。
不可烘焙:
- 随时间变化的灯光或移动的光源。
如何进行光照烘焙
总体思路
- 将想要参与烘焙的静态物体标记为 Static,或只勾选 Contribute Global Illumination(参与全局光照)。只有勾选该选项的物体才会被当作静态对象进行烘焙。动态对象需要使用光照探针,不能作为静态对象处理。
- 设置灯光模式。
- 打开 Lighting 设置窗口,进行光照烘焙设置。
标记静态物体
把平面和 Cube 勾选 Contribute GI,或直接勾选 Static。

设置灯光模式
Realtime(实时):每帧实时计算光照,用于动态灯光(手电筒、闪烁灯等)。Baked(烘焙):只在烘焙阶段起作用,用于完全静态的灯光。Mixed(混合):同时支持烘焙与实时,常用于主光源(如太阳光)。
建议: 太阳光(主光源)用 Mixed;室内灯光(蜡烛、台灯等)用 Baked;特效等(会移动或变化的光源)用 Realtime。
全局光改成 Mixed:

红黄光改成 Baked:

白光保持 Realtime:

打开 Lighting 设置窗口
通过 Window → Rendering → Lighting 打开。

可以点击 New 创建光照设置文件。

光照设置面板详细参数

Realtime Lighting(实时光照)

- Realtime Global Illumination:实时全局光照开关。
- Realtime Environment Lighting:实时环境光。
- Indirect Resolution:实时光照的间接光分辨率,仅在 Realtime GI 开启时有效。
建议: 一般关闭此项,仅使用 Baked GI(性能更好、质量更稳定)。
Mixed Lighting(混合光照)
- Baked Global Illumination:必须勾选才能烘焙静态光照。
Lighting Mode(混合光照计算模式):

Shadowmask(阴影遮罩模式): 最常用。结合烘焙静态光源的间接光照 + 实时光的动态阴影。静态对象的阴影由烘焙贴图提供,动态物体的阴影由实时计算。较平衡,适合主机/PC,典型用于混合场景(静态建筑 + 动态角色)。
Subtractive(减法模式): 最简化,面向低端移动平台。只允许一个主方向光提供实时阴影,其余光照全部烘焙。性能最佳,适合卡通风、移动端、光照简单的关卡。
Baked Indirect(间接烘焙模式): 只烘焙间接光照(GI),直接光照和阴影实时计算。开销较高,适合室外场景、昼夜循环、动态光源多的场景。
使用建议: Shadowmask 兼顾质量与性能;Subtractive 面向移动端;Baked Indirect 追求真实实时光照效果。
Lightmapping Settings(光照贴图设置)
Lightmapper(烘焙引擎):Progressive GPU(更快,需显卡支持)或 Progressive CPU;一般用 Progressive GPU。

- Importance Sampling:改进采样精度,提高高亮区域的采样密度;建议开启。
- 采样设置:
- Direct Samples:每个像素的直接光采样次数,控制阴影锐利度;常用 32–128。
- Indirect Samples:间接光采样次数,越高越平滑但耗时更长;建议 256–512。
- Environment Samples:环境光(天空盒)采样次数,影响环境光平滑度;默认 256。
- Light Probe Sample Multiplier:光照探针采样倍数;默认 4。
- Max Bounces:光线最大反射次数;2–3 次通常足够。
Filtering(滤波):None 关闭 / Auto 自动(推荐)/ Advanced 高级(可能颗粒感强)。

分辨率相关:
- Lightmap Resolution:每单位世界空间使用多少像素;室内小场景 40–60,室外大场景 10–20。
- Lightmap Padding:贴图中不同物体间的像素间隔;2–4 texel 即可。
- Max Lightmap Size:单张 Lightmap 最大分辨率;1024–2048 视情况而定。
- Fixed Lightmap Size:固定 Lightmap 尺寸;一般关闭。
- Use Mipmap Limits:是否使用 Mipmap 限制以节省内存;一般开启。
Lightmap Compression(光照贴图压缩):None / Low / Normal / High;选高质量可减少块状伪影。

Ambient Occlusion(环境遮蔽):模拟角落、缝隙处的局部阴影,增加立体感;建议开启。AO 不产生方向性阴影(不随光源方向变化),只让遮蔽区域更暗。

- Max Distance:AO 最大作用距离,值越大扩散越广但可能显脏;一般 0.5–2。
- Indirect Contribution:AO 对间接光的抑制强度;一般 0.5–1。
- Direct Contribution:AO 对直接光的影响;一般 0.1–0.5。
参考设置:
| 场景类型 | Max Distance | Indirect | Direct |
|---|---|---|---|
| 室内高对比 | 1 | 1 | 0.3 |
| 室外自然光 | 2 | 0.5 | 0.2 |
| 卡通/简洁风 | 0.5 | 0.8 | 0.1 |
- Directional Mode:是否存储光照方向信息;有法线贴图的场景用 Directional(推荐)。

- Albedo Boost:增强表面颜色反射强度;一般保持 1。
- Indirect Intensity:间接光照亮度倍数;常用范围 1–2。
- Lightmap Parameters:控制光照贴图细节的模板(Default-Low / Medium / High);一般用 Default-Medium 或 Default-High。
其他设置
- GPU Baking Profile:使用哪个 GPU 配置进行烘焙;默认 Automatic 即可。
- Bake On Scene Load:Never(不自动烘焙)或 If Missing Lighting Data(缺失时自动烘焙)。

- Generate Lighting:手动开始光照烘焙,点击此按钮即可。
调优建议: 噪点多时提高 Samples;边缘发黑时增大 Lightmap Padding;太亮或太暗时调整 Indirect Intensity。
执行烘焙
点击 Generate Lighting,看到生成的数据文件以及纹理说明烘焙成功。

如何判断是否成功使用了光照贴图
- 查看 Window → Rendering → Lighting → Baked Lightmaps 中是否存在已生成的光照贴图。

- 在 Scene 视图中通过选择观察模式来查看光照贴图显示部分。

- 查看场景中物体的 Renderer 组件的 Lighting 区域:确认对象是否勾选了参与烘焙的选项,并查看 Lightmapping 部分是否关联了烘焙的光照贴图。


- 检查灯光模式是否使用了 Baked 或 Mixed。
隐藏红黄灯后仍能看到红黄色光照效果,说明这部分是光照烘焙的结果。关闭白光后白色消失,因为白光是实时的。

创建一个球体,会发现它不受红黄烘焙光影响,但能受到白色实时光影响。要解决动态物体无法接收烘焙光照的问题,需要使用光照探针和反射探针。

92.2 知识点代码
Lesson92_性能优化_GPU_着色器优化_降低填充率压力_光照烘焙.cs
public class Lesson92_性能优化_GPU_着色器优化_降低填充率压力_光照烘焙
{
#region 准备工作
// 搭建测试场景:Cube + 三个不同颜色的点光源,白光挂脚本使其移动。
#endregion
#region 知识点一 什么是光照烘焙
// 提前离线计算光照、阴影、反射、间接光照等信息,保存为贴图或探针数据,
// 运行时直接使用,避免实时计算的高开销。典型的内存换性能优化方式。
#endregion
#region 知识点二 哪些光照信息可以被烘焙
// 可烘焙:直接光照、间接光照、静态阴影、反射(Reflection Probe)。
// 不可烘焙:随时间变化的灯光或移动的光源。
#endregion
#region 知识点三 如何进行光照烘焙
// 1. 静态物体标记 Static 或勾选 Contribute Global Illumination。
// 2. 设置灯光模式:主光源 Mixed,静态灯 Baked,动态灯 Realtime。
// 3. 打开 Lighting 窗口,配置参数后点击 Generate Lighting。
#endregion
#region 知识点四 如何判断是否成功使用了光照贴图
// 1. Lighting → Baked Lightmaps 中查看已生成的光照贴图。
// 2. Scene 视图切换 Baked Lightmap 可视化模式。
// 3. Renderer 组件 Lighting 区域查看 Contribute GI 与 Lightmapping 信息。
// 4. 检查灯光模式是否为 Baked 或 Mixed。
#endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com