Shader的纹理采样千变万化,正真要把所有的计算效果做出来,可以写出厚厚的一本书。这里就仅仅表达一下Fragment Shader的纹理采样的语法。
1)首先在Properties 里声明贴图
2)然后将贴图的纹理的uv坐标传导到v2f结构里
3)最后在fram函数里,计算uv坐标的变化,达到各种各样的效果。这里主要和时间(_Time)关联起来,从而形成一个动态的样图。
Shader "Custom/FG" {
Properties {
_MainTex ("Albedo (RGB)", 2D) = "white" {}
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 3.0
#include "UnityCG.cginc"
sampler2D _MainTex;
struct v2f{
float4 pos:POSITION;
float2 uv:TEXCOORD0;
};
v2f vert(appdata_base v){
v2f o;
o.pos=UnityObjectToClipPos(v.vertex);
o.uv=v.texcoord.xy;
return o;
}
float4 frag(v2f IN):color{
float2 uv0=IN.uv;
float offset0=0.05*sin(IN.uv*2+_Time.x*2);
uv0+=offset0;
float4 col=tex2D(_MainTex,uv0);
return col;
}
ENDCG
}
}
FallBack "Diffuse"
}