Version: 2019.1
Shadowmask
Subtractive 模式

Distance Shadowmask

Distance Shadowmask__是 Shadowmask(阴影遮罩)__光照模式的一个版本。该模式由场景中的所有混合光源共用。要将 Mixed lighting 设置为 __Distance Shadowmask__,请执行以下操作:

  • 打开 Lighting 窗口(菜单:__Window__ > Rendering > Lighting Settings__),单击 Scene__ 选项卡,导航至 Mixed Lighting__,然后将 Lighting Mode__ 设置为 Shadowmask
  • 接下来,打开 Quality 设置(菜单:__Edit__ > Project Settings__,然后选择 Quality__ 类别),导航至 Shadowmask Mode__,然后将其设置为 Distance Shadowmask__。

请参阅混合光照相关文档以了解有关此光照模式的更多信息,并参阅光照模式相关文档以了解有关其他可用模式的更多信息。

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

Distance Shadowmask 模式是 Shadowmask 光照模式的一个版本,可提供从静态游戏对象投射到动态游戏对象的高质量阴影。

在__阴影距离 (Shadow Distance)(菜单:__Edit > Project Settings__,然后选择 Quality__ 类别,并导航到 Shadows 部分)内,Unity 会将动态和静态游戏对象渲染到阴影贴图中,可让静态游戏对象将清晰的阴影投射到动态游戏对象上。基于此原因,__Distance Shadowmask__ 模式相对于 Shadowmask 模式具有更高的性能要求,因为场景中的所有静态游戏对象都将渲染到阴影贴图中。

超出__阴影距离__:

  • 静态游戏对象通过预先计算的阴影遮罩从其他静态游戏对象接受高分辨率阴影。
  • 动态游戏对象通过光照探针从静态游戏对象接受低分辨率的阴影。

适合使用 Distance Shadowmask 模式的一个很好的例子是,您想要构建一个开放的世界场景,其中的阴影延伸到地平线,复杂的静态网格在移动的角色上投射实时阴影。

Shadows

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

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

Distance Shadowmask 模式的优缺点

鉴于 Distance Shadowmask 模式的性能要求,该模式非常适合以高端 PC 和最新款游戏主机为目标的构建。Distance Shadowmask 模式最主要的优缺点如下:

优点

  • 提供与实时光照相同的视觉效果。
  • 提供从动态游戏对象投射到静态游戏对象上和从静态游戏对象投射到动态游戏对象上的实时阴影。
  • 着色器中的一个纹理操作即可处理静态游戏对象之间的所有光照和阴影。
  • 自动合成动态和静态阴影。
  • 提供间接光照。

缺点

  • 最多只允许 4 个重叠的光源体积(请参阅混合光照的“技术细节”部分下的文档以了解更多信息)。
  • 增加了光照贴图纹理集的内存要求。
  • 增加了阴影遮罩纹理的内存要求。
  • 增加了性能要求,因为 Unity 会将光照和阴影从静态游戏对象渲染到阴影贴图中。

  • 2017–09–18 页面已发布并只进行了有限的编辑审查

  • 在 5.6 版中添加了“光照模式”

Shadowmask
Subtractive 模式