Unity Shader学习笔记
仅记录本人的心得,不是正常阅读(待有时间再整理)
Properties
_MainTex ("Flow Texture", 2D) = "white" {}
如果是Image,那这个纹理默认会从image的纹理属性里过来。
Subshader
Tags
RenderType:
Opaque // 不透明物体(默认)
Transparent // 透明物体
TransparentCutout // 透明度裁剪(如树叶)
Background // 背景(天空盒)
Overlay // 叠加层(UI)
Queue:
Background = 1000 // 最早渲染(天空盒)
Geometry = 2000 // 不透明几何体(默认)
AlphaTest = 2450 // 透明度测试
Transparent = 3000 // 透明物体(从后向前渲染)
Overlay = 4000 // 最后渲染(UI、镜头光晕)
Pass
简单左右流动效果
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
}
half4 frag (v2f f) : SV_Target
{
// UV动画
float2 uv = f.uv;
uv.x -= _Time.y * _Speed;
//uv = frac(uv); 如果精灵使用的是钳制那就需要取余了
// 采样纹理
half4 col = tex2D(_MainTex, uv);
// 应用颜色和强度
col.rgb *= _Color.rgb * _Intensity;
col.a *= _Color.a;
return col;
}
以中心圆形向外扩散加旋转
SubShader
{
Tags { "RenderType"="Transparent" "Queue"="Transparent" }
Blend SrcAlpha OneMinusSrcAlpha
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
float4 _MainTex_ST;
float _Speed;
float _RangleSpeed;
float4 _Color;
float _Intensity;
float _Density;
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 = TRANSFORM_TEX(v.uv, _MainTex);
o.uv = v.uv;
return o;
}
half4 frag (v2f f) : SV_Target
{
// UV动画
float2 uv = f.uv;
float2 dir = uv - 0.5;
float angle = atan2(dir.y, dir.x);
angle += _Time.y * _RangleSpeed;
//angle += _Time.y * _Speed;
float len = length(dir);
if(len * len > 0.25)
{
return half4(0,0,0,0);
}
len *= 2;
float dis =_Time.y * _Speed;
len -= dis;
len = frac(len);
float2 newUV = float2(cos(angle) *len / 2 + 0.5 , sin(angle) *len / 2 + 0.5);
return tex2D(_MainTex, newUV);
}
ENDCG
}
}

浙公网安备 33010602011771号