Unity 之 ShaderGraph 模拟“吃鸡”海面效果入门级教程
Posted 陈言必行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity 之 ShaderGraph 模拟“吃鸡”海面效果入门级教程相关的知识,希望对你有一定的参考价值。
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
五,完整图示
用到的法线贴图分享(网上找到的)
以上是关于Unity 之 ShaderGraph 模拟“吃鸡”海面效果入门级教程的主要内容,如果未能解决你的问题,请参考以下文章
Unity 之 ShaderGraph 实现全息效果入门级教程
Unity 之 ShaderGraph 实现火焰效果入门级教程
Unity 之 ShaderGraph 实现旋涡(传送门)效果入门级教程
Unity 之 ShaderGraph 实现小旗随风飘扬效果入门级教程