Version: 5.6
Distance Shadowmask mode
Subtractive 模式

Shadowmask mode

Shadowmask mode is a lighting mode shared by all Mixed Lights in a Scene. To set Mixed lighting to Shadowmask, open the Lighting window (menu: Window > Lighting > Settings), click the Scene tab, navigate to Mixed Lighting and set the Lighting Mode to Shadowmask. See documentation on Mixed lighting to learn more about this lighting mode, and see documentation on Light modes to learn more about the other modes available.

阴影遮罩是一种纹理,它与相应的光照贴图共享相同的 UV 布局和分辨率。它存储每个纹理像素的最多 4 个光源的遮挡信息,因为纹理在当前 GPU 上限制为最多 4 个通道。

Unity 预先计算从静态游戏对象投射到其他静态游戏对象的阴影,并将它们存储在单独的阴影遮罩纹理中,最多达 4 个重叠光源。如果超过 4 个光源重叠,则多余光源会回退至烘焙光照。具体要回退至烘焙光照的光源视烘焙系统而定并在各烘焙之间保持一致,除非修改其中某个光源重叠。光照探针还会接收多达 4 个光源的相同信息。

Shadowmask 模式下:

  • 无论__阴影距离 (Shadow Distance)(菜单:__Edit > Project Settings > Quality > __Shadows__)如何,静态游戏对象始终通过阴影遮罩接受其他静态游戏对象投射的阴影。它们也会接受动态游戏对象投射的阴影,但仅限于__阴影距离__内的阴影。

  • 动态游戏对象通过阴影贴图接受其他动态游戏对象投射在__阴影距离__内的阴影。它们也会通过光照探针接受静态游戏对象投射的阴影。阴影保真度取决于场景中的光照探针的密度以及在网格渲染器 (Mesh Renderer) 上选择的__光照探针__模式。

Unity 会自动合成来自静态和动态游戏对象的重叠阴影,因为阴影遮罩(其中保存静态游戏对象光照和阴影信息)和阴影贴图(其中保存动态游戏对象光照和阴影信息)仅编码遮挡信息。

适合使用 Shadowmask 模式的一个很好的例子是,您想要构建一个几乎完全静态的场景,使用镜面反射材质、柔和的烘焙阴影和动态阴影投射物,不要太靠近摄像机。另一个很好的例子是一个开放世界的场景,其中的烘焙阴影延伸到地平线,但没有动态光照,如白天/夜晚循环。

Shadows

下表显示了使用 Shadowmask 模式时静态和动态游戏对象如何投射和接受阴影:

动态阴影接受者
从另一个静态或动态游戏对象接受阴影的动态游戏对象
静态阴影接受者
从另一个静态或动态游戏对象接受阴影的静态游戏对象
在阴影距离内 超出阴影距离 在阴影距离内 超出阴影距离
动态阴影投射物
投射阴影的动态游戏对象
阴影贴图 - 阴影贴图 -
静态阴影投射物
投射阴影的静态游戏对象
光照探针 光照探针 阴影遮罩 阴影遮罩

Shadowmask 模式的优缺点

鉴于 Shadowmask 模式的性能要求,该模式非常适合以中低端 PC 和移动设备为目标的构建。Shadowmask 模式最主要的优缺点如下:

优点

  • 提供与实时光照相同的视觉效果。

  • 提供从动态游戏对象到静态游戏对象的实时阴影。

  • 着色器中的一个纹理操作即可处理静态游戏对象之间的所有光照和阴影。

  • 自动合成静态和动态游戏对象的重叠阴影。

  • 具有中低级别性能要求,因为它不会将静态游戏对象渲染到阴影贴图中。

  • 提供间接光照。

缺点

  • 仅通过光照探针提供从静态游戏对象到动态游戏对象上的低分辨率阴影。

  • It only allows up to 4 overlapping light volumes (see documentation on Technical Details for more information).

  • 增加了光照贴图纹理集的内存要求。

  • 增加了阴影遮罩纹理的内存要求。


Distance Shadowmask mode
Subtractive 模式