UPL9-13——光照烘焙

光照烘焙

提前离线计算场景中的光照、阴影、反射、间接光照等信息,并且将结果保存为贴图或探针数据
在游戏运行时直接使用,从而节省实时计算的性能消耗

为什么可以节约性能

  • 实时光照:运行时每帧都需要计算,开销很大
  • 烘焙光照:提前计算,运行时直接贴图,几乎零性能开销(因为不用实时计算光照)

说人话:
提前把光照表现算好存储到光照纹理中,运行时直接使用光照纹理中的颜色用于着色
避免实时计算带来的高开销,是典型的 内存换性能 的优化方式

哪些光照信息可以被烘焙

可以被烘焙的光照信息:

  1. 直接光照

    来自光源直接照射到表面的光

  2. 间接光照

    光线在场景中多次反射后的柔和照明

  3. 阴影

    可烘焙静态阴影(不会随动态物体移动)

  4. 反射

    可通过 反射探针(Reflection Probe) 烘焙环境反射

不可被烘焙的光照信息:不支持随时间变化的灯光(包括位置方向和光照强度) 或 移动的光源

如何进行光照烘焙

  1. 将场景中想要进行光照烘焙的静态物体标记为静态 Static,或 只勾选 Contribute GI(Contribute Global Illumination,参与全局光照)

    只有勾选了该选项的物体,才会被当作静态对象进行光照烘焙

    注意:动态对象 需要使用 光照探针,不能作为静态对象处理

    image

    或者

    image

  2. 设置灯光模式

    • Realtime (实时):每帧实时计算光照,用于动态灯光,比如手电筒、闪烁灯
    • Baked (烘焙):只在烘焙阶段起作用,用于完全静态的灯光
    • Mixed (混合):同时支持烘焙与实时,常用于主光源(表现太阳光)

    建议:

    • 太阳光(主光源)用 Mixed (混合)
    • 室内灯光(蜡烛、台灯等复杂室内环境光源)用 Baked (烘焙)
    • 特效等(会移动或随时间变化的光源)用 Realtime (实时)
  3. 打开 Lighting 设置窗口

    进行相关光照烘焙设置(具体参数请见下文),设置完毕后点击 Generate Lighting,烘焙光照

    image

烘焙关照示例:
假设有这样一个场景,其中平行光是 Mixed 光源,红黄点光源是 Baked 光源,绿色点光源是 Realtime 光源,其他物体全都勾选 Contribute GI

image

烘焙完成后,将三个点光源都失活,可以看到仅绿色的 Realtime 光源的关照消失,其他光源光照依然存在

image

在场景上添加一个动态物体,这个动态物体无法只能受到 Mixed 和 Realtime 光源光照影响,而不能受到烘焙后的 Baked 光源光照影响

image

Lighting 设置窗口烘焙光源相关参数

设置建议:

  • 若噪点多,提高 Samples(采样相关参数)
  • 若边缘发黑,增大 Lightmap Padding((光照贴图填充))
  • 若太亮或太暗,调整 Indirect Intensity(间接强度)

image

  • Lighting Settings(光照设置)

    • Lighting Setting Asset(光照设置配置文件)

      光照设置需要相应的配置文件,如果没有可以在左侧创建或者克隆一个新文件

  • Realtime Lighting(实时光照)

    • Realtime Global Illumination(是否使用实时全局光照)

      • Realtime Environment Lighting(实时环境光)

      • Indirect Resolution(实时光照的间接光分辨率)

        仅在 Realtime GI 开启时有效

      建议: 项目一般关闭此项,仅使用 Baked GI(性能更好、质量更稳定)

  • Mixed Lighting(混合光照)

    • Baked Global Illumination(是否开启烘焙光照)

      我们必须勾选该选项,才能烘焙静态光照

    • Lighting Mode(混合光照计算模式)

      image

      • Baked Indirect(间接烘焙模式,实时内容多,性能开销最大)

        只烘焙间接光照(Global Illumination),而直接光照和阴影是实时计算的
        常用于完全实时的场景,只想要烘焙的全局光照“氛围”

        • 烘焙内容:间接光(反射、漫反射反弹)
        • 实时内容:直接光、阴影
        • 动态物体:可接收实时光和阴影,但不会接收烘焙阴影
        • 性能:较高开销(因为直接光仍是实时计算)
        • 典型用途:室外场景、昼夜循环、动态光源较多的场景
      • Subtractive(减法模式,实时内容少,性能最好)

        一种最简化的烘焙+实时混合模式,主要面向 低端移动平台
        只允许 一个主方向光(Directional Light) 提供实时阴影,其余光照全部烘焙进贴图

        • 烘焙内容:所有静态光源(包括直接光和间接光)
        • 实时内容:主方向光的实时阴影
        • 动态物体:接收烘焙的静态光照,但只有一个方向光能投影阴影
        • 性能:最佳性能(最低开销)
        • 典型用途:卡通风、移动端、光照简单的关卡
      • Shadowmask(阴影遮罩模式,最常用)

        最常用的 混合光照模式,
        结合了烘焙静态光源的间接光照 + 实时光的动态阴影
        静态对象的阴影由烘焙贴图提供;动态物体的阴影由实时计算

        • 烘焙内容:静态光源的间接光照和静态物体间的阴影
          (存在于 Shadowmask 贴图中)
        • 实时内容:动态物体的阴影、光照变化
        • 动态物体:接收烘焙光照 + 参与实时阴影
        • 性能:较平衡,适合主机/PC
        • 典型用途:混合场景(例如:静态建筑 + 动态角色)

      使用建议:

      • Baked Indirect(间接烘焙模式):追求真实实时光照效果
      • Subtractive(减法模式):面向移动端
      • Shadowmask(阴影遮罩模式) 兼顾质量与性能
  • Lightmapping Settings(光照贴图设置)

    • Lightmapper(烘焙引擎类型)

      image

      • Progressive CPU(CPU烘焙)
      • Progressive GPU(GPU烘焙)

      GPU 更快但需显卡支持。一般用 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(滤波算法)

      控制烘焙后阴影与光照平滑算法

      image

      • None:关闭滤波算法
      • Auto:自动,推荐方式
      • Advanced:高级,阴影颗粒感强
    • 分辨率相关

      • Lightmap Resolution(光照贴图分辨率)

        每单位世界空间使用多少像素

        建议:

        • 室内小场景:40~60
        • 室外大场景:10~20
      • Lightmap Padding(光照贴图填充像素数)

        贴图中不同物体间的像素间隔,
        2~4 texel 即可,避免光照互染

      • Max Lightmap Size(最大光照贴图大小)

        单张 Lightmap 最大分辨率
        1024 ~ 2048,视情况而定

      • Fixed Lightmap Size(是否固定光照贴图大小)

        固定 Lightmap 尺寸,具体尺寸由 Max Lightmap Size 决定,一般关闭

      • Use Mipmap Limits(是否使用 Mipmap 限制)

        是否使用 Mipmap,限制以节省内存 一般开启

    • Lightmap Compression(光照贴图压缩)

      image

      • None:不压缩
      • Low:低质量压缩
      • Normal:普通质量压缩
      • High:高质量压缩

      选高质量可减少块状伪影

    • 环境光遮蔽相关

      • Ambient Occlusion(是否开启环境光遮蔽)

        模拟局部阴影(角落、缝隙变暗)
        建议开启,可以增加立体感

        环境光遮蔽(AO)是一种 模拟局部阴影的效果

        在模型的缝隙、角落、物体接触面等区域制造微弱阴影,
        使场景更有深度感与体积感
        AO 不会产生方向性阴影(不随光源方向变化)
        它只是让遮蔽区域更暗

        • Max Distance(AO 最大作用距离)

          AO 的最大作用距离(单位:世界空间距离),控制阴影扩散范围

          • 值越大:AO 扩散范围更大,但可能显得“脏”
          • 值越小:AO 只集中在贴近处(角落更明显)

          一般 0.5 ~ 2,取决于场景比例

        • Indirect Contribution(AO 间接贡献程度)

          AO 对间接光照(反射光)的影响强度。
          值越高:AO 会更强地抑制反射光亮度,使暗处更暗
          一般 0.5 ~ 1

        • Direct Contribution(AO 直接贡献程度)

          AO 对直接光照(灯光照射部分)的影响强度。
          值越高:即使在有灯照的地方,AO 也会让角落显得更暗
          一般 0.1 ~ 0.5

        建议:

        • 室内高对比场景

          • Max Distance:1
          • Indirect Contribution:1
          • Direct Contribution:0.3
        • 室外自然光场景

          • Max Distance:2
          • Indirect Contribution:0.5
          • Direct Contribution:0.2
        • 卡通风格 / 简洁风

          • Max Distance:0.5
          • Indirect Contribution:0.8
          • Direct Contribution:0.1
    • Directional Mode(方向模式,是否存储光照方向信息)

      是否存储光照方向信息,对于有法线贴图的场景用 Directional(推荐)

      image

      • Directional:存储
      • Non-Directional:不存储
    • Albedo Boost(反射率提升强度)

      增强表面颜色反射强度,一般保持 1

    • Indirect Intensity(间接强度)

      间接光照亮度倍数,调整反射整体亮度,常用范围 1~2

    • Lightmap Parameters(光照贴图参数配置文件)

      控制光照贴图细节的模板
      (默认包括 Default-Low / Default-Medium / Default-High,也可以自行创建)
      一般用 Default-Medium 或 Default-High

  • 其他设置

    • GPU Baking Profile(GPU 烘焙配置)

      使用哪个 GPU 配置进行烘焙,默认Automatic 即可
      (仅在 Lightmapper 选择 Progressive GPU 时才可选择)

      image

      • Highest Performance(最高性能)
      • High Performance(高性能)
      • Automatic(自动)
      • Low Memory Usage(低内存占用)
      • Lowest Memory Usage(最低内存占用)
    • Bake On Scene Load(场景加载时烘焙)

      image

      • Never(不烘焙,手动控制)
      • If Misssing Lighting Data(如果缺失烘焙数据就烘焙)
    • Generate Lighting(生成光照烘焙数据)

      手动开始光照烘焙,烘焙时点击此按钮

如何判断是否成功使用了光照贴图

  1. 查看 Window → Rendering → Lighting → Baked Lightmaps 中是否存在已经生成的光照贴图

    image

  2. 在 Scene 视图中通过切换选择观察模式来查看光照贴图显示部分

    image

  3. 查看场景中物体的 Renderer 组件的 Lighting 区域,查看对象是否勾选了 参与烘焙的选项,并且查看 Lightmapping 部分自己是否关联了烘焙的光照贴图

    image

  4. 检查灯光模式是否使用了 Baked 或者 Mixed

    image

等等

清除光照烘焙

如果要清除光照烘焙,需要在 Lighting 设置窗口下方的 Generate Lighting 按钮右侧点击下三角,会弹出菜单,点击 Clear Baked Data 即可清理光照烘焙

6a43a0e262b77981aceb07099ce3608a