Unity Lighting Settings 全解析:一文读懂烘焙光照的每个参数(VR项目Lighting优化)
引言
Unity的Lighting Settings(灯光设置)是渲染管线中控制光照行为的核心配置面板,位于Window > Rendering > Lighting。通过Lighting Settings,你可以调整全局照明(GI)、光照模式和烘焙参数,实现高效的静态/动态光照模拟。烘焙光照(Baked Lighting)是其重点:预计算间接光照和阴影,存储在Lightmap中,适用于静态场景,避免运行时计算开销。相比实时光照,烘焙可将光照性能提升5-10倍,但需平衡质量与构建时间。
在VR项目中,Lighting Settings优化至关重要:VR要求高帧率(90+ FPS)和双目一致性,过度实时GI会导致掉帧,而烘焙GI可提供稳定光照。烘焙参数如Indirect Resolution直接影响VR沉浸感(避免黑边或光泄漏)和性能(高分辨率Lightmap增加内存)。本解析基于Unity 6.2(2025年10月当前版本),涵盖class-LightingSettings中的所有参数,聚焦Baked GI。Lighting Settings是Project Settings的一部分,可为不同场景创建资产(Lighting Settings Asset)。
适用场景:室内外光照模拟、VR环境渲染、性能瓶颈排查。优化后,典型VR场景(Quest 3)Draw Call可降至<200,GI开销<10ms/帧。
Lighting Settings 窗口概述
- 位置:Window > Rendering > Lighting > Scene 标签(全局设置在Project Settings > Graphics > Lighting Settings Asset)
- 主要部分:
- Baked GI:烘焙全局照明参数
- Realtime GI:实时GI参数
- Mixed Lighting:混合光照模式
- Lightmapping Settings:Lightmap分辨率、压缩等(Unity 6中增强,支持AI辅助烘焙,但文档无重大变更)
- 构建流程:配置后点击Generate Lighting(右下角),使用Progressive Lightmapper(CPU/GPU)烘焙。
Baked GI(Baked Global Illumination)详解
Baked GI预计算间接光照(光反弹),存储在Lightmap中。启用后,静态物体(标记为Lightmap Static)使用烘焙光,动态物体通过Light Probes采样。VR中,Baked GI提供一致双目光照,避免实时计算的延迟。
参数 | 描述 | 默认值 | 影响与VR优化 |
---|---|---|---|
Baked Global Illumination | 启用/禁用Baked GI系统。启用时,间接光从Baked Lights预计算到Lightmap/Light Probes;禁用时,所有Baked/Mixed Lights视为Realtime Lights。 | 未指定(开关) | 启用后,VR场景光照稳定(无闪烁),但需Light Probes辅助动态物体。VR优化:启用Baked GI减少GPU负载,目标<30ms烘焙更新。Unity 6中,AI辅助加速烘焙10-20%。 |
Lightmapper | 选择Lightmapper:Progressive CPU/GPU(渐进式)或Enlighten(旧版)。Progressive支持增量烘焙。 | Progressive CPU | Progressive GPU适合VR大场景(烘焙时间减半),但需兼容GPU。Enlighten已弃用。 |
Indirect Resolution | 实时Lightmap的texel/单位(更高=更好质量,但更慢渲染)。仅Realtime GI启用时可用。 | 未指定(数值) | VR中设2-4 texel/unit,确保高分辨率避免光泄漏,但控制内存(>4增加VR纹理开销)。 |
Bounces | 间接光反弹次数(1-5)。更高值更真实,但计算时间指数增长。 | 2 | VR中设2-3(平衡真实/性能),过多反弹导致烘焙超时或VR帧掉。 |
Filtering | Lightmap去噪过滤:None/AOV/Advanced。Advanced使用AI去噪。 | None | VR中用Advanced减少噪声(光斑),提升沉浸感,但增加烘焙时间20%。Unity 6增强AI过滤。 |
代码动态控制(运行时调整Baked GI参数):
using UnityEngine;
using UnityEngine.Rendering;
public class BakedGIOptimizer : MonoBehaviour
{
public LightmappingSettings lightingSettings; // 拖拽 Lighting Settings Asset
void Start()
{
// 动态启用 Baked GI
lightingSettings.bakedGI = true;
lightingSettings.lightmapper = LightmappingSettings.Lightmapper.ProgressiveCPU;
lightingSettings.indirectResolution = 2f; // 调整分辨率
// 触发烘焙(编辑器/运行时)
#if UNITY_EDITOR
Lightmapping.Bake();
#endif
}
// VR 性能模式:降低反弹
public void LowPerformanceMode()
{
lightingSettings.indirectBounces = 1;
Lightmapping.BakeAsync(); // 异步烘焙
}
}
Realtime GI(Realtime Global Illumination)详解
Realtime GI实时计算间接光,支持动态变化,但VR中需谨慎(每帧开销高)。
参数 | 描述 | 默认值 | 影响与VR优化 |
---|---|---|---|
Realtime Global Illumination | 启用Enlighten Realtime GI系统。 | 未指定(开关) | 启用后,VR动态光照更真实,但增加GPU负载(帧掉5-10%)。VR优化:结合Baked GI,仅动态物体用Realtime。 |
Realtime Environment Lighting | 启用实时环境光计算(需Realtime/Baked GI均启用)。 | 未指定(开关) | VR中启用动态天空变化(日夜循环),但需Light Probes采样;优化:降低Indirect Resolution。 |
Indirect Resolution | Realtime Lightmap texel/单位。 | 未指定(数值) | VR中设1-2,避免高分辨率导致延迟;Unity 6优化Enlighten计算。 |
代码示例:
public class RealtimeGIOptimizer : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown(KeyCode.G))
{
DynamicGI.UpdateEnvironment(); // 强制实时 GI 更新
}
}
}
Mixed Lighting(混合光照)详解
Mixed Lighting 结合 Baked 和 Realtime GI,适用于半动态场景。
参数 | 描述 | 默认值 | 影响与VR优化 |
---|---|---|---|
Lighting Mode | Mixed Lights的模式:Baked Indirect/Shadowmask/Subtractive。 | 未指定(下拉) | VR中用Baked Indirect(高效烘焙间接+实时直接),避免Shadowmask的Stencil开销。 |
Baked Indirect | Mixed Lights实时直接光+烘焙间接光,使用实时阴影。 | – | VR优化:静态场景首选,减少实时计算。 |
Shadowmask | 实时直接+烘焙间接+混合阴影(实时+烘焙)。 | – | VR中中等场景用,平衡阴影质量/性能。 |
Subtractive | 烘焙直接/间接+动态直接(仅方向光)。 | – | VR低端用,简化计算但光照简化。 |
代码示例:
public class MixedLightingSwitcher : MonoBehaviour
{
public LightingSettings lightingSettings;
void Start()
{
lightingSettings.mixedLightingMode = MixedLightingMode.BakedIndirect;
}
}
完整烘焙光照流程
- 准备场景:标记 Static(Lightmap Static/Contribute GI)。
- 配置参数:Lighting窗口调整 Baked/Realtime GI。
- 烘焙:Generate Lighting(Progressive GPU 加速)。
- 验证:Profiler > Rendering > GI 开销<20ms。
- 动态调整:代码修改 LightingSettings(运行时有限制)。
常见问题解决
问题 | 原因 | 解决方案 |
---|---|---|
烘焙黑屏 | Lightmap Resolution 太低 | 增加到 40+ texels/unit |
VR 闪烁 | Realtime GI 更新慢 | 用 Baked + Light Probes |
内存高 | Lightmap 太大 | 压缩 Lightmap (High Quality) |
构建慢 | Progressive 卡住 | 用 CPU 烘焙或分批场景 |
总结与最佳实践
Lighting Settings 是烘焙光照的控制中心,Baked GI 提供高效预计算,Realtime/Mixed 增强动态性。VR 项目优先 Baked + Probes 平衡性能/质量。定期烘焙并使用代码动态微调。如果需要代码示例扩展,请提供具体场景!