纹理格式与像素格式

常见的纹理格式

  • PNG-8:每个像素占用8个比特的存储空间,图片中用到的每种颜色都存储在一个长度为255的数组中,称之为调色盘,然后每个像素上存储对应颜色在调色盘的位置。因为颜色上限是255种,所以每个像素只需要8bits就可以表示对应的颜色信息。这种表示颜色的方式也被称之为索引色。

  • PNG-24:像素深度为24bits,其中RGB三个通道各占8bits。PNG-24因为没有Alpha通道(透明通道),所以不支持透明图片。

  • PNG-32:像素深度为32bits,其中RGBA四个通道各占8bits。所谓的RGBA四个通道,就是红、绿、蓝、透明,这四种色值各自的大小,都用8bits来表示(0~255)。

  • PVR:硬件支持的纹理格式,不需要CPU解码。可以被IOS手机的显卡直接读取的纹理格式,或者使用了PowerVR显卡的Android机器。

  • PVR GZip(.pvr.gz)
  • PVR zlip(.pvr.ccz)
  • JPG
  • BPM
  • TGA
  • TIFF
  • PKM:硬件支持的纹理格式,不需要CPU解码。可以被Android机器的显卡直接读取的纹理格式。
  • WebP
  • ATF
  • KTX
  • DDS:硬件支持的纹理格式,不需要CPU解码。可以被Windows机器的显卡直接读取的纹理格式。

常见的像素格式:

  • RGBA8888
  • RGBA4444
  • RGBA5551
  • RGBA5555
  • BGRA8888
  • RGB888
  • RGB565

  • PVRTCI 2bpp GRBA

  • PVRTCI 4bpp GRBA
  • PVRTCI 2bpp GRB
  • PVRTCI 4bpp GRB
  • PVRTCII 2bpp
  • PVRTCII 4bpp

  • ETC1 RGB

  • ETC1 A
  • ETC2 RGB(OpenGL3.0)
  • ETC2 RGBA(OpenGL3.0)

  • DXT1 / BC1

  • DXT5 / BC3

  • ALPHA

纹理格式所支持的像素格式:

PNG:RGBA8888、RGBA4444、RGBA5551、RGBA5555、BGRA8888、RGB888、RGB565
PVR(Ver.3):上面所有像素格式
PKM:ETC1 RGB、ETC1 A、ETC2 RGB、ETC2 RGBA

总结:

  • Android上使用ETC1、IOS上使用PVR、PC上使用DXT,可以降低外部存储、内存、显存使用。

业界常用压缩方案一:

  • 安卓:业界一般选择ETC1,因为它是OpenGL ES图形标准的一部分,并且被所有使用opengl2.0的Android设备所支持。但由于ETC1不带a通道,因此,带a通道的图需要将原贴图拆分通道,一分为二分别压缩,最后在渲染时合并计算。

  • IOS:业界一般使用pvrtc RGBA 4bits格式

业界常用压缩方案二:

  • 安卓:ETC2,尺寸要求(能被4整除)舍弃部分低端设备市场

  • IOS:PVRTC、ASTC(舍弃部分老ios设备)

ASTC4\5\6三种压缩格式,目前来看,肉眼可见的差别都不明显,可以ASCT5起步,对于比较常见的UI,采用的是ASTC5的压缩格式,不太重要的UI,是ASTC6