Shader Wave
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的更多相关文章
- Shader 屏幕后期特效 Shake(震屏)&Wave(波纹)
震屏效果 Shader: //////////////////////////////////////////// ///// CameraPlay - by VETASOFT 2017 ///// ...
- [Unity] Shader(着色器)之固定管线
在Unity中,固定管线Shader的性能是最好的. 什么是固定管线呢? 固定渲染管线 —— 这是标准的几何&光照(T&L)管线,功能是固定的,它控制着世界.视.投影变换及固定光照控制 ...
- 【unity shaders】:Unity中的Shader及其基本框架
shader和Material的基本关系 Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出.绘图单元可以依据这个输出来将图 ...
- 水面shader 线性擦除
// Upgrade NOTE: replaced 'PositionFog()' with multiply of UNITY_MATRIX_MVP by position // Upgrade N ...
- Shader的语法
Shader "name" { [Properties] Subshaders [Fallback] }(1)Properties:{ Property [Property ... ...
- Unity3d Shader
Unity3d Shader 预览Surface Shader主要用来实现光照相关处理,可能更简洁. Vertex and Fragment Shader 如果不与光照交互, 则可以用这个shader ...
- Unity3d Shader开发(一)Properties
着色器可以定义一个参数列表,可以由开发者在材质检视面板编辑参数.着色器文件中的Properties块定义了这些参数: 语法: Properties { Property [Property ...] ...
- 这几天阅读的shadowgun的几个shader
直接从阅读时记录的笔记摘抄过来,写的比较随意. 1. MADFINGER-blinking-god-rays 除了可以用于实现太阳光线效果,还能调整参数让颜色随时间淡入淡出闪烁,能做出想灯光之类的效果 ...
- Unity Kajiya Hair Shader Mod by Normals
Shader "HairShader" { Properties { _MainTex ("Diffuse (RGB) Alpha (A)", 2D) = &q ...
随机推荐
- 3-2 -------WERTYU------题挺水的
//题目的意思就是-----键盘上面你输入一个字符,就要输出该字符左边的字符. //空格和回车原样输出. #include<stdio.h> int main() { char a[]={ ...
- 【洛谷3822】[NOI2017] 整数(线段树压位)
题目: 洛谷 3822 分析: 直接按题意模拟,完了. 将每次加 / 减拆成不超过 \(32\) 个对单独一位的加 / 减. 考虑给一个二进制位(下称「当前位」)加 \(1\) 时,如果这一位本来就是 ...
- bryce1010的图像处理课程设计
一.要求 完成课程教学中的大部分图像处理功能 二.平台 Qt c++ windows或者linux下 三.思路收集 1.QPixmap类 (一)QPixmap和QImage的区别 QPixmap是专门 ...
- CodeFoces Round #443(div.2)
http://codeforces.com/contest/879/ A. Borya's Diagnosis time limit per test 2 seconds memory limit p ...
- 题解报告:hdu 2062 Subset sequence
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2062 Problem Description 考虑集合An = {1,2,...,n}. 例如,A1 ...
- 452 Minimum Number of Arrows to Burst Balloons 用最少数量的箭引爆气球
在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了.开始坐标总是小于结束坐标.平面 ...
- 使用Jquery1.9 版本 来实现全选
在使用Jquery实现全选以及反选的时候, 使用attr()实现的时候,在浏览器第一次运行可以全选,但是第二次再全选,不管用. 通过查找资料,用 prop()方法代替attr()方法就行了. 注意: ...
- 仿微信右滑关闭Activity
SwipeBackLayout 1.AS添加依赖 compile 'me.imid.swipebacklayout.lib:library:1.0.0' eclipse 想办法下载库工程,以库工程形式 ...
- SQL Server性能调优——报表数据库与业务数据库分离
前段时间把公司的主数据库切了,分成业务库和报表库,业务库向报表库进行实时的Replication.这个项目的上线提升了系统的性能和可维护性,现在把设计时的考量和所做的工作重新回顾一下,作为备忘. 项目 ...
- js几个逻辑运算符的形象概括
“&&”是逻辑与操作符,只有“&&”两边值同时满足(同时为真),整个表达式值才为真. b>a && b<c //“&& ...