贴花
高清渲染管线 (High Definition Render Pipeline, HDRP) 包括两种在场景中创建贴花的方法。可以使用贴花网格并手动放置贴花,也可以使用 Decal Projector 组件来投影贴花。这两种方法都要求创建贴花材质,即一种使用贴花着色器 (Decal Shader) 或贴花主栈 (Decal Master Stack) 的材质。可使用任一方式创建放置或投影到场景中的贴花材质。
限制和兼容性
贴花投影器 (Decal Projector) 可以影响使用贴花着色器 (Decal Shader) 或贴花主栈 (Decal Master Stack) 的不透明材质。但是,只能影响使用贴花着色器的透明材质。不支持透明材质上的发光,但支持贴花层。 贴花网格只能影响具有贴花着色器或贴花主栈的不透明材质。贴花网格也不支持贴花层。
贴花层
启用贴花层
要使用贴花层,首先在项目的 HDRP 资源中启用贴花层。然后,可以在帧设置 (Frame Settings) 中启用贴花层,从而设置摄像机来处理贴花层。
- 在 Project 窗口中选择 HDRP 资源,然后在 Inspector 中找到 Decal > Layers,并启用相应复选框。
- 要在所有摄像机的默认帧设置中启用贴花层,请在 HDRP 资源中找到 Default Frame Settings For 部分,从下拉选单中选择 Camera,然后在 Rendering 部分中启用 Decal Layers 复选框。
要覆盖摄像机的帧设置并单独设置贴花层,请执行以下操作:
- 在 Scene 视图或 Hierarchy 窗口中单击摄像机以在 Inspector 中查看其属性。
- 找到 General 部分并启用 Custom Frame Settings 复选框。这会显示 Frame Settings Overrides,仅可用于自定义此摄像机。
- 在 Rendering 部分中,启用 Decal Layers 复选框以使此摄像机使用贴花层。
使用贴花层
启用贴花层后,可以使用贴花层将网格与场景中的某些贴花投影器分离。为此需要执行以下操作:
- 单击 Hierarchy 或 Scene 视图中的贴花投影器 (Decal Projector) 以在 Inspector 中查看该贴花投影器。
- 使用 Decal Layer 属性下拉选单选择此贴花投影器所影响的贴花层。
- 单击 Hierarchy 或 Scene 视图中的网格渲染器 (Mesh Renderer) 或地形 (Terrain) 以在 Inspector 中查看该网格渲染器或地形。
- 使用 Rendering Layer Mask 属性下拉选单(对于游戏对象,请参阅 MeshRenderer,对于地形,请参阅 OtherSettings)选择影响此网格渲染器或地形的贴花层。启用贴花层时,贴花影响网格渲染器或地形的前提是二者都使用匹配的贴花层。
重命名贴花层
默认情况下,在贴花投影器、网格渲染器或地形的 UI 中,贴花层被命名为 Decal Layer 1-7。为了更容易区分这些贴花层,你可以为每个贴花层指定一个特定的名称。为此,请打开 Default Settings 窗口,然后找到 Decal Layer Names。在此处可以分别设置每个贴花层的名称。
性能影响
启用贴花层需要增加内存,具有 GPU 性能成本,并会生成更多的着色器变体(因此会增加构建时间)。
如果使用贴花层系统通过网格渲染器或地形的 Rendering Layer Mask 禁用贴花,并不会提高性能。实际上,为了提高性能,需要为网格渲染器或地形的材质禁用 Receive Decals 属性。
实现细节:要允许 HDRP 将贴花应用于不透明材质,它必须在深度预通道 (Depth Prepass) 中渲染深度,这会增加操作的 CPU 资源消耗量。只有启用了 Receive Decals 的材质才会在深度预通道中渲染,除非强制执行完全的深度预通道。如果使用贴花层系统禁用贴花,HDRP 仍会在深度预通道中渲染贴花。这就是为什么需要为材质禁用 Receive Decals 属性来提高性能。
迁移 Unity 2020.2 之前的数据
在 Unity 2020.2 之前,新的网格渲染器和地形的 Rendering Layer Mask 默认值不包含任何贴花层标志。这意味着,启用贴花层时,这些网格渲染器和地形默认不接收任何贴花。后续版本默认使用 Decal Layer Default。