Mipmap
预先计算的一组逐步降低分辨率的纹理版本,GPU 用于在纹理以缩小尺寸显示时减少锯齿并提升渲染性能。
Mipmap (源自拉丁语 "multum in parvo") 是 Lance Williams 于 1983 年引入的数据结构,以多个分辨率级别存储纹理。每个级别的尺寸是前一级别的一半,一直缩小到 1x1。
- 级别结构:Level 0 为全分辨率 (如 1024x1024),Level 1 为 512x512,依此类推。总内存开销约为 33% (原始大小的 4/3)
- LOD 选择:GPU 根据屏幕空间像素覆盖率选择最优 mip 级别。远处物体使用较低级别,减少锯齿和带宽消耗
- 三线性过滤:在两个相邻级别内进行双线性插值,然后在级别之间进行线性混合。消除级别过渡处的可见接缝
- 各向异性过滤:基于观察角度的非均匀采样,使倾斜表面更清晰。通过
GL_MAX_TEXTURE_MAX_ANISOTROPY控制
在 OpenGL 中使用 glGenerateMipmap(GL_TEXTURE_2D) 生成,在 DirectX 中使用 GenerateMips()。Unity 和 Unreal 默认启用 mipmap。权衡:禁用可节省 33% 显存,但远处表面会出现闪烁。