欢迎光临散文网 会员登陆 & 注册

Unity学习笔记 Vol.68 使用 Unity Shader Graph 制作自定义内容

2020-08-30 08:29 作者:NXL2  | 我要投稿

摘要

    这节,我们将共同了解如何使用Unity URP Shader Graph功能来制作自定义内容,如船体的喷漆和外观。详细教程请参照官方视频。


教程

    我们将学习使用ShaderGraph和Unity通用渲染管线,来为玩家船体添加自定义涂装。

    在《Boat Attack》demo中,我们建立了一个允许玩家选择船体风格和涂装颜色的系统,系统使用ShaderGraph中的自定义着色器制作,使用了遮罩纹理来修改船体不同部位的颜色。

    我们来看看如何自行创建一个类似的着色器,建立在运行时设定材质数据的系统。这个赛艇模型看起来有点太“朴素”了,我们来在ShaderGraph中为它创建个着色器,并为自定义系统添加遮罩着色器。

    选择Create>Shader>PBR Graph,命名为Boat Mask。

    右击选择Create>Material为着色器创建个材质。

    将它指定到船体网格上。

    我们首先来设置好纹理,这里有三张图片,正好组成了船体所需的纹理,《Boat Attack》demo使用了打包后的纹理,以优化对多平台的支持。我们将不同的纹理打包成了一个图片文件,需要将通道拆分,分别导入到最终纹理贴图中。

    在黑板中,创建三个Texture2D属性,第一个用作Albedo和AO,第二个的红色通道包含Metallic(金属)贴图,绿色通道包含Smoothness(平滑度)贴图,蓝色和alpha通道包含色彩遮罩贴图,最后一个纹理将用作法线贴图。

    在图表中创建三个SampleTexture2D节点,将纹理连接到节点上,将最后一个SampleTexture2D节点的类型设为Normal。

   我们能将通道接入Preview节点,来查看打包进Texture2D图像的各个纹理,接着将各主要纹理连接到对应的主节点端口。

    可以看到,船体纹理添加完成,可以涂上颜色了。接下来在着色器中添加颜色自定义功能。

    在黑板中添加两种颜色属性,称作Primary Color和Secondary Color,别忘了设定名称参照,将参照分别设为_PrimaryColor和_SecondaryColor,添加两个Multiply节点,在此处接入第一个遮罩和PrimaryColor,然后接入第二个遮罩,乘上Secondary Color,将两个节点的输出传入一个Add节点。

    这时如果更改黑板中属性的默认颜色,会看见两者的颜色会相互结合,这两个遮罩现在成为了船体的色彩纹理。

    最后我们需要为Albedo纹理添加上这些细节,使用Multiply节点连接两者的输出。

    将结果接入主节点的Albedo端口。

    这时再看到场景中的船,我们就能通过修改检视器中飘逝地的颜色,来自定义船体外观了,此类着色器可以给场景内模型添加各种变体,不必再重新制作纹理或模型。

    我们可以制作一个UI来修改材质的颜色。

    在检视器中能看到,每个图标的GameObject都带有一个Button组件,当按键被按下时,会调用UI脚本上的SetPrimaryColor或SetSecondaryColor方法。

    将索引值传入脚本,来指代脚本颜色数组中的特定颜色。经由SharedMaterial属性来访问网格上的材质,在材质上调用SetColor方法。

 

   借助此前设定的参照名称来访问着色器上的颜色属性,将其设为数组中索引值对应的颜色,ShaderGraph可轻松借助脚本修改设定,借助此类可编程行为进一步定制材质,要想进一步了解Unity Shader Graph,请下载《Boat Attack》demom尝试各个内容。

Unity学习笔记 Vol.68 使用 Unity Shader Graph 制作自定义内容的评论 (共 条)

分享到微博请遵守国家法律