我正在为一家艺术家公司编写一个支持全高清功能的2D引擎,希望这种技术可以跨平台,并且用OpenGL和C ++编写。
我遇到的主要问题是如何处理所有这些高清精灵。艺术家以24fps的速度绘制图形,并将它们导出为png序列。我已将它们转换为DDS(不理想,因为它需要加载directx标头)DXT5可以减少文件大小。游戏中的一些场景一次可以有5或6个动画精灵,这些可以包含200多个帧 每个 。目前我正在将sprite加载到一个指针数组中,但这需要很长时间才能加载,即使使用压缩纹理,并且使用相当多的内存(大约500mb用于完整场景)。
所以我的问题是你对如何处理如此大量的帧有任何想法或提示吗?我认为有几个想法:
像Castle Crashers这样的游戏如何通过高清显卡加载速度如此之快?
答案 0 :(得分:4)
首先要记住的是,并非所有平台都支持DXT5(专门用于移动设备)。
除此之外,您是否考虑使用像zlib这样的东西来压缩纹理?纹理可能具有相当程度的自相似性,这意味着它们会压缩很多。在这个时代,由于处理器的速度,减压很便宜,从磁盘上获取数据所节省的时间远比减压时间更有用。
如果我是你,我会从那里开始。
答案 1 :(得分:2)
24 fps手绘动画?你考虑过降低帧率吗?即使是电影质量的cel动画也很少以24-fps的速度拍摄。即使降至18 fps也会消除25%的数据。
在任何情况下,您都没有指定其中您的加载时间很长。是从硬盘加载到内存的问题,还是纹理加载的内存是问题?您是否经常将一组纹理数据交换到GPU中,或者您是否只是在加载时从中构建了一堆纹理?
如果是磁盘加载问题,那么您唯一真正的选择是压缩磁盘上的纹理数据并将其解压缩到内存中。 S3TC式压缩不是那种压缩的;它被设计成一种可用于纹理硬件的压缩技术。通常可以通过在其上使用标准压缩库来缩小它,例如zlib,bzip2或7z。当然,这意味着必须对其进行解压缩,但CPU比硬盘更快,所以这通常是整体上的胜利。
如果问题出在纹理上传带宽上,那么解决方法就不多了。好吧,取决于您感兴趣的硬件。如果您感兴趣的硬件支持OpenCL,那么您始终可以将压缩数据传输到GPU,然后使用OpenCL程序将其直接解压缩到GPU内存中。但是,要求OpenCL支持将影响您可以支持的最低硬件级别。
不要如此快速地消除2D骨架动画。像Odin Sphere这样的游戏可以通过拥有每个手臂位置的几个版本来实现更好的2D骨骼动画。被绘制的那个是最接近它所附着的身体部分的那个。他们还使用巧妙的艺术来隐藏任何缺陷,如喇叭形衣服等。