Unity Shader 2D水流效果

水流的模拟主要运用了顶点变换和纹理动画的结合;

顶点变换中,利用正弦函数模拟河流的大致形态,例如波长,振幅等。

纹理动画中,将纹理坐标朝某一方向持续滚动以形成流动的效果。

脚本如下:

 1 Shader "MyUnlit/ScrollWater"
 2 {
 3     Properties
 4     {
 5         _MainTex ("Texture", 2D) = "white" {}
 6         _Color("Color Tint",color)=(1,1,1,1)
 7         //控制水流波动的幅度,也就是三角函数中的振幅(值域范围)
 8         _Magnitude("Distortion Magnitude",float)=0.3
 9         //控制周期的长度,值越大,周期越短,频率越高
10         _InvWaveLength("Distortion Inserve Wave Length",float)=1
11         //流动速度,用于纹理变换
12         _Speed("Speed",float)=0.1
13     }
14     SubShader
15     {
16         //顶点动画需要禁用合P处理
17         Tags {"Queue"="Transparent" "RenderType"="Transparent" "IgnoreProjector"="true" "DisableBatching"="True"}
18 
19         Pass
20         {
21             //透明度混合:关闭深度写入+设置混合状态+禁用剔除(双面渲染)
22             Tags{"lightmode"="forwardbase"}
23             ZWrite off
24             Blend SrcAlpha OneMinusSrcAlpha
25             Cull off
26 
27             CGPROGRAM
28             #pragma vertex vert
29             #pragma fragment frag
30             #pragma multi_compile_fog
31 
32             #include "UnityCG.cginc"
33             struct appdata
34             {
35                 float4 vertex : POSITION;
36                 float2 uv : TEXCOORD0;
37             };
38 
39             struct v2f
40             {
41                 float2 uv : TEXCOORD0;
42                 UNITY_FOG_COORDS(1)
43                 float4 vertex : SV_POSITION;
44             };
45 
46             sampler2D _MainTex;
47             float4 _MainTex_ST;
48             fixed4 _Color;
49             float _Magnitude;
50             float _InvWaveLength;
51             float _Speed;
52 
53             v2f vert (appdata v)
54             {
55                 v2f o;
56                 float4 offset;
57                 //这里的方向可以自己选择,这里选择偏移x方向,其他方向的偏移保持不变
58                 offset.yzw = float3(0, 0, 0);
59                 //利用正弦函数模拟河流整体的形状,最后乘以振幅
60                 offset.x = sin((v.vertex.x + v.vertex.y + v.vertex.z)*_InvWaveLength)*_Magnitude;
61                 o.vertex = UnityObjectToClipPos(v.vertex+offset);
62                 //对uv进行某一方向的滚动以模拟水流,这里选择v向
63                 o.uv = TRANSFORM_TEX(v.uv, _MainTex);
64                 o.uv += float2(0.0, _Time.y*_Speed);
65 
66                 UNITY_TRANSFER_FOG(o,o.vertex);
67                 return o;
68             }
69 
70             fixed4 frag (v2f i) : SV_Target
71             {
72                 fixed4 col = tex2D(_MainTex, i.uv);
73                 col.rgb *= _Color.rgb;
74                 UNITY_APPLY_FOG(i.fogCoord, col);
75                 return col;
76             }
77             ENDCG
78         }
79     }
80     FallBack "Transparent/VertexLit"
81 }

P.S.需要把纹理的导入设置改为Repeat(重复)

效果如下:

转载于:https://www.cnblogs.com/koshio0219/p/11121969.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/482997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2022年智能家居十大预测新鲜出炉:全屋智能驶入快车道?健身镜成新宠……

来源:物联网智库 2021年接近尾声,这一年,新冠病毒仍旧没有离开地球,而在疫情常态化、工作与生活回归正轨之余,人们对于网络与虚拟世界的依赖度也陡然骤增。这一转变无疑将极大拉动消费端的数字化产业发展,除…

数据结构与算法——动态规划

文章目录1.内容概述2.爬楼梯2.1 题目描述2.算法思想2.3 代码实现3.打家劫舍3.1 题目描述3.2 算法思路3.3 代码实现4.最大子序和4.1 题目描述4.2 算法思路4.3 代码思路5. 零钱兑换5.1 题目描述5.2 算法思路5.3 代码实现6.三角形最小路径和6.1 题目描述6.2 算法思路6.3 代码实现7…

vue学习笔记-01-前端的发展历史(从后端到前端,再到前后端分离,再到全栈)

vue学习笔记-01-前端的发展历史(从后端到前端,再到前后端分离,再到全栈) 这篇文章是博主在看vue-前端发展简史的时候做的笔记,以供后续学习复习 文章目录vue学习笔记-01-前端的发展历史(从后端到前端&#…

黑客帝国「缸中之脑」有眉目了?培养皿中百万人脑细胞学会打乒乓球,仅用了5分钟...

来源:机器之心编辑:张倩、杜伟既然生物神经元如此高效,为什么不拿来用呢?最新版本的《黑客帝国》还有两天才会上映,但最近的一些科技进展总让我们觉得,导演描述的世界似乎离我们越来越近了。其中一个进展来…

《Science》基因组比对的革命性技术

来源:生物通加州大学圣克鲁斯基因组研究所(UC Santa Cruz Genomics Institute)的研究人员推出了一种名为“长颈鹿”(Giraffe)的新工具,可以有效地将新的基因组序列绘制到代表多种不同人类基因组序列的“泛基因组”(pangenome)上。使用泛基因组学方法而不…

vue学习笔记-02-前端的发展历史浅谈mmvm设计理念

vue学习笔记-02-前端的发展历史浅谈mmvm设计理念 文章目录1. MVVM模式的实现者2.第一个vue程序3.什么是mvvm?4.为什么要用mvvm?5.mvvm的组成部分7.MVVM 模式的实现者8.为什么要使用 Vue.js1. MVVM模式的实现者 Model:模型层,在这里表示JavaSc…

linux——select、poll、epoll

文章目录1.多路I/O转接服务器2.select3.select代码4.poll5.epoll5.1 基础API5.3 epoll代码5.4 边沿触发和水平触发5.4.1 水平出发LT5.4.2 边缘触发5.4.3 服务器的边缘触发和水平触发5.4 边缘触发但是能一次读完6.epoll反应堆模型6.1 反应堆模型6.2 epoll反应堆代码7.心跳包8.线…

年终盘点:2021年中国科技的重大突破

来源:科技日报2021年已经步入尾声,过去的一年是科技界屡创新高、收获满仓的一年。这一年,恰逢中国共产党百年华诞,我国科技界更是取得多项重要突破。量子计算获得重大进展,使我国成为唯一在两个物理体系中实现量子计算…

vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值?

vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值? 文章目录vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值?什么是组件?为什么要使用组件?如何使用组件呢&…

盘点:2021年度物理学十大突破|《物理世界》

来源:物理世界作者:哈米什约翰斯顿(Hamish Johnston)译者:王晓涛、乔琦2021年12月14日,《物理世界》(Physics World)编辑从其网站发表的近600项研究进展中评选出了年度物理学领域十大…

Python实现二叉树的遍历

二叉树是有限个元素的集合,该集合或者为空、或者有一个称为根节点(root)的元素及两个互不相交的、分别被称为左子树和右子树的二叉树组成。 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分&#…

操作系统学习笔记-02-1.2-什么是操作系统

1.2什么是操作系统 没有一个完整,精确,公认的定义从功能和特点上来介绍操作系统 用户角度上,操作系统是一个控制软件管理应用程序为应用程序提供服务杀死应用程序 资源管理管理外设,分配资源 操作系统架构层次 硬件之上应用程序之…

大脑活动与认知: 热力学与信息论的联系

来源:集智俱乐部作者:Guillem Collell、Jordi Fauquet译者:张澳审校:刘培源编辑:邓一雪导语信息和能量之间的关系已经在物理学、化学和生物学中得到了广泛的研究。然而,这种联系并没有在神经科学领域形式化。2015年&am…

离散数学学习笔记-01-随机试验与随机事件

文章目录1.1.1随机试验与随机事件引言随机事件1.1.2.样本空间与事件的集合表示基本概念1.1.3事件之间的关系1.包含2.并(和)引入概率论的三个要素:1.1.1随机试验与随机事件 引言 确定性(必然):一定发生&am…

18-ESP8266 SDK开发基础入门篇--TCP 服务器 RTOS版,串口透传,TCP客户端控制LED

https://www.cnblogs.com/yangfengwu/p/11112015.html 先规定一下协议 aa 55 02 01 F1 4C 控制LED点亮 F1 4C为CRC高位和低位aa 55 02 00 30 8C 控制LED熄灭 30 8C为CRC高位和低位 aa 55 03 占空比(四字节 高位在前,低位在后) CRC校验高位,CRC校验低位 预留一个问题 我用客…

Ubuntu下的git使用指南

1.创建账号,绑定邮箱 在Git或者Gitee中创建一个Git账号或者Gitee账号,绑定邮箱,Ubuntu下的git命令对Git或者Gitee都有效。 2.安装git Ubuntu下下载git命令: sudo apt-get install git在下载完之后,可以通过git --v…

人类、动物和人工智能意识的新理论

来源:ScienceAI编译:萝卜皮德国波鸿鲁尔大学(RUB)的两名研究人员提出了一种新的意识理论。他们一直在探索意识的本质,大脑如何产生意识以及在何处产生意识,以及动物、人工智能是否也有意识等问题。新概念将…

ffmpeg——简单播放器代码

1.媒体文件播放总体过程 媒体文件——>解复用——>解码——>调用播放接口——>播放 2.解复用 2.1 什么是解复用? 解复用:将媒体文件分解为视频流和音频流 avformat_open_input() /*打开对应的文件,查找对应的解复用器&…

Nature公布2022年值得关注的七大科学事件, 中国一项入选!

来源:科技日报 记者 刘霞 文中图片来自《自然》杂志官网,版权属于原作者,仅用于学术分享尽管今年新冠疫情仍然肆虐,给人类带来不少悲剧和灾难,但“每朵乌云都镶有金边”!新冠疫苗成为抗击疫情的有力武器、…

计算机网络学习笔记-01-概念,组成,功能,分类

计算机网络-2019 王道考研 计算机网络-1-概念,组成,功能,分类 文章目录1.概念,组成,功能,分类1.1概念1.2功能1.3组成部分1.3分类1.4思维导图总结1.概念,组成,功能,分类 …