shader基础知识之TRANSFORM_TEX和_MainTex_ST

我们在变量声明中是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);
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值