Unity学习笔记 Vol.61 使用URP的自定义渲染过程

1.简介
通用渲染管道(URP)是Unity新的可脚本渲染管线的子集,该新脚本于Unity 2019.3。它取代了Unity 2018.3中的轻量级渲染管线(LWRP)。像LWRP一样,URP使开发人员可以使用自定义渲染过程通过自定义效果扩展Unity的图形管线。与普通的着色器和效果不同,这些通道独立于相机,并且可以在整个项目中持续存在,而无需为每个场景进行设置。
注意:与LWRP一样,URP与Unity的标准渲染器或HDRP不兼容。
通用渲染管线(URP)是Unity新的可脚本渲染管线的子集,该新脚本于Unity 2019.3。它取代了Unity 2018.3中的轻量级渲染管道(LWRP)。像LWRP一样,URP使开发人员可以使用自定义渲染过程通过自定义效果扩展Unity的图形管道。与普通的着色器和效果不同,这些通道独立于相机,并且可以在整个项目中持续存在,而无需为每个场景进行设置。
注意:与LWRP一样,URP与Unity的标准渲染器或HDRP不兼容。

2.管线设置
首先,我们必须首先设置我们的项目以使用URP。
通过导航到Window> Package Manager 并搜索Universal RP 来导入URP软件包(下图 )。

安装我们的软件包后,让我们创建一个新的URP资产。
右键单击Assets文件夹,然后导航到Create> Rendering> Universal Render Pipeline> Pipeline Asset 。将在URP旁边自动创建一个新的Forward Renderer。将其重命名为Outline Renderer 。它将负责实现卡通轮廓效果。
现在,我们必须告诉我们的项目使用我们创建的Asset和Renderer。
导航到“ Edit(设置)”>“Project Settings(项目设置)”>“Graphics(图形)” 。在“ 可脚本编写的渲染管道设置(Scriptable Render Pipeline Settings)”下,选择“ URP资产(URP Asset)”(下图)。

您可能会注意到,此步骤不会影响您的项目。这是因为前向渲染器尚未对场景进行任何更改。我们将稍作更改。
3.介绍Toon轮廓着色器和材质
您一开始导入的Toon轮廓着色器由两部分组成:处理生成轮廓所需的渲染操作的实际着色器和将激活着色器的材质。可以在“ 资产”> “着色器”(Assets > Shaders)中找到“着色器”(“ ToonBasicOutline”),而在“ 资产”> “材质”(Assets > Material)中可以找到“ 材质” (下图 )。
着色器的工作方式是反转“网格”的法线(此操作随后使其不再受灯光影响),将其法线超出网格偏移一定的偏移量,然后使用用户定义的RGB颜色对其进行着色。
当将这些拉伸的法线应用于“图层蒙版(Layer Mask)”上的对象时,将在该蒙版内的GameObjects周围显示为轮廓。

4.图层蒙版和带有渲染过程的后期处理
Unity通过多个过程或步骤渲染场景。每个步骤生成一个图像,例如:一个用于反照率(Albedo)(颜色信息),环境光遮挡(Ambient Occlusion)和法线(Normals)的图像。然后将这些图像合成以在屏幕上制作最终图像。将每个绘图调用分成多个遍,可以更好地控制图像的最终外观。卡通轮廓效果是一种后期处理效果,这意味着一旦绘制了场景,它将在整个屏幕顶部呈现。
我们可以将GameObjects分配给不同的层,以明确定义哪些对象将受到此后处理效果的影响(有效地创建蒙版)。
选择要渲染的带有卡通轮廓“材质”的GameObject,单击“ 图层(Layer)” 旁边的下拉菜单,然后选择“ 添加图层(Add Layer)” 。
在检查器中,创建一个名为Character 的新“ Layer Mask” (下图 )。

要使用新的渲染过程扩展自定义的Forward Renderer,请单击它并导航到Inspector。
单击+ ,然后选择渲染对象(Render Objects)。这将创建一个新的渲染过程。让我们将其重命名为 Toon Outline (下图 )。

因为我们希望此渲染过程仅影响角色图层中的对象,所以将“图层蒙版”设置为“ 角色(Character)” 。
接下来,我们将创建材质替代,以定义我们如何在角色层上渲染对象。
单击“替代”旁边的下拉列表,并将我们导入的卡通轮廓“材质”导入到“ 材质(Material)” 插槽中(下图)。

设置此渲染通道后,场景中的GameObject(在此示例中为角色和背景道具)应使用卡通轮廓进行渲染(下图 )。

5.结论
通过使用图层蒙版,我们可以定义如何使用URP中的自定义渲染过程来渲染一组特定的对象。我们还可以选择使用Shader Graph为每个渲染过程中使用的材质提供动力,而不是依赖ShaderLab中的传统HLSL脚本。
卡通轮廓的后期处理效果也可以通过称为Blit的新渲染器功能来实现,该功能是将多个渲染通道合成到单个图像中的方式。该工作流程简介中链接的软件包中提供了Blit Renderer。此方法依赖于Sobel边缘检测和色调分离着色器(与包装一起提供)来创建卡通轮廓材质。