png 图片压缩
参考资料
图片压缩知识梳理
how-png-works
PNG图片压缩原理解析
压缩纹理格式
文件大小压缩
png
jpg
webp
压缩显存大小
Pvr
ios 平台支持, 需要纹理的大小为 2 的整数幂
ETC
将 4x4 的像素编码为两个 2x4 或 4x2 的块。
每个 4x4 的像素块 64 位, 分为两个子块。
每个子块包含一个 基本色值 和一个 3 位的修饰表索引。
两个基本色值的格式为 两个RGB444 或一个 RGB555 和一个 RGB333。
修饰表索引用于从一个修饰表中取到 3个偏移值。 用这个3个值对基本颜色进行偏移可以得到3个新的颜色。 加上基色,一共4中颜色。子块中所有像素的颜色根据一个 2位的索引,从这个 4个颜色中取值。
所利用的总字节数 = 24(2个基色值) + 1x2(子块水平还是垂直分布) + 3x2(2个修饰表索引) + 16x2(16 个颜色索引) = 64 字节。
- RGB ETC-1 4bit 压缩比 6:1 如上
- RGB ETC-2 4bit 压缩比 6:1, 需要在OpenGL ES 3.0和OpenGL 4.3以上版
- RGBA ETC-2 8bit 压缩比 8:1, 需要在OpenGL ES 3.0和OpenGL 4.3以上版
DXTC
与 ETC 不一样的是, DXTC 使用一对低精度的基色来描述一个 4x4 的像素块。并允许每个像素指定一种方式来从这个两个基色插值得到最终颜色。
每个像素块,占用 64 或 128 bit.
BC1
16(color0) + 16(color2) + 16 2(selector)
selector 占用 2 位,表示4种插值方式, color0, color1, (2color0 + color1)/3, (color0 + 2*color1)/3。
BC2
BC2 编码方式与 BC1 一致,不过对于每个像素,额外使用 4bit 来表示透明度。因为只有 4位,所以最多只能表示 16种透明度,所以实际使用的较少。
BC3
BC3 也使用 64bit 来保存透明度,不过与 BC2 直接保存透明度不同,BC3 对透明度进行压缩,思路与颜色压缩方式类似。
16(color0) + 16(color2) + 16 2(selector) + 8(alpha0) + 8(alpha1) + 16 3(alpha selector)
因为对透明度进行了压缩, 所以能表示更大范围的透明度,实际应用也比较广泛。
其他
BC4和BC5在D3D10中可用,只能存储一个/两个颜色通道。
BC6H和BC7在D3D11中可用。BC6H是一个不带a值的HDR格式,它将4x4共16个像素存储为128位数据,其中包括两个48位的RGB值(16:16:16),每个颜色分量都是带符号浮点值(1 个符号位 + 5 个指数位 + 10 个尾数位),以及16个2位索引表。
BC7相比其它有点特殊,虽然它也是将4x4共16个像素存储为128位数据,但它的最低有效位为mode位,(最低有效位即最低的非0位)根据不同模式,颜色值的存储格式不同,是否有a值或a值的存储格式也不尽相同,是一种比较灵活的存储格式,但这也意味着解码所带来更多的消耗。
ASTC
ASTC纹理压缩格式详解
ASTC格式的块为固定大小的128位,块中像素大小可变, 最少为 4x4, 最多为 12x12。2D纹理编码中,他从4x4到12x12像素都有,对应的压缩比从3:1到27:1
压缩原理, 类似 DXTC-BC7