整理自:
PC平台
- 高效压缩格式纹理dds.
iOS平台
- 高效压缩格式纹理: pvr, 必须是正方形且边长为2的幂次方,使用PvrTexTool生成.
- PvrTexTool支持命令行调用,调用方法和参数请参考纹理工具命令行调用范例
- 苹果设备限制标准官方文档
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打包,其读取速度与本地文件读取速度相当,这样就可以获得最佳的读取效率)