浅谈游戏优化(一)

游戏性能一直是开发者关注的问题,做好性能优化也是开发者往往会忽略的关键工作。那么怎么做好性能优化工作呢?今天我们就来谈谈性能优化之资源的优化。

资源的优化

资源的优化,顾名思义讲的是游戏中所需要的资源。而在游戏中占用资源最多的便是纹理图片和声音文件。本文主要讲讲这两种资源的优化。

纹理图片优化

在游戏包体中,纹理图片占据很大部分的体积,纹理图片过大,会影响游戏性能。主要有以下三点:

造成包体过大。影响部分平台过审问题,以及用户下载时消耗更多流量问题。
造成占用内存空间过大,从而造成游戏奔溃。
在向GPU传递图片数据时,造成内存宽带的占用,从而造成读入大量图片时的卡顿。

那么,针对这些问题进行纹理图片优化该怎么处理呢?主要有两点:纹理图片压缩和纹理图片缓存。

纹理图片压缩

传统纹理压缩只是单纯的压缩纹理图片的数据,在读入到游戏中,还要经过解压缩的过程,这样其实只是缩小了游戏的包体大小,并没有降低内存中纹理图片所占的大小,反而增加一个解压缩的耗时工作。那么该如何处理呢?拿Cocos2D-X举例,它的渲染底层OpenGL提供了压缩纹理,可以支持压缩纹理图像数据的直接加载,免去解压缩过程。OpenGL ES 2.0中,核心规范不定义任何压缩纹理图像数据。也就是说核心机制是可以加载压缩的纹理图像数据,但没有定义任何压缩格式。因此,包括Qualcomm(高通)、ARM、Imagination Technologies(iPhone主要供应商)和NVIDIA(英伟达)在内的许多供应商都提供了特定与硬件的纹理压缩扩展。这样开发者就必须在不同的平台和硬件上支持不同的纹理压缩格式。比如苹果的设备均采用PowerVR GPU支持PVR格式的压缩格式。

分析对比各种格式:

PVR的ZIP压缩形式,程序读入时先解压缩成PVR,然后再传给GPU

格式 特点
PVR.CCZ
PVRTC 采用有损压缩,在高对比下图片有瑕疵。和PVR.CCZ不同的是,PVRTC不需要解压缩。除此之外Android设备基本不支持PVRTC 格式。
RGB565 RGB和RGBA怎么选?RGB即16位色,也就是没有Alpha透明通道的格式。图片去除Alpha通道可以减少图片文件的大小,但在实际中,由于传递到OpenGL ES时需要数据对齐,实际在内存中RGB和RGBA所占大小一样。在16位色中,RGB565质量最高,总共65536种颜色。代表意思:没有透明度,R=5,G=6,B=5,,那么一个像素点占5+6+5=16位(2字节)
RGBA8888 常用格式。由4个8位组成,即A=8,R=8,G=8,B=8,那么一个像素点占8+8+8+8=32位(4字节)
RGBA4444 由4个4位组成,即A=4,R=4,G=4,B=4,那么一个像素点占4+4+4+4=16位 (2字节)


总而言之,根据不同的需求选择正确的图片格式是性能优化的关键步骤。另外我们也可以将一张大图拆分成小图的方式来减小图片的大小,这样可以保证所有的图素尽可能被重复使用,避免多余图片的浪费。对于非渐进的背景,我们可以使用九宫格图片来减少图片的大小。

纹理图片缓存

这个知识点我将单独用一个博客来讲解(尽情期待^_−)

声音文件优化

纹理之外,声音文件也会在游戏中占据一定的内存大小,优化声音文件也可以帮助降低游戏的峰值内存。优化方式可以从以下两方面考虑:

  • 采用单一声道。这样可以把文件大小和内存使用都减少一半以上。
  • 尽量采用低的比特率来获得最好的音质效果,一般来说96到128kbps对于mp3文件说够用了。

资源优化处理是无止境的,在质量和性能间尽量做到平衡。

版权声明:本文为CSDN博主「放风筝的老表」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/topsun_caseyzhou/article/details/107705741

最新文章