我们在变量声明中是float4 _MainTex_ST
_MainTex_ST.xy对应的是tiling 复制粘贴
_MainTex_ST.zw对应的是offset 位移
我们拿序列帧来举例 在一个贴图上有很多小的贴图
在unity中我们将tiling的uv设置为0.5 0.5
移动offset中的uv值,实现序列帧的移动
而TRANSFORM_TEX则是拿顶点的uv和材质球中的tiling和offset作运算,确保材质球中的缩放和偏移是正确的v.uv是顶点的uv
在vert函数中,
o.uv=TRANSFORM_TEX(v.uv,_MainTex);
是等价于
o.uv=v.uv*_MainTex_ST.xy+_MainTex.ST.zw;
因此要进行uv的变大缩小就是要对_MainTex_ST.xy和_MainTex_ST.zw进行更改
变大缩小的数值是_value 取值范围为(0,+∞)
_MainTex_ST.xy=_value;
_MainTex_ST.zw=(_value-1)*-0.5;
uv的旋转有个特定的公式,是通过半径相等推导出来的,
i.uv=float2(i.uv.xcos(a)-i.uv.ysin(a),i.uv.ycos(a)+i.uv.xsin(a));
旋转需要有中心点,如果直接按照这样旋转会产生问题,需要将uv的中心点坐标移动到需要移动的中点来。
i.uv = i.uv - fixed2(0.5, 0.5);
i.uv = fixed2(i.uv.x * cos(angle) - i.uv.y * sin(angle),i.uv.x * sin(angle) + i.uv.y * cos(angle));
//这一步很重要,因为要复原uv
i.uv += fixed2(0.5, 0.5);