原创作品

使用Amplify Shader Editor实现简单的流光效果

唐福幸 发表于   2021-11-01 11:20:35
1262
1
8

在游戏中当我们把武器强化到一定级别之后,会出现一条或者多条绚丽的光束在不停地缠绕着武器流动;或者当我们通关之后,掉落在地上的奖品也会出现类似效果的光束;再或者当角色获得某种Buff之后,角色身上也会出现类似效果。像这种用来表现特殊状态的特效被称为“流光”。

实现逻辑

我们使用一张绚丽的纹理贴图并设定一个适合的Blending模式,即可实现静止的流光效果。

至于流光的动态效果,实现逻辑也非常简单。我们通过_Time变量使纹理坐标沿着一个固定的方向持续递增,然后使用该纹理坐标对一张光束的纹理贴图进行采样。采样之后的纹理效果就会随着时间持续偏移,于是就产生的流动的效果。

ASE Shader设置

首先对ASE的Shader进行如下设置:

在SubShader设置面板中,我们关闭Cull Mode使物体的背面也可以被渲染,然后将预设的混合模式设置为“Additive”,其实就是Blend One One混合指令。

因为使用了Blending,因此我们需要在Tags的设置面板中添加上“RenderType”和“Queue”标签,然后都设置为“Transparent”。

ASE节点连接

设置完Shader之后,我们开始讲解节点连接,以下为完整的节点:

我们添加一个“Time Parameters”节点,然后使用它的x分量(也就是t / 20)乘上一个名称为“Flow Speed”的数值变量用来控制时间递增的速度。

由于我们并不确定在使用的时候光束是沿纹理坐标的x方向还是y方向流动,因此我们把这两个方向的效果都实现,然后在使用的时候根据需要进行选择。我们将时间分别与纹理坐标的x分量和y分量相加,用来分别控制x方向和y方向的偏移,然后再与纹理坐标的另外一个分量重新组成二维坐标,最后分别连接到“Static Switch”节点上,节点设置如下:

Static Switch节点在材质面板上默认是以开关的形式进行显示,而我们希望的显示方式为下拉选项,因此我们将Type设置为“Keyword Enum”,也就是我们在“自定义材质面板”那一章中讲过的“关键词枚举”。然后我们将枚举的名称设置为“Flow Direction”,将关键词设置为“X”和“Y”。

设置完之后我们把节点连接到纹理节点的UV上,在使用的时候就可以根据需要选择对应偏移方向的纹理坐标了。我们把采样之后的结果再乘上一个名称为“Color”的颜色,用来控制流光的颜色和亮度。至此,节点连接全部完成。

测试效果

在ASE中编辑完Shader之后,我们开始测试效果。首先我们需要在3D软件中按照光效的流动轨迹环绕物体创建出带状模型。需要注意的是,带状模型的UV一定要完全打直。什么叫打直?就是横向的UV保持水平,纵向的UV保持垂直,不能有任何弯曲。

准备好模型之后我们还需要准备一张表现光束的纹理贴图,贴图要求必须是可重复的(Tiling),或者也可以称之为无缝的(Seamless),只有这样的贴图才会在增加平铺值的时候不会出现纹理接缝。如果我们不确定一张贴图是否无缝,可以通过Photoshop的位移功能进行检查,点击菜单滤镜 > 其它 > 位移,在弹出的设置窗口中更改水平或者垂直的位置距离之后,就可以看到纹理边界是否有接缝了。

我们将物体模型、带状模型、光束贴图都导入到Unity中,然后调节好材质参数,最终效果如下图所示:

d32f7e7e-ec6d-11ea-acfd-5ab503a75443.gif



没有标签
确定
评论(1)
还没有人评论,快来抢沙发吧!