图片纹理压缩

一、纹理压缩的必要性

  1、无需CPU解压即可被GPU读取,节省CPU时间和带宽

  2、节省大量内存消耗

  3、部分压缩格式可以节省图片体积

  在不同移动GPU平台下选择GPU支持的压缩纹理,就可以在不需要CPU解压的情况下直接被GPU采样,节省CPU内存和带宽,也可以节省存储空间,如果目标平台不支持设置的压缩格式,纹理将解压为RGBA32或者RGB24,增加CPU消耗

二、图像文件格式和纹理格式的区别

  1、常见的图像文件格式png、bmp、tga、jpg、gif

  2、常见的非压缩纹理格式RGBA8888、RGBA4444、RGB888、RGB565

  3、文件格式不能被GPU识别,文件格式被读取后还需要经过CPU解压成纹理格式才能被GPU使用

三、压缩格式的作用

  不同于png、jpg这种硬盘压缩方式,DXT,ETC等纹理压缩方式可以在游戏运行中无需CPU解压就被GPU直接采样,可以极大的减少内存和带宽的占用,提升运行效率,对移动游戏而言更是如此。

四、简单的纹理非压缩格式

  RGBA8888(RGBA32)一像素32位,即一像素内存消耗4字节

  RGBA4444(RGBA16)一像素16位,即一像素内存消耗2字节

  RGB888(RGB24)一像素24位,即一像素内存消耗3字节,无透明通道

  RGB565(RGB16)一像素16位,即一像素内存消耗2字节,无透明通道

  RGBA8888 一像素4字节,1024*1024需要占用1024*1024*4 = 4194304Byte = 4M;512*512需要占用512*512*4 = 1048576Byte =1M

  RGB565一像素2字节,1024*1024需要占用2M;512*512需要占用0.5M

五、压缩格式

  DXT 分为DXT1-DXT5五个级别,DXT3和DXT5支持包含4位alpha通道的RGB纹理,有损压缩

  ATC 支持带有Alpha的RGB纹理压缩

  PVRTC2/4 IOS平台都支持,使用PowerVR GPU的Android设备也支持,多采用PVRTC4位压缩模式; 尺寸要求为2的N次幂,要正方形

  ETC1 RGB4bit OpenGL ES2.0版本支持,移动GPU均支持,遗憾的是不支持alpha通道;对于透明纹理,在Android设备上,可以把RGB和Alpha拆到2张ETC1纹理上,游戏中再合成使用。 尺寸要求为2的N次幂,宽高可不同

  ETC2 ARGB/RGB4bit OpenGL ES 3.0以上才支持,补全了ETC1不支持Alpha通道,支持更高质量的压缩,但从Android官方数据来看,还有相当大的设备是采用Opengl ES2.0; 尺寸要求为4的倍数

  ETC 一种为感知质量设计的有损算法,其依据是人眼对亮度改变的反应要高于色度改变,类似于DXT,ETC也是把4x4的像素块压缩成一个64或128位的数据块,也是有损压缩

  ASTC 是IOS系统下的PVRTC的代替方案,压缩比增加到0.25,并且不需要设置图片为方形。注意: 从IOS9(A8架构)Apple 手机开始支持ASTC压缩格式 ,如果 考虑放弃Apple 6代之前的手机兼容问题了,可以直接使用了。如果GPU不支持这种压缩格式,则解压为               RGB或者RGBA。会增加cpu解压时间,并占用较多内存。

  

 

posted @ 2021-12-06 15:31  Silent_X  阅读(879)  评论(0)    收藏  举报