etc是纹理压缩算法,pkm是纹理打包格式。pkm里面放的是往往是etc压缩的纹理。

ETC1:

1. 头文件:

    (1) ETC1的文件头大小为16:

    (2) 将ETC1纹理存成pkm文件时,加上这个文件头,便于读取时获知大小、格式上传压缩纹理时把这个头去掉

    (3) 文件头内容为:特征符——编码宽——编码高——实际宽——实际高

    (4) 尽管ETC1是固定的压缩比,但考虑到像素不对齐的情况,实际宽和实际高还是有必要存储

2. 编码构成:

    (1) Jpeg压缩标准是把图像划分为一系列8X8的像素块,然后每个像素块压缩成变长编码的ETC1则是4X4的像素块压缩成固           定的64位编码(8字节),由于固定,才有利于GPU内部实现并行解压缩。因此,不考虑像素非4对齐的情况,它的压缩比           是固定的48/8=6至于常用的把ARGB分别存储为两张ETC1纹理的做法,压缩比是64/16=4
                                                                          (1024*1024)/16 * 8 = 524288

3. 编码过程:

    (1) 将图像划分为一系列 4X4 的子块。

    (2) 对每个子块,尝试所有的编码可能性,取解码后和原block像素差值和最小的一种编码。

    (3) 是否flip,这个决定subblock如何划分。

    (4) 每个subblock用哪一行差值表。

     (5) 每个像素取哪一列的差值

           注:决定好flip之后,颜色均值和是否能用diff方式已经确定,这个不用遍历

     (6) 合并所有子块编码。

 

             不难看出,编码过程需要遍历所有可能性,其复杂度远大于解码,每一个 RGB 像素变成了一个精度较低的RGB均值和一个2位差值号,因此产生压缩。这种预测式表述自然本身就存在偏差,压缩损失亦来自于此。

ETC1和ETC2差别:

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐