波动实例 (shader2.0 顶点着色器)
y=Asin(ωx+φ)
φ:决定波形与X轴位置关系或横向移动距离(左加右减)
ω:决定周期(最小正周期T=2π/∣ω∣)
A:决定峰值(即纵向拉伸压缩的倍数)
模型波动(顶点卓思琪)
顶点着色器:
1, 计算顶点位置
2, 矩阵转换
片段着色器:
1, 纹理寻址
2, 灯光作用。
Shader 2.0 对property 变量需要引用。
float _Frenquncy ;
float _Arange ;
float _Speed ;
_Time : 表示时间周期。
颜色和vector :
.xyzw rgba
// Wave Shader
//Shader "Hidden/Wave"
//{
// Properties
// {
// _MainTex("Texture", 2D) = "white" {}
//
// _Arange("Amplitute",float) = 1
//
// _Frenquncy("Frenquncy",float) = 0.5
//
//
// _Speed("Speed",float) = 0.5
// }
// SubShader
// {
// Pass
// {
// CGPROGRAM
// #pragma vertex vert
// #pragma fragment frag
//
// #include "UnityCG.cginc"
//
// struct appdata
// {
// float4 vertex : POSITION;
// float2 uv : TEXCOORD0;
// };
//
// struct v2f
// {
// float2 uv : TEXCOORD0;
// float4 vertex : SV_POSITION;
// };
//
//
// float _Frenquncy;
//
// float _Arange;
//
// float _Speed;
//
//
// v2f vert(appdata v)
// {
// v2f o;
//
//
// float timer = _Time.y * _Speed;
//
//
//
// float waver = _Arange * sin(timer + v.vertex.x * _Frenquncy);
//
//
// v.vertex.y = v.vertex.y + waver;
//
// o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
// o.uv = v.uv;
// return o;
// }
//
// sampler2D _MainTex;
//
//
//
//
// fixed4 frag(v2f i) : SV_Target
// {
// fixed4 col = tex2D(_MainTex, i.uv);
// // just invert the colors
// //col = 1 - col;
// return col;
// }
// ENDCG
// }
// }
//}
河流效果 shader2.0 片段着色器
1,让纹理滚动起来。(在片段着色器上做)
纹理流动为片段着色器
Shader 2.0 :
片段着色器:
1, 纹理采样
2, 灯光作用。
UV :
纹理: 当前在屏幕中显示区域:
UV就是将图像上每一个点精确对应到模型物体的表面。
在点与点之间的间隙位置由软件进行图像光滑插值处理。这就是所谓的UV贴图
tex2D(_MainTex, i.uv)
MainTex: 一张图片
i.uv : 表示比例 UV坐标。(0―――1)
Clamp 不会从0开始寻址 而是从1.0开始寻址 只寻找贴图最后的点的像素拉伸
repeat 从0-1 不停反复寻址
Clamp: 表示UV 坐标超过 1永远取 1这个地方的像素。
UV 比0小取的都是 0这个地方的像素。
Repeat : UV 超过 1取小数部分跟(0–1)
UV 动画。
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "Hidden/River"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
// No culling or depth
Cull Off ZWrite Off ZTest Always
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
sampler2D _MainTex;
fixed4 frag (v2f i) : SV_Target
{
float2 tmpUV = i.uv ;
tmpUV.x +=_Time.x ;
tmpUV.y +=_Time.y
;
fixed4 col = tex2D(_MainTex, tmpUV);
// just invert the colors
//col = 1 - col;
//col.x *= 2 ;
//col.rgb = float3(1,0,0) ;
return col;
}
ENDCG
}
}
}