为什么 Mipmap 会多占 1/3 内存而不是其他值?

由于该博客所使用的图床需要一个备过案的域名,所以博客中的图片都暂时失效。读者可以移步知乎专栏阅读:

知乎

关于图床问题我会尽快解决,谢谢支持。

本篇文章未经作者本人授权,禁止任何形式的转载,谢谢!

预备知识

最基本的图形学基础和 Mipmap 基本原理。

概要

Mipmap 会多占 1/3 内存在游戏渲染界可能是常识了,不过最初我在接触的时候也没多想,以为只是一个通过实际测量得来的经验值,如果有比现在常见的分辨率大很多的纹理,就会有不同的结果。但是最近在复习数学的时候(说来惭愧,与其叫复习不如说是重学,大学高数高代离散数分都靠考前一个礼拜突击才过的),突然想到了这个其实可以用数学来求解,无论纹理多大,Mipmap 所多占的内存都是一样的。

Mipmap 各级别尺寸

想要用数学求解,必须先了解 Mipmap 各个级别的尺寸大小是如何确定的,正常来说,Mipmap 会生成很多级别,每一级别的宽高都是上一个级别的 1/2,也就是说面积为上一个级别的 1/4,直到最终只有 1x1 分辨率的大小。

举个例子,一张 1024 1024 的纹理,生成 Mipmap 后,会新产生 512 512,256 256,128 128,64 64,32 32,16 16,8 8,4 4,2 2,1 1 这几张不同纹理级别的纹理。可以手动计算一下,新产生的纹理大小总和是 349525 个像素,而原来的 1024 1024 纹理有 1048576 个像素,349525 / 1048576 约等于 0.33333302,也就是大约 1/3。

扩展到一般情况,需要用数学求解一下。

数学推导

用错位相减法可以方便地求解:

我们不会去考虑 n 只有 1 的情况,这没什么意义,也很特殊。所以我们直接求 n 趋向于正无穷时的结果。

所以

关于数学的一些想法

数学确实是个很有意思的东西,这篇文章也是在我复习的时候想到的,这也印证了我的一个想法,长期不做数学题,数学思维就会退化,这篇文章的数学推导也不知道有没有不严谨的地方,以后还是要更加努力才行。

坚持原创技术分享,您的支持将鼓励我继续创作!