在技术与美术协作的项目中,由于开发团队与美术团队存在审美代沟与技术壁垒,常陷入反复沟通难达预期美术效果的困境。本篇内容将通过unity的shader Graph入门知识分享,使美术人员能具备自主调试材质效果的能力,大大缩短效果还原的工时投入,同时还能提升项目最终的美术效果。
满满干货,欢迎先点赞收藏再阅读哦~~
一、unity安装
1.1
安装unity hub
unity hub是unity官方的一个集中化平台,方便管理和使用多个不同版本的unity。我们可以通过unity hub来下载对应项目的unity版本,在unity hub上可以很方便的切换不同版本的使用。(unity hub下载网址:https://unity.cn/releases)
1.2
创建新项目
在项目中需要与开发团队对齐unity的版本。如果是自主创建的话,优先选择URP管线的核心模板,如图1.2.1。需要注意的是,项目命名规范要避免中文路径和特殊符号。
二、创建Shader Graph
2.1
配置URP渲染管线
如果对应版本里没有URP的模板,我们可以创建常规的3D模板,然后在工程中将模板升级到URP的模板。
先打开Windows——Package Manager,选中unity仓库,如图2.1.2所示。选中仓库后,搜索universal,将universal RP添加到工程里。
我们可以点开Edit—project settings,点击Graphics,可以看到工程里面的渲染管线依旧是None,此时的工程依旧是一个3D的工程。
在空白处右键,调出Create—Rendering—URP Asset(with Universal Renderer),然后再将URP的资产拖入设置中,完成URP管线的项目配置,如图2.1.7所示。
2.2
新建Shader Graph材质
右键新建shader Graph材质:Create—Shader Graph—URP—Lit Shader Graph。
在3D 场景中主要使用的是Lit Shader Graph 和Lit Shader Graph。
Lit Shader Graph带有光照模型,属于常规的PBR流程的模型。可以创建类似真实世界的光照漫反射,镜面反射,金属质感等效果。
Unlit Shader Graph没有光照模型,需要额外编写光照计算流程。一般用来制作不依赖于固定的光照模型,可以根据需要进行更定制化的处理。
右键新建的graph,选择Create——Material,创建出对应的材质,如图2.2.2。我们将创建的材质直接拖入到左侧Hierarchy 列表中的模型中,即可将材质赋予模型。
三、Shader Graph核心节点
3.1
界面认识
双击shader graph,会自动打开对应的shader graph编辑窗口。
①面板:scene是场景面板,game是运行的效果面板,第三个是我们创建的shader graph的面板,Lit shader graph是shader graph 的名字。
②顶部工具栏:Save Asset和Save As是用来保存或另存为当前Shader Graph 文件;Show In Project可以在项目窗口中定位该Shader Graph 文件。
③属性面板:可以通过点击加号增加属性,该属性会释放出参数,可以直接在材质对应的细节面板调节参数,无需进入shader graph的面板。
④shader graph属性:分为Vertex 模块(顶点着色阶段)和Fragment 模块(片元/像素着色阶段)
|
Vertex 模块 |
|
|
Object Space |
基于物体自身坐标系的输入数据 |
|
Position |
顶点位置,可修改顶点位移,如波浪效果 |
|
Normal |
顶点法线方向,影响光照计算 |
|
Tangent |
顶点切线方向,常用于法线贴图计算 |
|
Fragment 模块 |
|
|
Base Color |
定义材质基础颜色,可直接输入颜色或连接纹理 |
|
Normal |
切线空间下的法线输入,需连接法线贴图 |
|
Metal |
金属度0=非金属,1=金属,影响反射强度 |
|
Smoothness |
光滑度,0=粗糙,1=镜面般光滑 |
|
Ambient Occlusion |
环境光遮蔽,控制阴影区域明暗 |
|
Smoothness |
光滑度,0=粗糙,1=镜面般光滑 |
|
Color Specular |
定义材质高光颜色,可直接输入颜色或连接纹理 |
⑤属性面板:Node Settings,用于调整节点的全局参数;Graph Settings,用于调整着色器的全局参数。
⑥材质效果预览:顾名思义,用于预览材质效果。
⑦主要控制界面:用来摆放节点,链接shader graph属性。
3.2
常用工作流
我们使用ShaderGraph来模拟世界之中万物表现状态,但经过经验的堆叠,我们才有了如下的两套工作流程,来更快更优秀的辅助我们模拟万物表现状态。
~工作流的具体使用并无具体绑定局限,而是可以自由探索组合的。
1- Metallic-Roughness:常用工作流(尤其是非透明态/金属材质)
在本工作流中,此效果更加倾向于光线反射状态的表现,所以其表达状态更加倾向于对金属的模拟,而对于金属的模拟在效果制作中可视为模拟万物的“常用模板”。
在使用时,需要将WorkFlow Mode 选择为 Metallic,然后添加color 节点到 base color控制物体表面颜色;添加Float 节点到Metallic 控制物体对光线的反射强度;添加Float 节点到smoothness 控制物体表面的光滑度。以上三个节点均可以使用纹理贴图控制,还可以再添加法线贴图到Normal通道,切记法线贴图需要将Type 修改成Normal 才能进行正确的运算,否则显示效果会“超”预期。
2- Specular-Glossiness:特殊性工作流(尤其透明态/玻璃材质)
在本工作流中,此效果更加倾向于光线折射状态的表现,所以其表达状态更加倾向于对玻璃等透明态模拟。
在使用时,需要将WorkFlow Mode 选择为Specular,如果将Surface Type选项修改为Transparent属性,这样在Fragment面板会给予我们提供一个“Alpha属性值”,来让我们修改该材质的透明状态(尤其是制作玻璃效果的时候!),而此时的Specular Color可以使用Color来控制材质表达物体高光反射时的颜色,其他的都与金属材质相同。
那么就我们来一起体验一下玻璃材质的制作流程吧!
首先,玻璃代表着透明效果,那么我们将使用到Specular-Glossiness的工作流程
我们将使用到Alpha节点和BaseColor节点
Alpha可以提供给我们想要模拟的玻璃的透明效果,而BaseColor则可以提供给我们想要的玻璃色彩(当然我们也可以通过贴图的接入,使得玻璃的表现更加出众)
~如此以上,就可以完成一个简易的玻璃效果了!
但透明的玻璃也有很多种状态,尤其是高光的反射和折射效果,这些效果从各个视角反过来都是不同表现。那么仅仅依靠这么一个Alpha属性节点肯定是不足以支撑效果实现了。
为简单实现以上预想。那么,我们可以在原有“简易玻璃的”的基础之上,对其光滑度进行控制;介入相机视角和视觉视角,让其发挥作用(点叉乘计算),来模拟还原预期的观察效果。
3.3
贴图应用
贴图导入:我们可以直接将图片拖进去编辑界面中,直接连接其他节点进行效果制作。但法线贴图就需要将Type 修改成Normal 才能进行正确的运算。
图3.3.1 导入贴图
添加tiling 和offset:首先添加UV节点,右键控制界面,选择Create Node即可创建节点。输入UV,调出UV节点。
然后在属性面板点击加号,添加Vertor 2 的属性输入,分别命名为tiling 和offset,将tiling 与UV相乘,offset 与UV相加,如图3.3.4所示。
图3.3.4 编辑tiling 和offset
保存即可在场景中直接编辑材质的Tiling 和offset属性。
3.4
常用数字运算节点
Add:将输入的两个数值相加,输入的数值必须是相同的类型。
Multiply:将两个输入值相乘,当输入的是两张贴图的时候,输出结果与PS的正片叠底相同。在项目中经常会将贴图与参数相乘,让参数起到控制贴图亮度/强度的作用。
Lerp (Linear Interpolate):线性插值,混合两个输入值(如颜色过渡、透明度渐变)。
saturate:将输入值钳制在0到1的范围内。这在处理颜色值或其他需要限制在特定范围内的参数时非常有用。
了解了基础的材质知识和节点知识以后,已经能够满足大部分基础材质的制作需求了。结合以上的知识点以及开发团队释放的可调参数,美术团队已经能够在项目开发中直接投入到Unity的美术效果调节了。
如果想了解更多关于Unity HMI 3D解决方案的信息,欢迎发送邮件至mkt@eptcom.com联系我们。
更多推荐

