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 法线部分
-
重组顶点 我们需要通过模型的X,Z轴的顶点的进行偏移模拟水面的波动,所以需要通过对Position 节点进行Split 拆分,然后使用Combine 节点进行重新组合: PS:(X,Y,Z,W) 与 (R,G,B,A) 一一对应。 -
设置动态偏移 通过Time 节点和Vecror2 节点(X=-1,Y=0)的相乘Multiply 得到一个动态的Vector2,由于我们需要从外部控制速度,所以将前面Multiply 节点的结果,再与Vector1 节点相乘(声明为公开属性,命名为“Speed”,默认值1),最后将结果连接到Tiling And Offset ,如下图: -
复制动态偏移 在原理介绍的时候我们说了,需要两个不同的动态偏移。所以,将2步骤创建的所有节点全选,然后快捷键C,V复制出来一份。然后将Vecror2 节点的输入修改为(X=1,Y=0.3) -
顶点偏移连接 将1步骤中拆分计算后的顶点Combine 输出连接到两个Tiling And Offset 的UV上: -
控制Tiling 创建一个Vector1 节点(声明为公开属性,命名为“Tiling”,默认值0)创建两个Multiply 乘法节点,两个Tiling控制连接如下: -
创建贴图 我们使用一张贴图两个移动,所以创建一个Texture 2D Asset (声明为公开属性,命名为“MainTexture”),两个Sample Texture 2D (将Type修改为Normal法线),然后将它们和计算过的UV连接起来: -
控制法线强度 创建Vector1 节点(声明为公开属性,命名为“Strength”,默认值0),创建两个Normal Strenght 法线强度节点: -
融合法线 创建Normal Blend 法线融合节点将两个Normal Strenght 节点融合起来,并连接到主节点“Normal”上:
至此全部实现步骤完成,记得"Save Asset"保存一下。
四,使用示例
4.1 应用实例
创建材质球使用刚刚保存的Shader,然后创建一个“Panel”应用材质球,并将其参数调整如下(法线贴图在文末),即可看到效果:
4.2 模拟海面
为了模拟海面效果(开篇图示)我复制了N个“Panel”,并将摄像机位置调整到看海的角度(小技巧:在Hierarchy面板选中摄像机,按下”Ctrl+Shitft+F“,这样Game视图就和Scene视图显示一致了)
4.3 参数分享
- 白天海面和夜晚海面:
- 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:白天和夜晚的效果除了颜色不同之外还差一个平行光,白天的需要复制一个平行光,旋转下调试一下,即可达到开篇图一效果
- 波光粼粼
- MainColor:(0,186,255,0)
- Color:(255,255,255,0)
- Smoothess:1.2
- Speed:0.5
- Tilling:0.08
- Strength:-4.0
- 风平浪静
- MainColor:(0,186,255,0)
- Color:(0,0,0,0)
- Smoothess:0.65
- Speed:0.6
- Tilling:0.08
- Strength:0.1
五,完整图示
用到的法线贴图分享(网上找到的)
|