纹理采样
在 Unity 图形渲染中,纹理采样方式的核心分类围绕 采样过滤模式(Filter Mode)、纹理寻址模式(Wrap Mode) 和 Mipmap 采样策略 展开,三者组合决定最终采样行为。以下是底层实现相关的关键分类及技术细节,聚焦性能和渲染效果的核心差异:
Unity纹理相关的设置参考:Unity纹理压缩格式以及纹理设置 - JeasonBoy - 博客园
参考文章:移动平台的纹理过滤 - 知乎
一、核心采样方式分类(底层技术维度)
1. 纹理过滤模式(Filter Mode)—— 解决 “纹理像素与屏幕像素不匹配” 的采样插值问题
决定纹理被放大(Magnification)或缩小(Minification)时,如何从纹理像素(texel)中提取颜色,直接影响性能和清晰度:
-
点采样(Point / Nearest)
- 原理:取距离采样点最近的单个 texel 颜色(无插值计算)。
- 性能:最快(仅 1 次纹理读取,无浮点运算),适合海量纹理或低性能设备。
- 效果:像素化、锯齿感强,放大时明显失真(如 8-bit 像素风格游戏)。
- 底层实现:采样坐标四舍五入取整,直接索引纹理数组。
- 适用场景:UI 图标、像素风纹理、不需要平滑过渡的场景。
-
双线性过滤(Bilinear)
- 原理:对采样点周围 4 个相邻 texel 进行线性插值(2D 线性插值)。
- 性能:中等(4 次纹理读取 + 插值计算),是平衡性能和效果的主流选择。
- 效果:平滑过渡,无明显像素化,但缩小纹理时可能出现模糊或摩尔纹。
- 底层实现:计算采样点在纹理空间的小数部分,对 4 个邻域 texel 做加权平均。
-
三线性过滤(Trilinear)
- 原理:在双线性过滤基础上,增加 Mipmap 层级间的线性插值(先在两个相邻 Mipmap 层级分别做双线性采样,再对结果插值)。
- 性能:略低于双线性(8 次纹理读取 + 两次插值),但 Mipmap 本身可提升缓存命中率。
- 效果:缩小纹理时过渡更平滑,彻底消除 Mipmap 层级切换的 “跳变感”,兼顾清晰度和抗锯齿。
- 底层实现:通过采样坐标的 LOD 值(细节层级),计算两个相邻 Mipmap 层级的权重,再融合双线性结果。
- 适用场景:3D 场景中的地面、墙面等需要远距离观察的大型纹理。
-
(左图双线性过滤,可以明显看到在不同Mipmap层级过渡的地方很生硬)
-
各向异性过滤(Anisotropic Filtering)
- 点采样、双线性过滤、三线性过滤属于“各向同性”
- 原理:针对纹理在倾斜视角下(如斜着看地面)的拉伸失真,通过 “非均匀采样”(沿拉伸方向增加采样点数量)优化,支持与双线性 / 三线性结合使用。
- 性能:最高(采样点数量随各向异性等级增加,等级越高性能消耗越大),但现代 GPU 优化后开销可控。
- 效果:倾斜视角下仍保持纹理清晰度,是 3D 游戏中提升画质的关键选项(通常设为 4x、8x、16x 等级)。
- 底层实现:根据纹理在屏幕空间的拉伸比例(各向异性因子),动态调整采样核的形状和采样点密度,沿拉伸轴方向增加采样次数。
- 适用场景:3D 游戏的地面、路面、建筑外墙等需要多角度观察的纹理。
-
(左图三线性过滤,可以明显看到透视视角下远处的纹理很模糊) -
(相比各向同性过滤,各向异性在采样的时候并非固定方块采样核,而是随纹理拉伸方向动态拉伸的非均匀采样核,避免纹理拉伸导致的各向异性密度分布导致采样不准确)

Aniso Level 设置各向异性过滤级别,默认1表示不开启
2. 纹理寻址模式(Wrap Mode)—— 解决 “采样坐标超出纹理范围” 的重复 / 填充规则
决定当采样坐标(UV)不在 [0,1] 区间时,如何获取纹理颜色,影响纹理的重复、平铺或边界处理:
-
重复(Repeat)
- 原理:UV 坐标按 1.0 循环取模(如 UV=1.2 等价于 0.2,UV=-0.3 等价于 0.7)。
- 效果:纹理无限重复平铺(如地面瓷砖、墙面纹理)。
- 底层实现:
frac(UV)计算(取小数部分),支持硬件加速,性能无额外开销。
-
镜像重复(Mirror)
- 原理:UV 坐标循环取模后,偶数次重复时镜像翻转(如 UV=1.2 等价于 0.8,UV=2.3 等价于 0.7)。
- 效果:纹理以镜像方式重复(如对称图案、布料纹理)。
- 底层实现:
1.0 - abs(frac(UV * 0.5) * 2.0 - 1.0),硬件支持,性能与 Repeat 一致。
-
** clamp 到边缘(Clamp to Edge)**
- 原理:UV 坐标小于 0 时取 0,大于 1 时取 1,仅使用纹理边缘的 texel 填充超出部分。
- 效果:纹理不重复,超出部分显示纹理边界的颜色(无拉伸失真)。
- 底层实现:
saturate(UV)计算(限制在 [0,1]),硬件加速,性能最优。 - 适用场景:UI 纹理、角色贴图(避免边界重复出现)。
-
Clamp 到边界颜色(Clamp to Border)
- 原理:UV 超出 [0,1] 时,使用预设的 “边界颜色”(通常为透明或黑色)填充。
- 效果:纹理边缘外显示指定颜色,适合需要明确边界的场景(如粒子纹理、遮罩)。
- 底层实现:需在纹理导入设置中指定边界颜色,硬件支持但需额外存储边界色信息,性能略低于 Clamp to Edge。

浙公网安备 33010602011771号