为什么你需要在图形应用中使用mipmapping技术?

作者:Tom Lewis

PowerVR开发者文档网站已经更新上线并且运行了几个星期。我们非常高兴看到开发人员从中获得帮助,对他们的应用进行了最大化的优化,而且他们还会学习到关于图形编程和PowerVR的新知识。

如果你还没有抽出时间去浏览这个网站(你真的该去看看),我们将在这里简单介绍关于PowerVR性能优化的一些建议

我们除了为高级图形开发人员编写了文档,还花了更多的时间来帮助那些图形应用编程的新手,比如我们推出的VulkanOpenGL ES入门指南。现在要讨论的主题是mipmapping技术,我们会对这个技术先做个非常简短的介绍,然后探讨一些高级的技巧,尤其是与PowerVR相关的。

Mipmapping技术介绍

简而言之对于所有图形应用来说mipmapping技术都是非常有用的,因为它提高了缓存效率,降低了带宽,而我们只需要稍微增加纹理文件的大小即可。

然而对于外行来说….

Mipmapping技术具体是什么?

Mipmap是纹理图像预过滤的较小版本,表示纹理的不同层次细节(LOD),它们通常被存储在一系列不断缩小的纹理对象中,这些纹理称为mipmap链,每一级的都会比上一级的小一半。


它们的应用场景是对象与相机之间的距离是可变的情况,随着对象离相机越来越远,对象的纹理在屏幕上比它实际的分辨率会更小,换句话说每个屏幕像素点包含不止一个对象的像素,纹理将不得不在缩小过滤的过程中不断缩小,这通常需要应用程序对多个纹理进行采样从而确定像素的颜色。当你需要运行时只为单个像素而要对整个纹理进行采样好像是个得不偿失的问题。

这也是mipmap的用武之地,应用程序可以根据对象与相机的距离在纹理链中的任何低分辨率的mipmap之间进行切换,而不是重复对单个纹理进行采样.

你能详细的解释一下这样的好处吗?

我非常高兴你能提出这样的问题,主要有两大优势:

1. 改进图像质量——采用mipmapping可以帮助消除由于纹理采样不足引起的混叠效果,这种效果可能会直接影响应用图像的视觉质量

2. 提升系统性能——mipmapping提高了系统缓存效率,因为不需要经常采用全部的纹理资源,而且分辨率较低的mipmap更容易适合纹理缓存,这意味着不必经常获取纹理资源,从而减少了带宽的消耗同时也提升了系统整体性能。

问题有哪些?对于大部分应用程序开发来说,唯一值得注意的是纹理资源的大小,因为完整的mipmap链必须与完整分辨率的纹理一起存储,这将使得整个资源大小增加约33%,但随着呈现速度和图像质量的提高,这实际上并不再重要。

也有一些情况mipmapping不是很适用,例如:

1. 不改变与相机距离的对象,比如UI元素,这些元素的LOD永远不会改变,因此在这种情况下mipmapping是没有任何意义的。

2. 无法合理使用过滤的情况,比如索引和深度纹理,它们一般会包含一些非图像数据。

生成mipmap资源

Mipmap可以在离线状态下创建,也可以在运行时创建,这个取决于离线生成的存储成本和运行时生成增加的工作负载之间的平衡,然而大多数情况下离线生成的方式是最好的。

我们推出的非常受欢迎的纹理处理工具PVRTexTool(包含在PowerVR SDK中)可以用于纹理生成完整的mipmap链,只需要几下点击操作即可。然后可以使用我们专有的压缩工具PVRTC将其他格式的纹理资源保存为mipmap资源。

如果你真的想在运行时生成mipmap(同时会失去PVRTC工具和其他压缩格式带来的优势),OpenGL ES提供了glGenerateMipmap函数,不幸的是Vulkan图形库并没有为此提供任何内置函数,所以需要开发者自己来实现这个功能。

想了解更多关于mipmapping的信息吗?

关于mipmapping的更多信息你可以查看下面我们发表的一些文章:

  •  采用mipmapping来提升质量和性能
  •  黄金法则——使用mipmapping
  •  黄金法则——使用LOD

最后…

更多关于PowerVR性能建议和其他有用的开发者信息,请大家访问我们最新推出且不断更新的网站(docs.imgtec.com)。

大家可以在论坛或其他网站留下建议和反馈。

大家也可以在推特上关注我们@rajones_devtech及时获取开发人员技术相关的新闻,或者关注@powervrinsider获取关于PowerVR的最新消息。

原文链接:https://www.imgtec.com/blog/why-you-really-should-be-using-mipmapping-in...

声明:本文为原创文章,转载需注明作者、出处及原文链接,否则,本网站将保留追究其法律责任的权利。

推荐阅读