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分钟...

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

面试题——面经题目(1)

文章目录1. 进程调度算法2.操作系统在调度线程时会做哪些事情3.页面置换算法4.32位系统,64位的系统内存是多大5.CPU的GHz是什么意思1. 进程调度算法 进程调度规定了CPU执行就绪队列中的多个进程的顺序。 1.先来先服务 (FCFS,first come first served&…

去掉input密码框自动补全功能

<input name"password" autocomplete"off" hidden> <input type"password" autocomplete"off"> //不能加id 转载于:https://www.cnblogs.com/yuyedaocao/p/11124653.html

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

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

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

vue学习笔记-02-前端的发展历史浅谈mmvm设计理念 文章目录1. MVVM模式的实现者2.第一个vue程序3.什么是mvvm&#xff1f;4.为什么要用mvvm&#xff1f;5.mvvm的组成部分7.MVVM 模式的实现者8.为什么要使用 Vue.js1. MVVM模式的实现者 Model:模型层&#xff0c;在这里表示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年中国科技的重大突破

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

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

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

iscsi-分区类型

iSCSI简介(Internet SCSI)&#xff1a; iSCSI 小型计算机系统接口&#xff0c;IBM公司研发&#xff0c;用于在IP网络上运行SCSI协议&#xff1b;解决了 SCSI需要直连存储设备的局限性&#xff1b;可以不停机扩展存储容量&#xff0c;iSCSI 将 SCSI 接口与 Ethernet 技术结合&am…

设计模式1——设计模式的原则

1.从面向对象说起 ~~~~~~变化是代码复用的天敌&#xff0c;面向对象的设计语言的优势就是抵御变化&#xff01;这里的所谓抵御变化&#xff0c;不是说采用面向对象的设计语言&#xff0c;就没有变化&#xff0c;而是将变化的范围降到最小。 ~~~~~~之前我们所认识的面向对象的语…

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

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

操作系统学习笔记-01-1.1课程概述

此课程来自于b站操作系统_清华大学(向勇、陈渝)&#xff0c;博客作为博主手打&#xff0c;当作参考笔记&#xff0c;回头复习223 1.1课程概述 课程简介 什么是操作系统 为什么学习以及如何学习操作系统 操作系统的实例&#xff0c;历史和结构介绍 基本概念及原理 操作系统…

Python实现二叉树的遍历

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

tdms打开闪退问题

问题&#xff1a;tdms打开闪退 解决方法如下&#xff0c;打开excel&#xff0c;在菜单栏中点【文件】 左下方进入【选项】&#xff0c;然后在excel选项中点击【加载项】 然后在下方的管理&#xff0c;选择【COM加载项】&#xff0c;点击【转到】 将NI的TDMS【Add-in】的打勾&a…

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

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

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

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

我为能准时下班而做的准备,以及由此的收获,同时总结下不足

可能有人会说&#xff0c;做IT的想准时下班很难&#xff0c;尤其是在互联网公司。有些外企或国企倒能准时下班&#xff0c;原因是公司更像养老院。 其实这里存在个误区&#xff1a;能否准时下班其实和工作效率和质量有关&#xff0c;取决于自己&#xff0c;而不在于其它因素。公…