最基本形式 (先不考虑Fog)
Shader "Nafio/TUnlit"{ Properties { _MainTex("TT",2D) = "white" {} } SubShader { Tags{"RenderType" = "Opaque"} LOD 150 Pass{ CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" sampler2D _MainTex; float4 _MainTex_ST; struct appdata{ float4 vertex:POSITION;//注意这里名称vertex是固定的不能乱改,float4,不是float3 float2 uv:TEXCOORD0; }; struct v2f{ float4 vertex:SV_POSITION; float2 uv:TEXCOORD0; }; v2f vert(appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex);//低版本替换成mul(UNITY_MATRIX_MVP,v.vertex); o.uv = TRANSFORM_TEX(v.uv,_MainTex); return o; } fixed4 frag(v2f i):SV_Target { fixed4 c = tex2D(_MainTex,i.uv); return c; } ENDCG } } }
_MainTex_ST 的说明,这个变量是后面TRANSFORM_TEX需要用到
TRANSFORM_TEX用于计算Texture uv偏移量(就是编辑器中设置的偏移量)
实现方式
#define TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy + name##_ST.zw)材质中
这里Tiling控制缩放
而Offset控制起始位置
从公式看name##_ST.xy对应Tiling,name##_ST.zw对应Offset