光照模式
本节将介绍光照设置资产的光照模式 (Lighting Mode) 属性的效果。
光照模式决定了所有场景中使用光照设置资产的所有混合光源的行为。可用模式如下:
- 烘焙间接 (Baked Indirect) 模式结合了实时直接光照和烘焙间接光照。此模式提供了具有实时阴影贴图的实时阴影。此光照模式能提供逼真的光照和合理的阴影保真度,适用于中端硬件。
- 阴影遮罩 (Shadowmask) 模式结合了实时直接光照和烘焙间接光照。它支持远处__ GameObject__Unity 场景中的基础对象,可以表示角色、道具、风景、摄像机、路径点等。GameObject 的功能由所附的组件决定。更多信息
See in Glossary (具有阴影遮罩)的烘焙阴影,并自动将它们与实时阴影(阴影贴图)混合。阴影遮罩光照模式是最逼真、最耗费资源的光照模式。您可以通过质量设置 (Quality Settings) 来配置其性能和视觉保真度。此光照模式适用于高端或中端硬件。
- 减算 (Subtractive) 模式提供了烘焙直接光照和间接光照。它仅为单个方向光渲染直接实时阴影。此光照模式不能提供特别逼真的光照效果,适用于风格化美术或低端硬件。
如需详细了解对不同渲染管线之间各种光照模式的支持,请参阅渲染管线功能比较。
烘焙间接
将场景的光照模式设为烘焙间接 (Baked Indirect) 时,混合光源的行为会类似于实时光源,附带额外的好处是可以将间接光照烘焙到光照贴图中。由混合光源照亮的 GameObject 会投射实时阴影,最大投射距离即项目所定义的阴影距离。
混合光源的行为如下:
- 由混合光源照亮的动态 GameObject 将接收:
- 实时直接光照。
- 烘焙间接光照(使用光照探针)。
- 动态 GameObject 的阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
- 静态 GameObject 的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
- 由混合光源照亮的静态 GameObject 将接收:
- 实时直接光照。
- 烘焙间接光照(使用光照贴图)。
- 静态 GameObject 的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
- 动态 GameObject 的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
阴影和运行时性能
由于混合光源造成的所有阴影在烘焙间接光照模式下都是实时的,因此可能会影响性能。可以使用阴影距离属性来限制 Unity 绘制实时阴影的最大距离,从而降低这一影响。
阴影遮罩
与烘焙间接光照模式类似,阴影遮罩光照模式也结合了实时直接光照和烘焙间接光照。但阴影遮罩光照模式在渲染阴影的方式上与烘焙间接光照模式有所不同。阴影遮罩光照模式让 Unity 能够在运行时结合烘焙阴影和实时阴影,并渲染远处的阴影。其实现这一点的方法是使用被称为“阴影遮罩 (shadow mask)”的附加光照贴图纹理,并在光照探针中存储附加信息。Unity 会为烘焙阴影生成阴影遮罩和光照探针遮挡数据。
阴影遮罩光照模式在所有光照模式中提供最高保真度的阴影,但性能开销和内存要求也是最高的。此模式适用于在高端或中档硬件上渲染远处存在可见 GameObject 的真实场景,例如开放世界。
使用质量设置 (Quality Settings) 面板可以设置 Unity 在运行时使用的阴影遮罩模式。
-
距离阴影遮罩 (Distance Shadowmask) 的性能开销更高,提供的阴影保真度也更高。
-
阴影遮罩 (Shadowmask) 的性能开销较低,提供的阴影保真度也较低。
使用距离阴影遮罩质量设置
当场景的光照模式为阴影遮罩 (Shadowmask) 且项目使用距离阴影遮罩 (Distance Shadowmask) 质量设置时,混合光源的行为如下。
- 由混合光源照亮的动态 GameObject 将接收:
- 实时直接光照。
- 烘焙间接光照(使用光照探针)。
- 动态 GameObject 的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
- 静态 GameObject 的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
- 静态 GameObject 的烘焙阴影(使用光照探针),超过阴影距离 (Shadow Distance)。
- 由混合光源照亮的静态 GameObject 将接收:
- 实时直接光照。
- 烘焙间接光照(使用光照贴图)。
- 动态 GameObject 的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
- 静态 GameObject 的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
- 静态 GameObject 的烘焙阴影(使用阴影遮罩),超过阴影距离 (Shadow Distance)。
使用阴影遮罩质量设置
当场景的光照模式为阴影遮罩 (Shadowmask) 且项目使用阴影遮罩 (Shadowmask) 质量设置时,混合光源的行为如下。
- 由混合光源照亮的动态 GameObject 将接收:
- 实时直接光照。
- 烘焙间接光照(使用光照探针)。
- 动态 GameObject 的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
- 静态 GameObject 的烘焙阴影(使用光照探针),不超过以及超过阴影距离 (Shadow Distance)。
- 由混合光源照亮的静态 GameObject 将接收:
- 实时直接光照。
- 烘焙间接光照(使用光照贴图)。
- 动态 GameObject 的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
- 静态 GameObject 的烘焙阴影(使用阴影遮罩),不超过以及超过阴影距离 (Shadow Distance)。
阴影遮罩实现的细节
在运行时,Unity 会使用阴影遮罩来确定某个像素是否在阴影中。阴影遮罩纹理包含了关于烘焙光源的遮挡信息。该纹理使用的 UV 布局和分辨率与对应的光照贴图所用的一致。还包含了针对每个纹素最多四个光源的遮挡信息(以 RGBA 格式存储)。
如果发生重叠的光源超过四个,则多余的光源会回退至烘焙光照模式。烘焙系统会决定哪个光源回退至烘焙光照,并在各烘焙之间保持一致,除非您修改其中某个重叠的光源。光照探针也会接收最多四个光源的相同信息。
Unity 会针对接收阴影的对象独立计算光源重叠。因此,一个对象可受到全部来自同一个阴影遮罩/探针通道的十个不同混合光源的影响,只要这些光照边界体积在空间中的任何点都不重叠即可。如果有光源发生重叠,则 Unity 会使用更多通道。如果有光源发生重叠,且所有四个通道都在使用中,则该光源将回退至完全烘焙。
阴影和运行时性能
可以使用阴影距离属性来限制 Unity 绘制实时阴影的最大距离。
减算
在减算 (Subtractive) 光照模式下,场景中的所有混合光源都提供烘焙直接光照和间接光照。Unity 会将静态 GameObject 投射的阴影烘焙到光照贴图中。除了烘焙阴影外,一种方向光(即主方向光 (Main Directional Light))还会为动态 GameObject 提供实时阴影。
因为阴影被烘焙到了光照贴图中,Unity 缺少在运行时准确结合烘焙阴影和实时阴影所需的信息。但是,Unity 提供了实时阴影颜色 (Realtime Shadow Color) 属性来减少光照贴图的贡献,从而在烘焙阴影和实时阴影之间创建正确混合的假象。您还可以调整该颜色来实现特定的艺术风格。
减算光照模式适合用于低端硬件,因为低端硬件需要注重性能,并且只需要一个实时阴影投射光源。这种光照模式不会提供特别逼真的光照效果,更适合用于风格化的美术,例如卡通渲染。
Unity 会自动在场景中选择强度值最高的方向光作为主方向光。
当场景的光照模式为减算 (Subtractive) 时,混合光源的行为如下。
- 由混合光源照亮的动态 GameObject 将接收:
- 实时直接光照
- 烘焙间接光照(使用光照探针)
- 由主方向光照亮的动态 GameObject 的实时阴影,使用阴影贴图,不超过阴影距离 (Shadow Distance)
- 静态 GameObject 的实时阴影(使用光照探针)
- 由混合光源照亮的静态 GameObject 将接收:
- 烘焙直接光照(使用光照贴图)
- 烘焙间接光照(使用光照贴图)
- 静态 GameObject 的烘焙阴影(使用光照贴图)
- 由主方向光照亮的动态 GameObject 的实时阴影,使用阴影贴图,不超过阴影距离 (Shadow Distance)