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