在映射纹理时使用 mipmap 可以提高渲染速度并减少伪影。最近,我写了一个测试平台来表征 3D 图形的功耗,我发现当我使用 mipmap 技术时,应用程序会消耗更多的电量!合理吗?而且,性能是否与映射到对象的图像大小有关?
1 回答
您会看到 mipmapping 会增加功耗,这听起来令人惊讶。但是有可能的解释为什么它会在某些情况下发生。
一方面是对 mipmapped 纹理进行采样需要读取更多的纹素。对于三线性过滤,您需要 8 个纹素,而在非 mipmapped 纹理上进行双线性采样只需要 4 个纹素。所以 mipmapping 需要两倍的纹理读取。
纹理采样单元必须为三线性插值做更多的工作。不确定在这种情况下典型的采样单元是否真的会消耗更多功率,但这似乎是可能的。
在不利的情况下,mipmapping 实际上可能需要更多的内存带宽。假设您对使用整个纹理的多边形进行采样,并且纹理只是略微缩小,因此 LOD 为例如 0.5。在这种情况下,您需要读取所有级别 0 和所有级别 1。与仅读取非 mipmapping 情况下的级别 0 相比,这要多 25%。
显然,生成 mipmap 也很耗电。但只要你这样做一次,然后多次使用纹理,就没有多大关系了。
除了质量考虑之外,一般的想法当然是 mipmapping 会更有效,因此使用更少的功率。在更高的 LOD 值(即更强的缩小)下,我当然希望它会发挥作用,因为内存带宽要求会更低。或者换句话说,缓存命中率会更高。
总之,我的理论是,如果您主要在低 LOD 值下采样,mipmapping 可能会使用更多功率,而在高 LOD 值下它会更节能。