虚拟贴图无论对内存带宽还是显存带宽,都造成了巨大的压力,因此我们需要使用压缩格式的文件。从工程的角度来说我们需要了解各种压缩算法的压缩比,压缩效果,以及编码译码的速度,从而选择最佳方案。为了能够更好的使用压缩格式,我这里简单的了解了三种压缩格式,分别是代表贴图压缩的jpg格式,代表纹理压缩的dxt格式,以及代表通用压缩的zip格式。在讨论这三个压缩格式之前,我们先了一下常见的底层压缩算法。
RLE压缩算法
比如下面的文本信息“[data][data][data]",假定上述文本使用的是ASCII码,那么上面的字符串占用了12个字节的内存(不考虑[])。我们第一个想法就是将重复的信息用一种编码表示,比如[5][data]。其中一个字节代表块重复的次数,另一个字节代表重复的内容。这种压缩算法就是RLE压缩算法。
LZ77算法

如上图红黑两条竖线代表一个窗口,这个窗口不停的向前移动,算法的目的就是找到后面的字符与窗口中重复的字符串,然后按照(偏移起始地址,偏移量)的方式存储信息。
哈夫曼编码
上面的LZ77算法我们用(偏移起始地址,偏移量)存储文件信息。假如偏移地址有1,2,3,4。我们如何编码去存储这些数字呢?如果用定长编码去存储,肯定会浪费空间,我们希望使用变长编码,变长编码需要满足两个条件:
1.出现频率最高的数字,使用的编码越少
2.每一个编码都是前缀无歧义编码,也就说任意一个编码不能是其他编码的前缀
哈夫曼树刚好满足这两个条件,因此根据编码出现的频率生成一棵哈夫曼树,然后对其进行编码就形成了哈夫曼编码。比如A,B,C,D,E,F出现的次数分别是2,3,7,9,18,25,最后生成的哈夫曼树如下图:

最低0.47元/天 解锁文章
329

被折叠的 条评论
为什么被折叠?



