纹理图集的最大尺寸应该是多少?

3
我正在制作一个使用纹理集加载大量艺术品的OpenGL游戏。
纹理集很有用,因为您只需一次加载图像,然后从中切割出精灵。与独立文件相比,您节省了从磁盘加载所有文件所需的时间,并节省了存储图像的内存。但是在我看来,超过某个点,这种优势将不再真实,对吧?我的想法是,如果纹理集非常巨大,您将浪费很多内存来存储它,并且其中一些精灵可能不会被频繁使用。
那什么是最好的方法?分成多个精灵?逐级分离?或者其他什么?
无论如何,我的问题是:什么是以像素为单位的最大纹理集大小,才能被认为是有利的?

没有铁规。您需要对自己的应用程序进行分析以确定性能权衡。 - Dietrich Epp
好的,我知道,我在谈论常识。 - Duck
常识告诉我们,应该将纹理的尺寸保持在最大支持的纹理尺寸 GL_MAX_TEXTURE_SIZE x GL_MAX_TEXTURE_SIZE 以下。一个非常现实的问题是,在 OpenGL ES 中纹理不能“部分存在”(你标记了错误版本的 GL),因此你不想使用 MAX SIZE 纹理,在空间中浪费 90% 的内存,或者强制让几乎从不被引用的纹理保持存在,只是因为其他更常见的纹理总是被引用。这时候,你开始撤销单个纹理缓存的好处。 - Andon M. Coleman
好的,谢谢解释。我怀疑在一定程度上超过了这个点,它不会对应用程序有益处。谢谢。 - Duck
2个回答

5

最新的iOS设备(iPhone 4S及以上,iPad 2及以上)支持高达4096 * 4096像素的纹理。除了前两款现在已经基本过时的iPhone外,所有以前的设备都支持2048 * 2048像素,所以你不能无限制地扩展。

iOS设备不会因为几个最大尺寸的纹理而出现问题,但实际上你应该选择多高的纹理尺寸取决于你的内容。例如,如果用户一次只能玩其中一个角色,那么为多个玩家角色制作一个最大尺寸的纹理集就没有意义了。所以我想你的问题没有通用答案。


0

如果您实际上使用了纹理中的所有区域,并且不关心浪费的内存空间,那么将其调整为2048x2048并没有特定的性能惩罚。

问题在于,如果在采样时出现欠采样(例如,将512*512纹理区域投影到屏幕的较小区域),这可能会导致大量额外的内存获取。如果您正在编写一个2D游戏,其中精灵大多以1:1绘制(可能具有轻微的缩放或旋转),那么这不是一个问题。

同样,如果您正在进行3D渲染并且具有mipmaps,则mipmaps将处理欠采样情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接