Unity 之 ShaderGraph 实现旋涡[传送门]效果入门级教程

一,最终效果展示

二,创建PBRGraph

三,实现原理介绍

四,完整效果实现

五,应用到场景中


一,最终效果展

老规矩,直接上效果图:

如何向unity传参 unity 传送_Graph

没学习Shader Graph 之前:我靠😱 !这效果有点牛啊,那个大佬写的? 学习了Shader Graph 之后:我去😒 !就这?岂不是有手就行?


二,创建PBRGraph

在Project面板右键 --> Create --> Shader --> PBRGraph:

如何向unity传参 unity 传送_Graph_02

重命名:RPAShaderGraph(随意)

如何向unity传参 unity 传送_ShaderGraph_03

双击RPAShaderGraph打开编辑界面

如何向unity传参 unity 传送_游戏开发_04


三,实现原理介绍

通过Twirl 旋转节点对Gradient Noise 梯度噪声节点进行操作,就可得到一个旋转的旋涡效果。

如何向unity传参 unity 传送_如何向unity传参_05

然后我们添加时间节点调整Twir的偏移量,让其自动转起来,这个动态的旋涡效果基本就实现了。

如何向unity传参 unity 传送_unity_06


四,完整效果实现

就接着三种的效果,继续说吧:

在“PBRGraph”面板空白处 右键 --> 选择“Create Note” 创建Twirl(直接搜索名字即可)。

同理创建“Gradient Noise” 和 “Time” 节点,然后将其输入输出连接如下图:

如何向unity传参 unity 传送_如何向unity传参_07

现在我们已经有了一个动态的旋涡,在一中的效果图上我们可以看到,它并不是黑白色的,下面修改一下颜色:

创建“Color”颜色节点 和 “Multiply”乘法节点,我们将“Gradient Noise”节点的输出 和 “Color”颜色节点的输出都连接到“Multiply”乘法节点的输入上:

如何向unity传参 unity 传送_Graph_08

然后修改下“Color”节点的颜色,就可以得到一个其他颜色的旋涡了:

如何向unity传参 unity 传送_Graph_09

接下来,将带有颜色旋涡的“Multiply”乘法节点输出,连接到”PBR Master”主节点的Albode输入上,即可在预览图上看到旋涡的效果上了:

如何向unity传参 unity 传送_ShaderGraph_10

现在预览效果上显示的是一个正方形的,这个样子看起来有点丑奥~ 而且和想要的效果也不一致,那怎么办呢?

添加一个圆形的遮罩不就行了:添加“Ellipse” 圆形节点,将其输入节点的宽高调整为0.8,然后将输出节点,连接到”PBR Master”主节点的Alpha输入上:

如何向unity传参 unity 传送_Graph_11

然后在点击Master 主节点的“设置”按钮,将“Surface”属性设置为“Transparent” 透明的,即可得到被遮罩的效果了:

如何向unity传参 unity 传送_Graph_12

其实这时的旋涡效果以及完成了,下面我们添加两个变量,来对旋转时间和旋涡的大小进行控制,这样我们就可以在材质球上进行数值修改,从而方便的得到想要的效果。

在“Blackboard” 上创建一个“Verctor1”的变量,将其拖拽到空白处,并赋值给“Twirl”的“Strength”输入,操作步骤如下:

如何向unity传参 unity 传送_如何向unity传参_13

同理我们在创建一个“Verctor1”变量,然后创建一个“Multiply” 乘法节点,将其“Time”和"V1"相乘后,输出给“Twirl”的“Offset”输入:

如何向unity传参 unity 传送_游戏开发_14

至此全部制作就完成了,完整RPA Graph如下:

如何向unity传参 unity 传送_ShaderGraph_15

PS:注意需要将主节点的“Surface”属性设置为“Transparent”透明的,上图并没有体现出来哦~


五,应用到场景中

在“RPA Graph” 编辑界面右上角,点击“Save Asset” 保存一下。然后创建材质球,将其材质选定为刚刚保存的这个“RPAShaderGraph”。

这里提供一个快捷创建材质球的方法,鼠标选中我们保存的“RPAShaderGraph”文件,然后右键创建材质球,这样我们创建出来的材质球,就自动使用这个Shader了。

如何向unity传参 unity 传送_游戏开发_16

最后一步,创建“Plane”将其材质赋值为上面创建的材质球,可以得到最终效果,这时我们可以编辑之前设置好的“Streght”和“Time”属性的值,就可以直接调节想要的效果了:

如何向unity传参 unity 传送_Graph_17