IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 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 法线部分

  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


五,完整图示

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

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章           查看所有文章
加:2021-07-25 21:35:59  更:2021-07-25 21:36:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/25 14:08:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码