在 Unity URP 里,纹理“看起来怎么贴、怎么糊、怎么锐利”,很多时候并不是 Shader 算错了, 而是采样器状态已经决定了结果。最常见的两组设置,就是 Wrap Mode 和 Filter Mode。 前者决定 UV 超出 0~1 后怎么取样,后者决定 放大、缩小时像素如何插值。
先记住一句话
在 URP 中,无论你是通过 Shader Graph 还是 HLSL 宏(如 SAMPLE_TEXTURE2D)去采样纹理, 默认情况下,采样行为通常都来自该纹理资源本身的导入设置:Wrap Mode 与 Filter Mode。 所以同一段采样代码,换一张贴图或改一个导入参数,屏幕上的结果就会明显不同。
Wrap Mode = UV 越界时怎么办Filter Mode = 像素之间怎么插值Trilinear = Bilinear + Mipmap 层级混合
官方定义可浓缩为两句:
Repeat 会让纹理重复平铺;Clamp 会把边缘像素拉伸到越界区域。
Point 最锐利但会块状;Bilinear 会在单层纹理内做平滑;Trilinear 则会在不同 Mipmap 层级之间继续混合。
一、Wrap Mode:决定 UV 超出 0~1 后怎么采样
当模型上的 UV 或者你在 Shader 里计算出的坐标超出了 0~1,采样器就必须决定: 这时是继续重复纹理,还是停在边缘。Wrap Mode 解决的就是这个问题。

Repeat
适合“应该重复”的纹理
当 UV 超出 0~1 时,纹理会按周期继续平铺。最常见于平铺地面、噪声图、滚动水波、流动贴图、条纹和程序化图案。
- 优点:天然支持平铺与滚动。
- 风险:如果贴图边缘不无缝,会出现明显接缝。
- 典型场景:地砖、地形细节、噪声遮罩、UV 动画。
Clamp
适合“不应该重复”的纹理
当 UV 超出 0~1 时,采样会停留在边缘像素,因此越界区域会像被“拉边”一样延展,不再出现重复纹样。
- 优点:避免边缘重复,控制更稳定。
- 风险:如果边缘颜色本身不对,拉伸也会显得突兀。
- 典型场景:UI、渐变图、LUT、遮罩、投影边缘控制。
| 模式 | UV 超出 0~1 后 | 视觉结果 | 更适合什么 |
|---|---|---|---|
| Repeat | 坐标按周期回绕 | 继续平铺、继续出现纹样 | 地面、噪声、滚动贴图、程序化图案 |
| Clamp | 停在边缘像素 | 边缘颜色被拉伸 | UI、遮罩、渐变、查找纹理、避免边界重复 |
二、Filter Mode:决定放大缩小时像素怎么插值
Wrap Mode 解决的是“坐标越界”,而 Filter Mode 解决的是“一个屏幕像素到底该读哪几个纹理像素”。 它直接影响你的纹理是清脆、柔和,还是远处更稳定。

Point
最锐利,但会块状
Point 是最近邻采样,不做平滑插值。优点是边缘硬、像素干净;缺点是放大后很容易看到“方块感”。
- 适合:像素风、低分辨率风格、需要硬边的图案。
- 不适合:写实材质、需要柔和过渡的大面积纹理。
Bilinear
最常见的默认平滑
Bilinear 会对当前纹理层内相邻 texel 做线性插值。它比 Point 平滑得多,也因此会带来一点模糊感。
- 适合:大多数常规 3D 贴图与一般 UI 图片。
- 特点:成本和质量通常比较平衡。
Trilinear
远处更稳定
Trilinear 在 Bilinear 的基础上,还会在相邻 Mipmap 层之间继续混合,因此远距离、斜视角时的纹理过渡更自然。
- 适合:有 Mipmap 的 3D 贴图、远景地面、倾斜表面。
- 注意:没有 Mipmap 时,它与 Bilinear 的效果接近。

三、在 URP 中它具体影响哪里?
只要你在 URP 中采样纹理,这两组状态几乎都会参与结果:Base Map、Normal、Mask、Noise、Flow Map、UI 图集,甚至后处理里读 LUT 时都一样。 你看到的“边缘重复”“像素糊掉”“远处闪烁”,很多都能直接追溯到 Wrap / Filter 的组合选择。
| 问题表现 | 常见原因 | 优先检查 |
|---|---|---|
| 噪声滚动时边缘接缝明显 | 贴图不是无缝图,却用了 Repeat | 贴图边缘是否可平铺;Wrap 是否该改 Clamp |
| 像素风 UI 发糊 | Filter 仍是 Bilinear / Trilinear | 改为 Point,检查 Canvas 缩放与分辨率 |
| 远处地面纹理抖动或层级切换明显 | 只有 Bilinear,没有更平滑的 Mipmap 过渡 | 是否开启 Mipmap;是否尝试 Trilinear |
| 渐变贴图边缘出现重复色带 | Wrap 使用了 Repeat | 改为 Clamp,避免 UV 越界后重复图案 |
四、代码示例:URP 采样写法与运行时修改
下面两段代码分别对应最常见的场景: 一段是 URP HLSL 中如何采样 BaseMap,另一段是用 C# 在运行时直接改纹理的 Wrap / Filter 设置。 代码区会按行依次出现,方便逐行阅读。
TEXTURE2D(_BaseMap);
SAMPLER(sampler_BaseMap);
half4 SampleBaseMap(float2 uv)
{
half4 color = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, uv);
return color;
}
// 重点:如果 _BaseMap 的 Wrap Mode 是 Repeat,uv = 2.3 仍会继续平铺。
// 如果是 Clamp,uv 超界后会停在边缘颜色。
// Filter Mode 则决定这个 color 在放大/缩小时是锐利还是平滑。
using UnityEngine;
public class TextureSamplerSetup : MonoBehaviour
{
[SerializeField] private Texture2D targetTexture;
private void Start()
{
targetTexture.wrapMode = TextureWrapMode.Clamp;
targetTexture.filterMode = FilterMode.Trilinear;
targetTexture.Apply(false);
}
}
五、项目里怎么选最稳妥?
Wrap Mode 选择建议
- 地面 / 噪声 / 流动纹理:优先 Repeat。
- UI / 渐变 / 遮罩 / LUT:优先 Clamp。
- 一看到边缘重复:先别怀疑 Shader,先看 Wrap。
- 一看到接缝:先确认贴图本身是否无缝。
Filter Mode 选择建议
- 像素风:Point。
- 绝大多数常规贴图:Bilinear。
- 远景 3D / 开启 Mipmap 的表面:Trilinear。
- 觉得纹理太糊:先排查 Filter,再看分辨率与 Mipmap。
非常实用的经验法则:
Repeat / Clamp 主要回答“该不该重复”;Point / Bilinear / Trilinear 主要回答“该不该平滑”。
如果你把这两句话记住,Unity 里八成的纹理采样问题都能第一时间定位到方向。
六、结语
在 Unity URP 中,采样器状态并不显眼,却几乎时时刻刻在影响最终画面。Wrap Mode 决定 UV 越界时怎么读,Filter Mode 决定像素之间怎么过渡。 理清这两组设置后,你会更容易解释为什么同一张贴图在不同项目里“看起来完全不是一回事”。
参考整理自 Unity 官方关于 TextureWrapMode 与 FilterMode 的定义: Repeat 表示平铺;Clamp 表示边缘拉伸;Trilinear 表示在 Mipmap 层级之间继续混合。
219

被折叠的 条评论
为什么被折叠?



