1. Mipmap Streaming 技术深度解析
在游戏开发中,纹理内存管理一直是个令人头疼的问题。特别是对于移动端和开放世界场景,高分辨率纹理的显存占用往往成为性能瓶颈。Unity 的 Mipmap Streaming 技术通过动态加载纹理金字塔层级,实现了显存占用和渲染质量的完美平衡。
1.1 什么是 Mipmap Streaming
Mipmap Streaming 是一种按需加载纹理层级的技术。传统方式会一次性加载纹理的所有 Mipmap 层级到显存中,而 Streaming 方式则根据物体与摄像机的距离,仅加载当前所需的 Mip 层级,其他层级按需从磁盘异步加载。
注意:启用 Mipmap Streaming 后,纹理在磁盘上仍需要存储完整的 Mipmap 金字塔,这会增加约33%的存储空间占用。
1.2 核心工作原理
Mipmap Streaming 的工作流程可以分为三个关键环节:
- 层级计算:GPU 通过 DDX/DDY 计算当前像素覆盖的 Texel 面积,确定理想的 Mip 层级
- 层级加载:Unity 仅加载理想层级及其相邻层级(通常为±1级)
- 内存管理:系统根据全局内存预算动态调整各纹理的加载层级
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术实现细节
2.1 DDX/DDY 计算机制
DDX 和 DDY 是 GPU 内部用于计算像素间差异的导数。在纹理采样时,它们表示 UV 坐标在屏幕空间中的变化率:
code复制MipLevel_ideal = log2(max(ddx(uv), ddy(uv)))
这个公式的意思是:通过比较相邻像素 UV 坐标的变化程度,可以推算出当前像素应该使用哪个层级的 Mipmap 才能获得最佳的显示效果。
2.2 纹理金字塔管理
Unity 为每个纹理维护一个完整的 Mipmap 金字塔,最高支持 8192x8192 分辨率的14个层级。运行时系统会:
- 监控所有使用该纹理的物体的屏幕空间覆盖率
- 计算各物体所需的最小 Mip 层级
- 仅加载必要的层级到显存中
2.3 内存预算控制
通过 QualitySettings.streamingMipmapsMemoryBudget 可以设置全局的纹理流送内
