Version: 2019.4
Lighting Mode:Baked Indirect
Lighting Mode:Subtractive

Lighting Mode:Shadowmask

本页介绍在将场景的 Lighting Mode 属性设置为 Shadowmask 时,该场景中所有混合光源的行为。

类似于 Baked Indirect 光照模式,Shadowmask 光照模式将实时直接光照与烘焙间接光照结合在一起。但是,Shadowmask 光照模式与 Baked Indirect 光照模式的不同之处在于渲染阴影的方式。Shadowmask 光照模式允许 Unity 在运行时结合烘焙阴影和实时阴影,并允许渲染远处的阴影。实现这一点的方法是使用称为“阴影遮罩”的附加光照贴图纹理并将附加信息存储在光照探针中。

Shadowmask 光照模式在所有光照模式中提供最高保真度的阴影,但需要的性能成本和内存要求也是最高的。此模式适用于在高端或中档硬件上渲染远处游戏对象可见时的真实场景,例如空旷的空间世界。

渲染管线支持

  • 内置渲染管线支持 Shadowmask 光照模式。在内置渲染管线中,针对仅支持四个渲染目标的平台(例如许多移动端 GPU),Shadowmask 光照模式会强制 Unity 使用前向渲染
  • 通用渲染管线 (URP) 不支持 Shadowmask 光照模式。
  • 高清渲染管线 (HDRP) 支持 Shadowmask 光照模式,并基于每个光源提供其他功能。有关其他选项的信息,请参阅 HDRP Shadowmask 光照模式

阴影遮罩 (Shadowmask) 质量设置

Shadowmask 光照模式有以下质量设置:

  • Distance Shadowmask 以更高的性能成本提供更高保真度的阴影。
  • Shadowmask 以更低的性能成本提供更低保真度的阴影。

混合光源行为

使用 Distance Shadowmask 质量设置

将场景的 Lighting Mode 设置为 Shadowmask 并且项目使用 Distance Shadowmask 质量设置时,混合光源的行为如下。

  • 混合光源照亮的动态游戏对象将接收:
    • 实时直接光照。
    • 烘焙间接光照(使用光照探针)。
    • 动态游戏对象的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
    • 静态游戏对象的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
    • 静态游戏对象的烘焙阴影(使用光照探针),超过阴影距离 (Shadow Distance)。
  • 混合光源照亮的静态游戏对象将接收:
    • 实时直接光照。
    • 烘焙间接光照(使用光照贴图)。
    • 动态游戏对象的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
    • 静态游戏对象的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
    • 静态游戏对象的烘焙阴影(使用阴影遮罩),超过阴影距离 (Shadow Distance)。

使用 Shadowmask 质量设置

将场景的 Lighting Mode 设置为 Shadowmask 并且项目使用 Shadowmask 质量设置时,混合光源的行为如下。

  • 混合光源照亮的动态游戏对象将接收:
    • 实时直接光照。
    • 烘焙间接光照(使用光照探针)。
    • 动态游戏对象的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
    • 静态游戏对象的烘焙阴影(使用光照探针),不超过以及超过阴影距离 (Shadow Distance)。
  • 混合光源照亮的静态游戏对象将接收:
    • 实时直接光照。
    • 烘焙间接光照(使用光照贴图)。
    • 动态游戏对象的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
    • 静态游戏对象的烘焙阴影(使用阴影遮罩),不超过以及超过阴影距离 (Shadow Distance)。

将场景的 Lighting Mode 设置为 Shadowmask

在内置渲染管线中:

  1. 打开 Lighting 窗口(菜单:__Window__ > Rendering > __Lighting Settings__)。
  2. 选择 Scene 选项卡。
  3. 导航到 Mixed Lighting
  4. 使用下拉菜单将 Lighting Mode 设置为 Shadowmask
  5. 打开 Quality Settings(菜单:Edit > Project Settings,然后选择 Quality 类别)。
  6. 使用 Shadowmask Mode 下拉菜单选择 ShadowmaskShadowmask Distance

在 HDRP 中:

按照 HDRP Shadowmask 光照模式文档中的说明进行操作。

阴影和运行时性能

可以使用 Shadow Distance 属性来限制 Unity 绘制实时阴影的最大距离。

阴影遮罩实现详细信息

在运行时,Unity 使用阴影遮罩来确定某个像素是否在阴影中。阴影遮罩纹理包含有关烘焙光源的遮挡信息。该纹理与相应的光照贴图共享相同的 UV 布局和分辨率。还针对每个纹素包含最多四个光源的遮挡信息(以 RGBA 格式存储)。

如果超过四个光源发生重叠,则多余光源会回退至烘焙光照 (Baked Lighting)。烘焙系统会决定哪个光源回退至烘焙光照,并在各烘焙之间保持一致,除非您修改其中某个重叠的光源。光照探针也会接收最多四个光源的相同信息。

Unity 将独立于接收阴影的对象来计算光源重叠。因此,一个对象可受到全部来自同一个阴影遮罩/探针通道的十个不同混合光源的影响,只要这些光照包围体在空间中的任何点都不重叠即可。如果某些光源重叠,则 Unity 会使用更多通道。如果某个光源确实发生重叠而所有四个通道都在使用中,则该光源将回退至完全烘焙。

Lighting Mode:Baked Indirect
Lighting Mode:Subtractive