2011-09-07 66 views
6

我正在为一个艺术家公司编写一个支持全高清的2D引擎,希望它是跨平台的,并且是用OpenGL和C++编写的。全高清2D纹理内存OpenGL

我一直面临的主要问题是如何处理所有这些高清精灵。艺术家以24fps的速度绘制图形,并将它们导出为png序列。我已经将它们转换为DDS(不理想,因为它需要加载directx头文件)DXT5减少了文件大小。游戏中的某些场景一次可以有5个或6个动画精灵,并且这些场景可以由200个以上的帧组成每个。目前我正在将sprites加载到指针数组中,但加载时间过长(即使使用压缩纹理),并使用相当多的内存(大约500mb用于全部场景)。

所以我的问题是你有任何想法或提示如何处理如此大量的帧?有一对夫妇的想法,我thought've的:

  • 使用SWF格式,从Flash
  • 实现一个2D骨骼动画系统中存储的帧,更换PNG序列(我有顾虑关节是可见的)

像Castle Crashers这样的游戏如何快速加载高清显卡?

+1

从磁盘加载太长,或上传到GPU太长时间? – genpfault

+0

“不理想,因为它需要directx标题才能加载”您不需要Direct3D标题来加载DDS。 –

回答

2

24 fps手绘动画?你有考虑过降低帧率吗?即使是电影质量的cel动画也很少以24fps的速度绘制。即使降低到18 fps也会摆脱25%的数据。

无论如何,您并未指定,其中您的加载时间很长。是从硬盘加载到内存的问题,还是内存质量加载问题?您是否经常将纹理数据集交换到GPU中,或者您是否在加载时仅从纹理数据中构建一堆纹理?

如果是磁盘加载问题,那么您唯一真正的选择是压缩磁盘上的纹理数据并将其解压缩到内存中。 S3TC风格的压缩并非如​​此压缩;它被设计成可用于纹理硬件的可用压缩技术。通常可以通过使用标准压缩库使其更小,如zlib,bzip2或7z。当然,这意味着必须对其进行解压缩,但CPU的硬盘速度比硬盘快,所以这通常是总体上的胜利。

如果问题出在纹理上传带宽上,那就没有很多解决方案了。那么,取决于你感兴趣的硬件。如果您感兴趣的硬件支持OpenCL,那么您始终可以将压缩数据传输到GPU,然后使用OpenCL程序将其直接解压缩到GPU内存中。但要求OpenCL支持将影响您可以支持的最低硬件级别。

不要很快地排除2D骨骼动画。像Odin Sphere这样的游戏可以通过对每个手臂位置进行多个版本来实现更好的2D骨骼动画。被绘制的是最接近它所连接的身体部位的那个。他们还利用聪明的艺术来隐藏任何缺陷,如喇叭服装等等。

+0

hmnn感谢您的建议,它出现在我的案例中,它是纹理上传带宽。我使用zlib打包纹理,并优化png纹理。它使速度更快一些,但可能不得不采取降低帧速率的措施。再次感谢! – GracelessROB

4

首先要记住的是,并非所有的平台都支持DXT5(特别是手机)。

除此之外,你有没有考虑使用类似zlib来压缩纹理?纹理可能会有相当程度的自相似性,这意味着它们会压缩很多。在这个时代,由于处理器的速度,解压缩成本很低,节省的时间使得数据离开磁盘可能比解压缩所花费的时间要有用得多。

如果我是你,我会从那里开始。

+2

+1为我见过的最好的压缩库,zlib – Prime

+0

大多数手机无法处理500MB的纹理数据,所以我猜那些对他无关紧要;) –

+1

@Nicol:你可以用zlib压缩和流。 – Goz