几种主流贴图压缩算法的实现原理

本文介绍了主流的贴图压缩算法,包括DXTC(BC1, BC3)、ETC(ETC1, ETC2)和PVRTC的实现原理和细节。DXTC基于调色板原理,ETC通过4x2或4x4 block进行压缩,PVRTC使用缩略图和调制因子,而ASTC则具有更高的灵活性和可变压缩率。这些算法在不同设备和场景下各有优势,适用于移动平台和资源优化。" 115145300,10807528,杭电OJ编程题解与心得,"['编程', '算法', '数学', '在线判题']
摘要由CSDN通过智能技术生成

前段时间一直在搞项目上线前的各种优化,关于贴图压缩这块也是需要针对不同的平台做不同的设置,这里备忘一下在各种平台中常使用的几种贴图压缩格式及其细节,以便更加适宜地选择在特定设备下的压缩格式以便节省资源。关于移动平台和硬件设备与压缩格式的对应关系可以参考下这里,基本上比较清楚了。

1. DXTC

DXTC(或BC)为微软为DX而推出的基于block的贴图压缩格式,其主要采用调色板的原理来进行压缩。

BC1:

基于4x4block来进行,不含有alpha通道,每个block内记录两个16bits的颜色做为基准颜色,然后解压时再使用两个基准色调制出另外两个颜色做为块内4个压缩颜色。其计算方式为:

basecolor2 = 2/3 *basecolor0 + 1/3 * basecolor1

basecolro3 = 1/3 *basecolor0 + 2/3 * basecolor1

对于每个块内的texel,存储2bits的索引,用来指向到4个基准颜色中的一个。所以对于BC1的压缩状态为64bits:

  • 32bits:两个RGB565格式的基准颜色;
  • 32bits:16个2bits的索引;

BC3:

在BC1的基础上支持alpha通道。首先,颜色的存储方式与BC1相同,需要64bits;对于alpha部分,使用与颜色部分相同的策略来处理。在block存储两个基准的alpha值,然后在其基础上插值得到其它6个共计8个alpha值,来做为alpha的调色板;然后对于每个texel存储一个3bits的索引,用来指向到这8个alpha中的一个。所以其对应的存储状态为:

  • 32bits:两个RGB565格式的基准颜色;
  • 32bits:16个2bits的颜色索引;
  • 48bits:16个3bits的alpha索引;
  • 16bits:2个8bits的基准alpha;

同时,两个alpha值中的不同的标记情况也对应着不同的插值操作:

若alpha0 > alpha1
alphai = (7 - i) / 7 *alpha0 + i/7 * alpha1;(2<=i<=7);
若alpha0 < alpha1
alphai = (5 - i) / 5 *alpha0 + i/5 * alpha1;(2<=i<=5);

alpha6 = 0;

alpha7=255;

2. ETC

ETC压缩算法采用将图像中的chromatic和luminance分开存储的方式,而在解码时使用luminance对chromatic进行调制进而重现原始图像信息。

ETC也主要有两种方法:ETC1和改进后的ETC2。

ETC1:

采用4x2的block进行分割(原始为4*2*24=192,压缩后为32,压缩率为6):

对于所有图片都使用一个全局的16个组table codeword,每组中有四个数值,且其中是有规律可循的,如下所示:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-8 -12 -31 -34 -50 -47

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值