最佳纹理大小是多少?


12

我最近在我的项目中添加了一个纹理打包器,该打包器会将一定数量的纹理打包到单个纹理中,如下所示:

填充纹理

因此,举例来说,这个尺寸为582x1023像素。添加这些压缩纹理的目的显然是为了提高性能,因此我想为OpenGL(使用LWJGL)纹理查找最佳纹理大小。我发现的事情,一个得到广泛支持的最大纹理尺寸似乎是1024×1024,根据为一例。这让我感到奇怪,因为显然很多纹理本身都比这更大,那么这些发生了什么呢?我很确定大多数显卡都支持更大的纹理。我是否可以合理地期望大多数图形卡能够处理4096x4096纹理(或什至更大)?

第二点(我希望这仍然是一个问题,但本质上可以归结为同一问题):纹理的大小应设置为2的幂(256x256、512x512、1024x1024、2048x2048等),并且应该我将小于其的填充纹理填充到下一个2的幂?根据2011年的这个问题,这不是必须的,但可以提高性能并避免出现小错误,而2012年的这个问题说您绝对应该填充纹理。因此,我意识到这些问题以前曾被问过,但它们的日期合理,答案已经更改,而且它们每个都只能部分回答我的问题。其他项目/如何处理?

TL; DR:大多数图形卡可以处理哪种纹理大小?最佳纹理大小是多少(或存在)?我应该将纹理宽度填充到下一个2的幂吗?


4
GPU仅处理2的幂。如果您不手动填充纹理,则GPU(或您选择的游戏引擎)将为您执行此操作,从而导致每个纹理在运行时略有延迟,这可能会加总。但是,我无法提供有关最大/最佳纹理大小的任何帮助。
凯图拉2015年

@ketura啊,我明白了,谢谢。所以说我得到的图像是513x10。将其填充到1024x1024,然后传输所有这些空白像素,还是让GPU这样做,会更快吗?
flotothemoon 2015年

4
您无需走高。1024 x 16可以工作;它不需要是SQUARE,每个方向只需2的幂。尽管在这种情况下,我会认真考虑是否无法保留一个像素并将其降低到512x16,哈哈。
ketura 2015年

Answers:


6

尽管YMMV,但我将回答这个问题。我使用Steam硬件调查(http://store.steampowered.com/hwsurvey?platform=pc)确定什么是大多数计算机上可用的视频RAM(VRAM)。从截至2015年10月13日(今天)的结果来看,近85%的人拥有1024 MB VRAM。

您的问题非常广泛,因为它没有说明目标硬件(控制台,PC,手持设备,移动设备?),我将讨论PC,您可以根据硬件规格推断其他平台。

假设每个像素32位color + alpha,即每个像素4 bypes,则1 GB VRAM最多可容纳约2.56亿个像素。这相当于256个1K x 1K纹理。这假设(不正确地)假设您只想在VRAM中保留纹理,而还有很多其他事情(例如,网格数据,如果您使用的是3D),则需要留出空间。您可能还希望为纹理的mip映射留出更多空间,如果您的纹理是2的幂,通常效果最好。

现代游戏机(XBOX One和PS4)具有4-8 GB的统一RAM,大多数手持设备和移动设备具有1-2 GB的统一RAM,但对作为VRAM分配的数量有所限制。

我通常会创建2K纹理,以便它可在大多数PC上使用,并允许按比例缩小以适应低端设备。如果您正在编写2D游戏,并且想要定位更高分辨率的显示器(4K,视网膜iPad等),则可以为背景使用4K纹理,但是对于大多数其他部件,这可能会过大。

希望这能帮助并且不会使水变得浑浊。


感谢您的回答,绝对有帮助。至于广泛性,对此感到抱歉,忘记了一些细节:我正在为2D PC开发。如果使用大于最大支持纹理大小的纹理会发生什么?它根本不起作用还是变慢?
flotothemoon,2015年

1
看来我的答案是正确的。检查其他网站论坛的帖子2k纹理是您的游戏在大多数设备上都应支持的纹理。纹理大小限制取决于特定的硬件和特定的OpenGL-ES版本。我不确定具体的错误消息是什么,但是当您尝试加载纹理时它将来自OpenGL-ES。有用的链接:answers.unity3d.com/questions/563094/...forum.unity3d.com/threads/texture-sizes-and-videocards.281422feedback.wildfiregames.com/report/opengl/feature/...
维杰Varadan

当我尝试加载或尝试绑定纹理时?还是这件事吗?
flotothemoon 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.