每当纹理数据发生变化时,都必须生成mipmap。只要纹理不变,也就不需要重新创建它们。
它们会影响性能,因为每个texel的读取操作都会变慢。根据您使用的过滤器类型,GPU必须从多个mipmap级别读取多个纹理以计算最终颜色。
例如
GL_NEAREST
将只读取1个texel并返回该texel。
GL_LINEAR
将必须从一个mipmap级别读取4个texel并执行双线性插值。如果现在启用mipmapping,那么来自第二个纹理级别的信息也会影响结果。具有
GL_LINEAR_MIPMAP_LINEAR
,GPU将在大于所需大小的mipmap级别中执行线性查找(4 texel),并在小于所请求大小的mipmap级别中执行一个线性查找。然后对这两次查找的结果进行插值以获得最终颜色。总之,a
GL_LINEAR_MIPMAL_LINEAR
查找可能读取8个texel,并在两个级别之间执行2个双线性插值和一个线性插值(
trilinear interpolation
)。
另一个考虑因素是GPU内存消耗。Mipmaps需要存储在gpu上的某个位置,与没有Mipmaps的情况相比,需要占用大约1/3的空间。
有关Mipmapping的更多详细信息,还应阅读
Wikipedia Article
这很好地解释了这个概念。正如其他人在评论中所述
blog
提供有关纹理过滤方法的良好概述。
请注意,此处的解释假设为二维纹理。另请注意,
图形卡可以很好地优化这个过程,但描述的技术是它在理论上的工作原理。