手机游戏中图片格式选择整理

整理自:

一、选择:
ios上图片当然是用pvr(pvrtc2/pvrtc4)格式,推荐pvr.ccz的rgb565/arba4444格式

android上图片为了兼容目前采用PNG/(JPEG/ETC1)格式(或针对部分android手机可用pvr.ccz(NPOT)格式)
两个平台都支持的选择:1024*1024及以下的用PNG(针对ios优化用pvr4效果更好),1024*1024以上的使用NPOT选项的pvr.ccz
为了能兼容各种手机,贴图的长宽不要超过2048(tga格式的图片不要超过1024)。3D光效或模型的贴图必须为2的幂次方,2D图片没有这个限制

各平台下的纹理格式:

PC平台

  • 高效压缩格式纹理dds.

iOS平台

Android平台

C3游戏引擎在Android系统下,根据已知的5种机型硬件不同,采用不同的压缩格式纹理:

  • 1.Mali CPU(三星猎户座CPU,如I9220/I9300等(Galaxy 2/3)): 不透明纹理使用ETC压缩,使用PvrTexTool生成ktx格式后缀的纹理,透明纹理使用png.
  • 2.高通的CPU(HTC手机): 使用The Compressor 工具生成的ATC格式纹理(Note:工具生成的文件后缀名为dds,需要修改后缀名为atc给C3游戏引擎使用)
  • 3.德州仪器CPU(摩托罗拉手机或其他基于PowerVR的GPU的解决方案,如联发科MT6573处理器,三星GS4): 使用跟苹果iOS一样的pvr格式,使用PvrTexTool生成.
  • 4.Nvidia Tegra2 CPU: 使用DDS压缩纹理,等同PC上的纹理格式(DXT1, DXT3, DXT5).
  • 5.Marvell GPU(中兴U880/华为海思CPU):OpenGLES2.0驱动实现有严重问题,只能用png格式。

二、总结:

1、最终决定图片占用内存的是它的像素格式和大小,与其扩展名无关。png8  png32 jpg pvr只要其像素格式都是argb8888,那么最终图片占用的内存是一样的。

2、如果不是pvrtc4的格式,那么图片大小不要扩展成2的整次幂(PC上dds需要2的整次幂但是手机中非pvrtc4不需要),因为图片越小,占用内存越小

3、单单去除透明通道不会减少图片所消耗的显卡内存(内存虽然减少了,但显存却没减少,应该和显存的内存对齐有关),png和jpg图片也无法减少图片体积,所以不推荐rgb888的格式。替代选择rgb565和rgb5551。

5、小心加载图片时临时开辟的纹理数据造成的内存飙高,可以考虑加入内存池,及时的开辟和释放缓冲区

6、如果是为了减少图片体积可以选择1、jpg--压缩比最高,质量较好,但是不支持半透明    2、png8--同样图片会比jpg略大一些,使用ImageAlpha进行转换,视觉上几乎看不出差别。    这两种图片格式都可以极大的减少图片体积(减少70%~80%),但是无助于减少内存

7、如果是为了减少内存可以选择1、没有透明色的图片统一转换为rgb565格式,这个时候无法使用png8了,所以png和pvr.ccz图片大小几乎相同,pvr.ccz速度更快,所以推荐pvr.ccz的rgb565格式    2、如果透明色仅仅是进行关键色标注,而没有渐变混合,那么推荐rgb5551 (r5_a1)的pvr.ccz格式

8、可以考虑写个打包系统,统一把资源文件打包,而不是单个文件用pvr.ccz进行zip压缩,这样可以获得更高的效率。(比如我封装了下暴雪的mpq打包,其读取速度与本地文件读取速度相当,这样就可以获得最佳的读取效率)


PVR格式优点:
1. cpu上,解压速度快,读取后直接交给显卡,不需要转换为ARGB形式就可以提交个显卡。
2. 内存和显存上,读取后直接提交给显卡,不用开辟临时内存来读取像素数据,避免了内存的申请释放消耗和内存的飙升。
3.文件大小上, pvr.ccz是压缩后的pvr格式,将大量的文件压缩为pvr.ccz可以有效的减少文件大小。

pvr.ccz其实就是pvr图片zip打包下,程序读的时候还是先解压出pvr资源,然后再读取pvr。不过由于压缩下可以极大的减小图片体积,所以虽然多了解压过程也不会有特别多的cpu消耗。

pvr格式可以被显卡所认可,而不需要开辟临时内存来读取,所以即便同为argb8888格式的图片,pvr也会比png有效率,虽然不会节约程序稳定运行时的内存,但是会避免加载大量图片时的内存暴涨;pvrtc4格式的图片,这个格式相当于windows下的dds图

  pvr图片可以节约解析图片数据到纹理这一步的消耗。也就是说读取pvr图片资源(等价于解压pvr.ccz到内存,如果是1024*1024 argb8888格式的话,那么图片大小就是4mb,ccz压缩后图片1mb左右)消耗4mb,将pvr图片数据提交给显卡消耗4mb。然后释放文件数据4mb。这么看似乎跟Png从内存占用上相比也不是非常有优势。(注意这里说的pvr是指pvr封装的argb8888,与pvrtc4的性能有天壤之别)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值