在 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 是 Repeatuv 2.3 仍会继续平铺。 // 如果是 Clampuv 超界后会停在边缘颜色。 // 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 层级之间继续混合。