纹理压缩(二) ETC格式

ETC:

每个子块中只存储一个基色,剩下的由亮度变换得到。
在这里插入图片描述

先存一个基色和一个luma index值,通过luma index从亮度表中查出亮度四个亮度修改值,然后加到基色上得到四个基色,再按照后面的索引表中的索引进行填充即可。
在这里插入图片描述

ETC1:

两个ETC拼在一起,做一个4x4的像素块,分两中模式,individual模式中两个基色color0、color1都是444格式的,differential模式中,color0用555格式,color1用3bit的差值存储,R1=R0+dR0得到。剩下两个标志位:diff指定是哪种模式,flip指定4x4块是水平还是垂直分割。
在这里插入图片描述

ETC2:

ETC1差值模式中如果颜色有溢出,用ETC2可以节省编码。
溢出按照RGB三种模式分:
R通道溢出按照59T模式
G通道溢出按照58H模式
B通道溢出按照57P模式
如果都不溢出的话就按照ETC1解压,所以ETC2是兼容ETC1的。
这三种模式是有优先级的,优先级是按照上面的顺序,不能同时有两个通道溢出。
59T模式:
ETC1 diff模式下溢出情况的编码:
在这里插入图片描述

基本是减除来得负数或者加的结果超出5位,这种情况用后面的四位进行编码,这个编码刚好就是R0的后两位和dR1的后两位,解码的时候判断是否溢出就看R0的两个高位是否相等,相等就是溢出,G和B用4bit按照ETC1的格式存储。
这里不需要ETC1中的T0和T1,不再需要查表,通过后面的distance值计算出另外两个基色,假设存储的两个基色分别是A和B,另外两个基色
C0 =(A -(d,d,d))
C1 =(A +(d,d,d))
在RG坐标系中就是一个T形
在这里插入图片描述

这里的distance是一个3bit的index值,按照下表查找
![在这里插入图片描述](https://img-blog.csdnimg.cn/fda24d3df60a46dfb438256410047484.png

58H模式:
58H的溢出编码和59T一样, 不同的地方在另外两个基色的计算方法,C0、C1用A计算,C2、C3用B计算,如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/67c7e00deeb6452ca7c57bdbf8e8e962.png

这里distance中只存了低两位,高位用A、B大小计算判断,A大于B时高位不去,否则补0.
57P:
和上面两种完全不同,直接存RGB676的三个基色:C0、CH和CV,然后按照下面公式,线性差值计算出其他颜色:
在这里插入图片描述

X、Y的范围是0~3,组合计算出来16个颜色。
在这里插入图片描述

ETC的编码格式如下
在这里插入图片描述

ETC1和ETC2中没有alpha值,puchtrough alpha版本中和BC1a一样,用1bit表示alpha值,只能表示全透明和全不透明,ETC2中的diff位来指定是否有alpha,如果是1,没有,如果是0,编码表中的10表示全透明。
ETC 的sRGB编码和ETC算法没有区别,只是其中颜色格式转换一下,sRGB的范围是0.0~1.0,sRGB是经过gamma矫正的,转换公式如下:
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值