1. 手动计算偏移量(通用方法)
此方法通过数学运算直接调整UV坐标,适用于编写自定义Shader或支持节点式编辑的ShaderGraph中。
基本原理是:
- 将原点移至中心 :从原始UV坐标中减去
(0.5, 0.5)
,使坐标范围变为[-0.5, 0.5]
,原点移至纹理中心。 - 进行缩放 :将平移后的坐标乘以Tiling值(例如
(2,2)
)。 - 将原点移回 :将缩放后的坐标加上
(0.5, 0.5)
,使原点回到左下角,但缩放锚点已是中心。
在Shader代码或ShaderGraph的Tiling And Offset
节点中,这可以简化为一个公式:newUV = (originalUV - 0.5) * Tiling + 0.5
。本质上,这是通过在缩放前后补偿一个由Tiling值决定的偏移量来实现的。
2. 使用Unity的TRANSFORM_TEX宏(Unity Shader便捷方法)
如果在编写Unity Surface Shader或顶点/片元着色器,可以使用Unity内置的TRANSFORM_TEX
宏。这个宏会自动处理材质面板上设置的Tiling和Offset值。
只需在着色器代码中这样使用:
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
它会自动执行 v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw
这一变换。其中,_MainTex_ST.xy
是Tiling值,_MainTex_ST.zw
是Offset值。
*要实现中心缩放,关键在于设置正确的Offset值 。通常,Tiling值为 (n, n)
时,对应的Offset值需要设置为 (-(n-1)/2, -(n-1)/2)
左右才能将纹理中心稳定在视觉中心。