热门
Unity2021.2版本着色器图形新功能概览
随着Unity 2021.2的发布,Unity在Shader Graph中引入了一些令人兴奋的新功能,例如通用渲染管道(URP))中的表面选项支持、自定义插值器和Blackboard分类等,这些功能大大提高了艺术家工作流和着色器性能。
在本篇文章中,将使用之前由Unity发布的维京村项目来向大家逐一介绍这些全新添加的功能,并指导大家利用这些新的着色器图形功能重新创建项目中使用的一些着色器。废话不多说让我们开始吧!
维京村资产包
维京村演示项目时候使用Unity的2021.2 beta 7版本和URP模板创建的一个新的URP项目。当你有新的相似项目时,就可以直接下载并导入维京村URP包。下面让我门来看看在维京村演示中究竟使用了什么新功能。
URP表面选项
我们使用的第一个功能是对URP表面选项的支持功能。该功能允许我们将“光照”或“未光照着色器图形”着色器的“表面选项”属性传递给材质检查器。通过启用“允许材质覆盖”选项,我们可以在材质检查器级别中选择常用属性,如“表面类型”、“Alpha剪辑”或“阴影”。下面让我们仔细看看在示例项目中的这个选项的作用。
维京村URP资产包包含许多不同的材料。在多种情况下,材质具有不同的表面选项设置。但是,在材质中使用的着色器没有很大的区别。图形检查器上的新选项“允许材质覆盖”可以让我们覆盖每个材质着色器图形中的“表面选项”,因此,我们可以基于单个着色器图形资源创建具有不同设置的材质。
我们来看一些例子。在项目中启用Mat_fence_02.mat、standard.shadergraph和Mat_strawroof_01.mat,standard.shadergraph是Alpha剪辑启用的版本。在图形检查器中启用“允许材质覆盖”选项后,通过相同的着色器,我可以使用Alpha剪辑控制材质级别以此获得不同的材质变体。
启用“允许材质覆盖”选项后,我们还可以在材质检查器的“金属粗糙度”工作流和“镜面光泽度”工作流之间轻松切换。
以此项目中的Lit_SSS_Cutout.shadergraph为例。该着色器用于项目中的不同植被材质,默认情况下设置为“金属”工作流。如果我们只想使用着色器将一个特定的材质转换为镜面工作流,启用“允许材质覆盖”选项后,我们可以覆盖材质检查器上的设置,同时不接触正在使用着色器的其他材质。
自定义插值器
现在我们已经熟悉了项目和一些着色器资源,接下来将向大家展示着色器图形的一个全新功能自定义插值器。
通过使用自定义插值器,我们能够将信息从顶点阶段传递到碎片阶段,以获得更好的着色器性能。
我们可以用一个简单的噪声节点平铺和偏移UVs来举例,以获得一些泡沫纹理的扭曲效果。泡沫纹理本身利用RGB通道存储不同密度的泡沫纹理。为了获得更真实的结果,不同的通道会向相反的方向扭曲。为了使泡沫不那么僵硬,我们使用波浪的法线贴图作为遮罩,这样泡沫就可以自然地融入波浪。泡沫的计算在顶点阶段进行并将信息传递到碎片阶段,能够大幅提升着色器性能。
下面再让我们看看着色器中法线贴图平铺的功能。
为了获得更好的波浪效果,原始着色器将两个法线贴图平铺在不同的方向上,并且计算都是以每像素为单位的方式进行的。在这里,有了自定义插值器的支持,我们现在可以将UVs平铺部分移动到顶点阶段。
为了看到使用自定义插值器带来的性能提升,我们构建了两个版本,两个版本只交换了水着色器。一个水着色器使用自定义插值器,另一个没有。我们通过使用PIX从每个构建中捕获每一帧,来分析GPU上的渲染成本。通过下图我们可以明显的看到在使用自定义插值器的着色器中,水着色器的绘制调用持续时间显著减少了33%。
使用自定义插值器时,需要注意的一点是,在片段阶段执行的操作要比在顶点阶段执行的更加频繁。在某些情况下,将计算移动到顶点阶段可能会导致视觉效果中微小细节的丢失。自定义插值器功能最多支持32个通道。且不同平台和GPU有不同的插值器变量限制。
Blackboard分类
随着着色器变得越来越复杂,许多属性可能很难在Blackboard上进行导航。现在,我们能够使用新的Blackboard分类创建自定义属性组,并在材质检查器中将它们显示为可扩展的部分。
我将继续使用水着色器作为示例。在着色器图形的Blackboard中,我们将所有法线贴图属性分组到一个名为“波法线”的类别中。然后,当我门在场景中工作并想要在材质检查器中调整属性值时,我可以轻松导航到该组。我也可以折叠它来节省检查器中的空间。
我们在这篇文章中谈到的所有功能现在都可以在Unity 2021.2的全新Shader Graph包中获得。
电话:010-50951355 传真:010-50951352 邮箱:sales@souvr.com ;点击查看区域负责人电话
手机:13811546370 / 13720091697 / 13720096040 / 13811548270 /
13811981522 / 18600440988 /13810279720 /13581546145