Unity学习笔记 Vol.55 URP使用ShaderGraph制作水面Shader
前言
这期我们一起研究水面Shader的制作方法。这里是在URP环境下,要使用Unity2019版本,需要注意一下版本。

流程
创建一个平面,命名为Simple Cartoon Water。再创建一个Shader,选择Shader里面的PBR Graph,命名为Cartoon Water,在Shader文件上右击,选择创建Materia,同样命名为Cartoon Water,将材质拖到刚才创建的平面上。
另外值得一提的是,我们这里先要在Edit - Project Settings - Graphics里面的Scriptable Render Pipeline Settings确认你的URPAsset的设置(你也可以直接到Project窗口找到此文件)。当你将Cascades设置为2或4的时候带有透明材质的物体会有一点问题。所以现在我们先将它设置为No Cascades。

我们双击打开Cartoon Water着色器编辑器,首先我们将右下角的预览窗口右击设置为Plane(平面),我们选择Custom Mesh,再选择Plane。

我们再点主节点的齿轮图标,将Surface设置为Transparent。

下面我们开始设置节点为,首先我们给水物体一个基本颜色,我们在黑板上点击加号,增加一个颜色,命名为BaseColor。
我们将颜色设置为蓝色,再将其拖到节点窗口内,再连接到主节点的Albedo端口,我们就可以在右下角的预览窗口看到结果。

接着我们再给水面增加一些涟漪,让它看起来更有趣。我们增加Vornonoi节点,这是一种很有意思的类似随机噪声的节点,我们使其扭曲可以产生类似涟漪的效果。
我们在黑板上添加一个Vector1的参数,命名为RippleSpeed,用来控制涟漪的运动速度,将Default值设置为1,将它拖到节点窗口内。我们再添加Time和Multiply节点,将它们连接起来(见下图)。

我们可以改变RippleSpeed的值来观察变化。
在黑板上添加一个Vector1参数,命名为RippleDensity,设置默认值为7,我们将其拖到窗口中,将其与Voronoi节点的Cell Density端口连接起来。
我们再添加一个Power节点,将Voronoi节点的Out与其连接,设置B值为5。

在黑板上添加一个Vector1参数,命名为RippleSlimness,设置默认值为5。将其设置到Power的B端口。
我们再在黑板上添加一个颜色,命名为RippleColor,颜色选择有点明亮的蓝色,将Intensity设置为+1,Mode设置为HDR。我们将其拖到节点窗口中。
添加一个Multiply节点,将Power的Out和RippleColor颜色分别连接到Multiply节点上,这样可以将白色乘为亮蓝色。

我们再添加一个Add节点,将BaseColor和Multiply节点相加,再Add节点的Out端口连接到Albedo端口上。

我们再将Alpha设置为0.8,回到场景中,我们可以看到大体的效果了。
我们可以对材质的参数进行适当调节,以便达到我们想要的效果。
现在我们的水面的流动效果看起来非常的单一无聊。
我们再添加一个Radial Shear节点来控制Voronoi节点的UV,让水面看起来有漩涡的效果,我们将Strength设置为x1,y1。

设置完我们的水面就不会显得那么单调。然而水面看起来还完全是平的,我们都知道水面是上下起伏不平的。
我们再增加一些点位移效果让它变得更真实。
我们再打开节点编辑窗口,添加一个Gradient Noise节点,我们将Scale设置为5,我们可以看到这是一个静态的节点,我们再增加一个Time节点和Tilling And Offset节点,还有Multiply节点,我们在黑板上增加一个Vector1参数,命名为WaveSpeed,设置默认值为0.1。按下面连接起来。

我们再添加Normal Vector节点,将Space设置为Object,再将Gradient Noise与其相乘。

再添加Position节点,设置其Space为Object,将其与上面相乘结果相加起来。

最后我们将Add的结果连接到主节点的Vertex Position端口。

保存。大功告成。
