流程

  • Unity - Window - Rendering - Lighting。
  • 设置 Lighting Settings Asset 或者生成新的 Lighting Settings Asset。
  • 设置烘焙物体为 Static,
  • 设置光源模式为 Bake 或者 Mixed。
  • 选择最下方的 Generate Lighting。
  • Lighting Mode 选择 Subtractive

光照探针

  • 创建一个携带有光照探针组件的物体
  • 在光照探针覆盖的区域内放一个平面充当镜子(mirror),创建一个标准着色器给 mirror,然后调整着色器的参数 MetalIC 和 Smoothness 为 1.
  • 在镜子的前面摆放一些简单的 Cube 查看效果。

反射探针

前向渲染中的光处理

  • 一定数目的光源会按照逐像素的方式进行处理,
  • 场景中最多有 4 个光源按照逐顶点的方式处理

一些烘焙相关的操作点

  • 烘焙完成后觉得效果不好,然后发现调整场景中的物体没有实时反应,这个是因为此时静态物体已经带有了光照信息,打开 Lighting 设置,选择 Baked Lightmaps,然后删除 Lighting Data Asset 即可。
  • Lighting Data Asset 保存了场景中烘焙物体在光照贴图上的信息,如果想在其他场景中烘焙好,然后在新的场景里面加载,只需要把 Lighting Data Asset 做过的事情再做一遍即可,参考链接 https://github.com/Ayfel/PrefabLightmapping

一些参数含义

Directional Mode

光照贴图有两种 Directional Mode。

  • 定向和非定向(Lightmap 和 Directional Lightmap )。 两种模式都与来自 Unity 的 Enlighten Realtime Global Illumination 的实时光照贴图兼容系统,以及来自 Unity 的 Progressive Lightmapper 的烘焙光照贴图。
  • 默认模式是定向的。

烘焙光照贴图时,Unity 会生成两个光照贴图纹理。

  • 一个纹理存储有关在目标表面上接收到的光照强度和颜色的信息。 (无论 Directional Mode 是什么都会生成,Texture Type 为 LightMap)
  • 另一个纹理存储主光方向,以及一个描述接收到的总光中有多少来自该主方向的因子。(Directional Mode 为 Directional 时才会生成,Texture Type 为 Directional LightMap)

Lighting Mode

光照模式决定了所有场景中所有混合光的行为。

  • Baked Indirect 结合了实时直接光照和烘焙间接光照。 它提供实时阴影。 此照明模式提供逼真的照明和合理的阴影保真度,适用于中档硬件。
  • Shadowmask 将实时直接光照与烘焙间接光照相结合。 它为远处的游戏对象启用烘焙阴影,并自动将它们与实时阴影混合。 它是最真实的,也是最耗费资源的光照模式。 您可以使用质量设置来配置其性能和视觉保真度。 此照明模式适用于高端或中端硬件。
  • Subtractive 提供烘焙的直接和间接照明。 它只为一个定向光渲染直接实时阴影。 这种光照模式不提供特别逼真的光照效果,适用于风格化的艺术或低端硬件。

Lightmapping Settings 参数解释

Multiple Importance Sampling

启用它以使用多重重要性采样对环境进行采样。 这通常会在生成光照贴图时导致更快的收敛,但会在某些低频环境中导致噪声更大的结果。 默认情况下禁用。

Direct Samples

从每个纹素拍摄的样本(路径)数量。 此设置控制 Progressive Lightmapper 用于直接照明计算的样本数。 增加该值可以提高光照贴图的质量,但会增加烘焙时间。

Indirect Samples

从每个纹素拍摄的样本(路径)数量。 此设置控制 Progressive Lightmapper 用于间接照明计算的样本数。 对于某些场景,尤其是室外场景,100 个样本应该足够了。 对于具有自发光几何体的室内场景,增加该值直到看到您想要的结果。

Environment Samples

Environment Samples 属性确定 Unity 向天空盒发射以直接收集光线的环境光线总数。 Unity 根据上下文从光照贴图纹素或光探针位置发射这些光线。 默认值为 500。较高的值可能会产生更平滑的结果,但会增加烘焙时间。

在具有 HDR 天空盒的场景中,通常需要更多样本来减少最终光照贴图或探测器中的噪点。 具有包含明亮奇点(例如太阳)或具有显着对比度的高频细节(例如背光云)的天空盒的场景也受益于更多的样本。

Light Probe Sample Multiplier

控制有多少样本用于光照探测器,作为上述样本值的乘数。 较高的值会提高光照探针的质量,但烘烤它们的时间会更长。 要启用此功能,请转到 Project Settings > Editor 并禁用 Use legacy Light Probe sample counts。 默认值为 4。

Bounces

使用此值指定跟踪路径时要执行的间接反弹数。 对于大多数场景,两次反弹就足够了。 对于某些室内场景,可能需要更多的反弹。

Min Bounces

您愿意让 Progressive Lightmapper 包含在间接光照计算中的最小反弹次数。

较低的值会减少烘焙时间,但可能会增加光照贴图噪点。 为了提高烘焙期间的性能,Lightmapper 使用一种称为 Russian Roulette 的技术终止对场景外观影响不大的光路。

默认值:2。范围:0–100

Max Bounces

您希望 Progressive Lightmapper 在间接光照计算中包含的最大反弹次数。

默认值:2。范围:0–100。

最多 10 个值适用于大多数场景。 高于 10 的值可能会导致烘烤时间显着延长。

每次反弹都会增加烘焙场景所需的计算资源。 对室内场景使用较高的反弹值,对室外场景和具有许多明亮表面的场景使用较低的反弹值。

随着 Min Bounces 和 Max Bounces 之间的范围变宽,光照贴图中可见的噪点数量会增加。

Filtering

配置 Progressive Lightmapper 对光照贴图应用后处理以限制噪点的方式。 对于光照贴图后处理,光照贴图被分成直接、间接和环境光遮挡目标,Unity 分别对其应用后处理,然后再将它们合成为单个光照贴图。

None

选择此选项可不对光照贴图使用过滤器或去噪。

Auto

选择此选项以使用依赖于平台的预设来对光照贴图进行后期处理。
如果您的开发机器满足运行 OptiX(NVIDIA OptiX AI 加速降噪器)的要求,则 Progressive Lightmapper 会使用降噪器和高斯滤波器,所有目标的半径为 1-texel。
如果您的开发机器无法运行 OptiX,Progressive Lightmapper 使用高斯滤镜,该滤镜具有 1 个纹素半径用于直接,5 个纹素半径用于间接,2 个纹素半径用于环境遮挡。

Advanced

选择 Advanced 为每种类型的光照贴图目标手动配置选项。 目标类型是 Direct、Indirect 和 Ambient Occlusion.

  • Direct:任何直接从光源到达传感器(通常是相机)的光。
  • Indirect:从光源间接到达传感器的任何光。 这最常适用于从其他游戏对象反射的光。
  • Ambient Occlusion:照明系统计算的任何环境光。
Denoiser

选择用于光照贴图目标的降噪器。

  • Optix:NVIDIA Optix 降噪器是一种 AI 加速降噪器,可减少烘焙光照贴图中的噪点。 它需要具有 4GB+ VRAM 和驱动程序版本 390+ 的 NVIDIA GPU,并且仅在 Windows 平台上受支持。
  • RadeonPro:RadeonPro 降噪器是一种 AI 加速降噪器,可减少烘焙光照贴图中的噪点。 它需要一个具有 4GB+ VRAM 的支持 OpenCL 的 GPU。
  • OpenImageDenoise:英特尔开放图像降噪器是一种 AI 加速降噪器,可减少烘焙光照贴图中的噪点。- 无:不使用降噪器。

Filter

选择用于光照贴图目标的滤镜:

  • Gaussian:选择此选项可为光照贴图目标使用高斯过滤器。 高斯滤镜在光照贴图上应用双边高斯滤镜。 这会模糊光照贴图并减少可见噪声。
  • A-Trous:选择此选项可为光照贴图目标使用 A-Trous 滤镜。 A-Trous 滤镜可最大限度地减少模糊量,同时消除光照贴图中的可见噪点。
  • None:选择此选项可禁用光照贴图目标的所有过滤。

Radius

此选项仅在 Filter 设置为 Gaussian 时可用。 使用 Radius 值以纹素为单位设置高斯滤波器内核的半径。 较高的半径会增加模糊强度并减少可察觉的噪点,但可能会导致细节在照明中丢失。

Sigma

此选项仅在过滤器设置为 A-Trous 时可用。 使用 Sigma 值调整保留细节或模糊照明的程度。 较高的 Sigma 会增加模糊强度并减少可察觉的噪点,但可能会导致细节在照明中丢失。

被烘焙的条件

  • 携带一个 Mesh Renderer 或者 Terrain 组件
  • 标记为向 GI 贡献
  • 使用 bulit-in 材质,或者 Standard Shader,或者使用一个携带 Meta Pass 的 Shader。

烘焙完成后 Unity 会添加 LightingData Assets、Baked Lightmaps 和 Reflection Probes 到 Assets 文件夹中。

可能遇到的问题

某个墙面的背面大片的黑暗区域

在烘焙中最常见到的就是背面死黑的问题,这是因为设置错误的烘焙设置导致的。

  • 在 URP 中,如果用官方的 Lit 来烘焙的话,可以看到有一个 的设置,如下。
  • 设置
  • 在这里把 Render Face 从 Front 改为 Both,就可以烘焙双面了。

模型有漏光

  • 一般是因为 UV 有问题,需要进行设置 UV 或者重新制作一套专门用于烘焙的 UV。