Wrap模式为Repeat的纹理

一般而言,我们使用UV坐标构建起模型表面在纹理上的对应采样关系,UV坐标的采样范围在0~1之间。但实际开发过程中,有时会遇到“在UV坐标0~1以外的范围进行采样”的情况。

Wrap Mode 选项就是用来确定当纹理坐标(UV坐标)超出0~1范围时如何采样的。形象点来讲,这种情况有点像是在画框里放入了一张尺寸比框小的画作,WrapMode决定了以何种方式去填充画作与画框间的部分。我们将在这里介绍常用的两种方式:Repeat和Clamp。

在Unity中,Texture的Wrap Mode默认是Repeat。该方法以平铺的方式填满“画框”的剩余部分。对于如下图所示的一张纹理:

Repeat模式的实际显示效果如下:

而对于Clamp模式,它会以“画作”边缘那一圈去采样填充满“画框”中剩余的部分。从UV坐标的角度而言,该模式会将大于1.0的数值设置为1.0,将小于0.0的数值设置为0.0。其显示效果如下:

那么我们为什么要将Repeat模式的纹理检测出来呢?因为在实现方法上,当UV坐标超出0~1范围时,Repeat模式会忽略纹理坐标的整数部分,并将纹理图的拷贝粘贴在物体表面上。这就要求在纹理顶部的纹理单元应与底部的纹理单元相匹配,在纹理左侧的纹理单元也应与右侧的纹理单元相匹配,这样才能做到无缝连接。若无法满足两侧无缝衔接的要求,在最终显示的图像边缘会出现杂色,如下图所示:

所以从表现效果上讲,Repeat模式有可能会使得纹理边缘看起来更不自然。所以在筛选出WrapMode中选择了Repeat模式的纹理后,开发团队要根据纹理的实际展示效果去选择合适的WrapMode模式。