Unity 之 ShaderGraph 模拟“吃鸡”海面效果入门级教程

Posted 陈言必行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity 之 ShaderGraph 模拟“吃鸡”海面效果入门级教程相关的知识,希望对你有一定的参考价值。

前言

若你的工程还没有进行基础配置,请查看我的博文Unity 之 ShaderGraph入门使用详解,按照步骤操作完成配置即可,还能顺便学习一下基础操作流程哦~
本文手把手教你制作“吃鸡”水面效果,入门级教程,还不快动手试试?有经验的童鞋可以直接跳到最后一步,按照图示搭建即可。

一,效果展示

老规矩,直接上效果图:

1.1 模拟海面

1.2 夜晚海面

1.3 风平浪静

1.4 波光粼粼

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

PS:四种效果是用一个Shader实现的,文末有参数设置。完成后一定要自己调试下参数,没准你可调节出更好的效果哦~


二,原理介绍

通过两种不同速度,不同方向的顶点偏移,达成水面波动的效果。然后将两种法线贴图进行融合。主要节点:Positon,Tiling And Offset,NormalStrength,NormalBlend:

然后通过颜色,表面光泽等属性调整完成海面效果。


三,实现效果

3.1 准备工作

在Project面板右键 --> Create --> Shader --> PBRGraph(我这里命名为“WaterPBRGraph”),然后双击打开编辑器面板:

准备工作完成。整体实现步骤分为三部分。1.颜色控制,2.法线,3.表面光泽。下面一个个实现:

3.2 颜色部分

创建两个Color颜色节点(设置为公开属性,分别命名为”MainColor“和"Color"),然后创建Lero将两个颜色进行差值计算,创建Fresnel Effect菲涅尔节点作为差值,连接关系如下图:

3.3 表面光泽

创建一个Vercotr1节点,并设置为公开属性,命名为“Smoothess”。将其和主节点的Smoothess相连即可:

预览图如下:

3.4 法线部分

  1. 重组顶点
    我们需要通过模型的X,Z轴的顶点的进行偏移模拟水面的波动,所以需要通过对Position节点进行Split拆分,然后使用Combine节点进行重新组合:

    PS:(X,Y,Z,W) 与 (R,G,B,A) 一一对应。

  2. 设置动态偏移
    通过Time节点和Vecror2节点(X=-1,Y=0)的相乘Multiply得到一个动态的Vector2,由于我们需要从外部控制速度,所以将前面Multiply节点的结果,再与Vector1节点相乘(声明为公开属性,命名为“Speed”,默认值1),最后将结果连接到Tiling And Offset,如下图:

  3. 复制动态偏移
    在原理介绍的时候我们说了,需要两个不同的动态偏移。所以,将2步骤创建的所有节点全选,然后快捷键C,V复制出来一份。然后将Vecror2节点的输入修改为(X=1,Y=0.3)

  4. 顶点偏移连接
    将1步骤中拆分计算后的顶点Combine输出连接到两个Tiling And Offset的UV上:

  5. 控制Tiling
    创建一个Vector1节点(声明为公开属性,命名为“Tiling”,默认值0)创建两个Multiply乘法节点,两个Tiling控制连接如下:

  6. 创建贴图
    我们使用一张贴图两个移动,所以创建一个Texture 2D Asset(声明为公开属性,命名为“MainTexture”),两个Sample Texture 2D(将Type修改为Normal法线),然后将它们和计算过的UV连接起来:

  7. 控制法线强度
    创建Vector1节点(声明为公开属性,命名为“Strength”,默认值0),创建两个Normal Strenght法线强度节点:

  8. 融合法线
    创建Normal Blend法线融合节点将两个Normal Strenght节点融合起来,并连接到主节点“Normal”上:

至此全部实现步骤完成,记得"Save Asset"保存一下。


四,使用示例

4.1 应用实例

创建材质球使用刚刚保存的Shader,然后创建一个“Panel”应用材质球,并将其参数调整如下(法线贴图在文末),即可看到效果:

4.2 模拟海面

为了模拟海面效果(开篇图示)我复制了N个“Panel”,并将摄像机位置调整到看海的角度(小技巧:在Hierarchy面板选中摄像机,按下”Ctrl+Shitft+F“,这样Game视图就和Scene视图显示一致了)

4.3 参数分享

  1. 白天海面和夜晚海面:
    • MainColor:(0,186,255,0)
    • Color:白天白色(0,0,0,0),黑天黑色(255,255,255,0)
    • Smoothess:1.2
    • Speed:0.5
    • Tilling:0.08
    • Strength:0.6

PS:白天和夜晚的效果除了颜色不同之外还差一个平行光,白天的需要复制一个平行光,旋转下调试一下,即可达到开篇图一效果

  1. 波光粼粼
    • MainColor:(0,186,255,0)
    • Color:(255,255,255,0)
    • Smoothess:1.2
    • Speed:0.5
    • Tilling:0.08
    • Strength:-4.0

  1. 风平浪静
    • MainColor:(0,186,255,0)
    • Color:(0,0,0,0)
    • Smoothess:0.65
    • Speed:0.6
    • Tilling:0.08
    • Strength:0.1


五,完整图示

用到的法线贴图分享(网上找到的)

以上是关于Unity 之 ShaderGraph 模拟“吃鸡”海面效果入门级教程的主要内容,如果未能解决你的问题,请参考以下文章

Unity 之 ShaderGraph 实现全息效果入门级教程

Unity 之 ShaderGraph 实现火焰效果入门级教程

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

Unity 之 ShaderGraph 实现小旗随风飘扬效果入门级教程

Unity 之 ShaderGraph 实现超级炫酷的溶解效果入门级教程

Unity 之 ShaderGraph Input节点解析汇总