常见的纹理格式
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