使用的纹理数量是否影响效果?

问题描述 投票:2回答:2

我正在使用SFML创建一个小型2D游戏,并在互联网上遇到警告,说我应该使用尽可能少的不同纹理以实现最佳性能。

[在这里是什么意思?是我拥有多少个纹​​理,还是我的子画面每帧要多少个?我可以为菜单使用一堆纹理(例如超过5个),还是在游戏运行时仅使用一个纹理(菜单纹理)?仍然存在)并且不影响性能?

performance graphics textures sfml
2个回答
2
投票
用于渲染单个帧的纹理数量会导致性能影响。

如果仅使用5个纹理,则意味着只要尽可能高效地绘制它们,您只需在每帧纹理之间切换5次即可。

如果您要绘制10.000个对象,而所有这些对象都可以使用相同的单个纹理绘制,那么使用10.000个看起来完全相同的纹理是一个糟糕的主意,因为您无缘无故地每帧切换纹理10.000次。

切换纹理不是免费的;它花费时间和处理器周期。因此,尤其是在游戏中,我们希望尽可能少做。

第二,大纹理会占用大量空间。只要您所有的纹理都紧密地适合内存而没有任何交换或其他技巧,您就不会受到纹理大小的太大影响。

但是一旦它们变得太大,这也会开始产生影响。


1
投票
实际上,是纹理绑定调用(OpenGL glbindtexture)在性能上很昂贵(如果在较新的OpenGL版本中未更改)。由于SFML在OpenGL之上运行,因此每个使用需要渲染的纹理的Sprite都将切换纹理以绑定所需的纹理。

因此,整个项目可能只有2个纹理,但是对于10000个对象中的每一个,在两个纹理之间进行切换,仍然会遇到性能问题。另一方面,您可以有100个纹理(并不是一个好主意),并使用第一个纹理进行99%的渲染,然后切换到其他99个纹理,这样就可以提高性能。

我强烈建议您将资产打包成更大的图像。就像一两​​个用于游戏渲染,一两个用于GUI一样,请确保不要切换太多次。然后,将它们的一部分(子区域)与sf::Sprite一起使用,这是一个轻型对象。

但是请记住,最好先进行某些工作,然后再对其进行优化。尽管如此,从一开始就获得所需的信息绝不是坏主意。

© www.soinside.com 2019 - 2024. All rights reserved.