Shader Wave

一、原理

  1. 采用 UV 坐标为原始数据,生成每一条波浪线。

  2. 使用 Unity 的 Time.y 作为时间增量,动态变换波形。

二、操作步骤

  1. 首先使用纹理坐标生成一条线;

    

    纹理坐标左下角为(0,0),右上角为(1,1),我们先把纹理坐标的中心位置(0,0)移动到图中(0.5,0.5)的位置。 即纹理坐标范围由[0,1]变换到[-1,1]。

                float2 uv = i.uv;
uv = uv*2.0 -1.0;

    接着,缩小Y方向的值,例如我们缩小150倍。那么现在Y的范围变换为[-150,150]。在着色器中,只有[0,1]范围类的值会被映射在正常的颜色空间,大于1的值,颜色空间按照1的值处理,小于0的值按0处理。现在我们关心[0,150]范围类的值。用颜色来表示,就是黑色到白色的过度,其中白色占的比例比 149/150 还要多。我们需要的是[0,1]之间的值,进行填充,着色。我们将该区域的 uv.y 的值[0,150]取倒数。同理,负值区域一样,只是多取了绝对值。

                float wave_width;
wave_width = abs(1.0 / (150.0 * uv.y));

  2. 现在让直线变成波形,利用uv.x的增量,产生波形,在使用Time.y的时间增量,让波运动起来。

                float wave_width;
float3 color1 = float3(,,); for(float i=0.0; i<10.00; i++)
{
uv.y += (0.07 * sin(uv.x + i/7.0 + _Time.y)); //相位实现波不同的起点
wave_width = abs(1.0 / (150.0 * uv.y));
color1.xyz += fixed3(wave_width, wave_width, wave_width);
}

三、源码

  

Shader "JQM/#Name#"
{
//属性快
Properties
{
_Color("Base Color",Color) = (,,,)
} SubShader
{ Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag #include "UnityCG.cginc" struct VertexOutput
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0; }; sampler2D _MainTex;
float4 _MainTex_ST; float4 _Color; //顶点着色器
VertexOutput vert (appdata_full v)
{
VertexOutput o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv = v.texcoord.xy;
return o;
} //像素着色器
fixed4 frag (VertexOutput i) : COLOR
{ float2 uv = i.uv;
uv = uv*2.0 -1.0;
float wave_width; float3 color1 = float3(,,); for(float i=0.0; i<10.00; i++)
{
uv.y += (0.07 * sin(uv.x + i/7.0 + _Time.y));
wave_width = abs(1.0 / (150.0 * uv.y));
color1.xyz += fixed3(wave_width, wave_width, wave_width);
} return float4(color1.xyz,)*_Color;
}
ENDCG
}
}
}

四、CG 函数

  abs

    取绝对值。

五、引用

  http://blog.csdn.net/stalendp/article/details/21993227

  

    

Shader Wave的更多相关文章

  1. Shader 屏幕后期特效 Shake(震屏)&Wave(波纹)

    震屏效果 Shader: //////////////////////////////////////////// ///// CameraPlay - by VETASOFT 2017 ///// ...

  2. [Unity] Shader(着色器)之固定管线

    在Unity中,固定管线Shader的性能是最好的. 什么是固定管线呢? 固定渲染管线 —— 这是标准的几何&光照(T&L)管线,功能是固定的,它控制着世界.视.投影变换及固定光照控制 ...

  3. 【unity shaders】:Unity中的Shader及其基本框架

    shader和Material的基本关系 Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出.绘图单元可以依据这个输出来将图 ...

  4. 水面shader 线性擦除

    // Upgrade NOTE: replaced 'PositionFog()' with multiply of UNITY_MATRIX_MVP by position // Upgrade N ...

  5. Shader的语法

    Shader "name" { [Properties] Subshaders [Fallback] }(1)Properties:{ Property [Property ... ...

  6. Unity3d Shader

    Unity3d Shader 预览Surface Shader主要用来实现光照相关处理,可能更简洁. Vertex and Fragment Shader 如果不与光照交互, 则可以用这个shader ...

  7. Unity3d Shader开发(一)Properties

    着色器可以定义一个参数列表,可以由开发者在材质检视面板编辑参数.着色器文件中的Properties块定义了这些参数: 语法: Properties { Property [Property ...] ...

  8. 这几天阅读的shadowgun的几个shader

    直接从阅读时记录的笔记摘抄过来,写的比较随意. 1. MADFINGER-blinking-god-rays 除了可以用于实现太阳光线效果,还能调整参数让颜色随时间淡入淡出闪烁,能做出想灯光之类的效果 ...

  9. Unity Kajiya Hair Shader Mod by Normals

    Shader "HairShader" { Properties { _MainTex ("Diffuse (RGB) Alpha (A)", 2D) = &q ...

随机推荐

  1. 理解C++中拷贝构造函数

    拷贝构造函数的功能是用一个已有的对象来初始化一个被创建的同样对象,是一种特殊的构造函数,具有一般构造函数的所有特性,当创建一个新对象的时候系统会自动调用它:其形参是本类对象的引用,它的特殊功能是将参数 ...

  2. hihoOffer收割练习20题目2

    题目2 : SCI表示法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 每一个正整数 N 都能表示成若干个连续正整数的和,例如10可以表示成1+2+3+4,15可以表示 ...

  3. stack(数组模拟) POJ 2559 Largest Rectangle in a Histogram

    题目传送门 /* 题意:宽度为1,高度不等,求最大矩形面积 stack(数组模拟):对于每个a[i]有L[i],R[i]坐标位置 表示a[L[i]] < a[i] < a[R[i]] 的极 ...

  4. how-to-fix-fs-re-evaluating-native-module-sources-is-not-supported-graceful

    http://stackoverflow.com/questions/37346512/how-to-fix-fs-re-evaluating-native-module-sources-is-not ...

  5. Java中的流(3)字符流-Reader和Writer

    java中提供了处理以16位的Unicode码表示的字符流的类,即以Reader和Writer 为基类派生出的一系列类.  1.Reader和Writer  这两个类是抽象类,只是提供了一系列用于字符 ...

  6. Statistics gathering and SQL Tuning Advisor

    1. https://www.pythian.com/blog/statistics-gathering-and-sql-tuning-advisor/ Our monitoring software ...

  7. 018 [工具软件]截图贴图注释 Snipaste

    Snipaste 是一个截图贴图工具,绿色免费.官方主页:https://zh.snipaste.com/. 三大功能: 1.截图,可以自动识别窗口的各元素,可以精准到像素调整截图区域大小. 2.贴图 ...

  8. 转】Nodejs对MongoDB模糊查询

    原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/4/ 感谢! Posted: Jul 1, 2013 Tag ...

  9. win7电脑删除文件时一直提示文件正在被另一个程序占用

    这样的情况并非是第一次遇到了,以前总是会觉得这样的问题只是电脑的错乱,重启一下电脑就好了,但是并非每次都需要重启电脑的,其实简单的设置一下,这个问题就可以解决了.对了,咱们还是说说这到底是个什么问题吧 ...

  10. 建设一个能承受500万PV/每天的网站如果计算?

    PV是什么: PV是page view的简写.PV是指页面的访问次数,每打开或刷新一次页面,就算做一个pv. 计算模型: 每台服务器每秒处理请求的数量=((80%*总PV量)/(24小时*60分*60 ...