简介
多级渐远纹理(Mip Map)是 2D 贴图的纹理被处理成由一系列被预先计算和优化过的纹理组成的集合,一般用于加快 3D 场景渲染速度和减少纹理锯齿、摩尔纹 。
多级渐远纹理的逻辑
多级渐远纹理(Mip Map)中每一个 层级(Mip)的小纹理都是原 2D 贴图纹理的一个特定比例的缩小的复制品,每个层级纹理的像素尺寸逐渐变小,且每个层级的纹理 U 轴(水平方向)和 V 轴(垂直方向)像素值都是上一个层级或者贴图的纹理的二分之一(向下取整)。

2D 贴图的原始纹理宽高分别是 128 像素,每个格子宽高是 16 像素的情况下,4 个层级的多级渐远纹理示例。
当贴图被缩小或者需要从远距离观看时,渲染的时候会根据当前屏幕像素点渲染对应的 纹理坐标 (UV) 以及计算的 DDX 和 DDY 值来确定要使用哪个层级的纹理。 DDX 和 DDY 提供有关当前像素旁边和上方像素的 UV 的信息,包括距离和角度。渲染系统使用这些值来确定 摄像机(Camera)可以看到多少纹理细节,将贴图的纹理转换到适当层级的纹理。当前像素与其相邻像素之间的距离越大,角度越大(相当于远于摄像机的内容),意味着渲染系统会选择较低分辨率的层级的纹理;较短的距离和较小的角度(相当于靠近摄像机的内容),意味着渲染系统会选择具有更高分辨率的层级的纹理。

多级渐远纹理的意义
提升渲染质量
为节省运行游戏项目时的渲染性能,SandMod 渲染离摄像机远的内容时系统会直接地选择读取最接近纹理坐标的像素颜色。而生成的 多级渐远纹理(Mip Map)不同 层级(Mip)的纹理是基于纹理坐标附近的纹理像素,计算出一个插值,近似出这些纹理像素之间的颜色。
![]() | ![]() |
| SandMod 默认情况下,如图中 4 个像素,十字符号代表当前读取的纹理坐标。左上角的纹理像素的中心距离纹理坐标最近,所以会被选择为样本颜色。 | 使用 多级渐远纹理(Mip Map)的情况下,系统会直接读取对应层级的纹理中基于图中 4 个像素生成的像素颜色值,因此样本颜色为图中 4 个像素插值的近似颜色。 |
这会导致在不使用 多级渐远纹理(Mip Map)的时候会出现锯齿或摩尔纹的情况发生。

与近的塔楼相比,更远处的塔楼出现了摩尔纹,越远的塔楼越明显,看起来就像砖块都扭曲了。
虽然 SandMod 已经对纹理采样做出了自动化处理,但是在晃动摄像机等渲染处理不及时的时候,锯齿和摩尔纹的现象会非常明显,而使用 多级渐远纹理(Mip Map)能有效解决这一问题。
不启用 多级渐远纹理(Mip Map)时晃动摄像机。
启用 多级渐远纹理(Mip Map)时晃动摄像机。
节省渲染性能
使用 多级渐远纹理(Mip Map)能节省渲染性能,主要是以下原因:
- 渲染离摄像机远的内容时会直接读取对应 层级(Mip)的低分辨率纹理信息,这可以加快渲染的速度。
- 渲染过程中只需要对已经采样的纹理执行少量操作,而不是对原始全分辨率纹理执行许多采样操作。
值得注意的是,无论 2D 贴图的 多级渐远纹理(Mip Map)是否在渲染过程中被使用,其都将额外占用运行设备内存,而且占用的储存空间相当于该 2D 贴图的纹理储存空间 33% 的大小。
纹理采样模式
本小节主要描述的是基于 多级渐远纹理(Mip Map)的纹理采样模式,其中包含 三线性采样(Trilinear)和 双线性采样(Bilinear)两种采样模式。
三线性采样(Trilinear)与 双线性采样(Bilinear)相比,三线性采样过程不会直接采用采样点更接近的多级纹理数据,而是根据采样位置获取接近的两个多级纹理数据的结果生成线性插值,并采样该差值。因此 三线性采样(Trilinear)模式能更好解决 多级渐远纹理(Mip Map)导致纹理断层等问题。
![]() | ![]() |
| 双线性采样(Bilinear)模式下墙壁的纹理出现断层的情况。您可以点击图片放大查看。 | 三线性采样(Trilinear)模式下墙壁的纹理平滑过渡,不会出现断层。您可以点击图片放大查看。 |
多级渐远纹理偏差
多级渐远纹理偏差(Mip Map Bias)的设置可以在采样时执行:
- 更改渲染过程为样本选择较低或较高 多级渐远纹理(Mip Map)级别的阈值。当您在对应纹理的 2D 贴图资产(2D Texture Asset) 采样模式(Filter Mode)属性中设置 双线性采样(Bilinear)或 三线性采样(Trilinear)时,系统会选择特定的 层级(Mip)进行采样。
| -------------- 例如,系统通过计算判断渲染的纹理使用 层级 5(Mip 5)中的样本。当 多级渐远纹理偏差(Mip Map Bias)为 -2 时,系统将在渲染时使用更高分辨率的 层级 3(Mip 3)作为样本。 -------------- |
- 当混合来自不同 层级(Mip)的样本时,多级渐远纹理偏差(Mip Map Bias)可以渲染时以精确的百分比优先选择一个 层级(Mip)。当您在对应纹理的 2D 贴图资产(2D Texture Asset)中设置 采样模式(Filter Mode)为 三线性采样(Trilinear)时,渲染时系统会混合 层级(Mip)并输出最终渲染的结果。
要设置单个纹理的 多级渐远纹理偏差(Mip Map Bias),请参阅 API 文档关于 Texture.mipmapBias 的相关内容。要手动在 着色器(Shader)中为纹理采样操作设置 多级渐远纹理偏差(Mip Map Bias),请使用 GLSL 函数,例如 gvec4 texture(gsampler3D sampler, vec3 P, float bias)




