技术美术知识学习3600:纹理压缩

学习教程来自:【技术美术百人计划】图形 3.6 纹理压缩——包体瘦身术

笔记总结

什么是纹理压缩

纹理压缩是为了解决内存、带宽问题,专门在计算机图形渲染系统中存储纹理而使用的图像压缩技术

为什么要纹理压缩

图片

图片文件的存储格式,在磁盘、内存中存储和传输。缺点: 1. 压缩时基于整张图片,像素之间存在依赖关系,无法随机解析(并发性不好) 2. 只能解析出RGBA格式,无法减少显存和带宽的占用 3. 需要先由CPU进行解压再交给GPU读取
例如:JPG、PNG等

纹理

显卡能够直接进行采样的纹理数据格式,加载时使用。纹理压缩格式基于块压缩,读取时获得像素所在字节块进行解压缩,支持随机访问
例如:DXTC、ETC、ASTC等

常见纹理压缩格式

非压缩格式

格式说明
RGBA8888(RGBA32)32bit(4Byte)/Pixel
RGBA4444(RGBA16)16bit(2Byte)/Pixel
RGBA888(RGB24)24bit(3Byte)/Pixel
RGBA565(RGB16)16bit(2Byte)/Pixel

DXTC(DX)

4 X 4 像素 -> 64bit/128bit 数据块

DXT1(BC1) 64bit

适用于不透明信息RGB、只包含透明信息A的贴图

保留极端颜色AD(RGB565)color_0、color_1,插值得到2者中间的2个颜色BC,共计4个颜色值ABCD。下边的索引对应了16个像素取值的序号(00 01 10 11 共计4个颜色)

当RGBA的贴图使用此压缩方法时,压缩后的ABCD四个颜色对应3个正常颜色和1个透明色(取到时表示完全透明,类似于Alpha Clip)
DXT2/DXT3(BC2) 128bit

相比于DXT1增加了64位表示每个像素的Alpha信息(直接表示,不插值)


后者DXT3分别计算RGB和A再混合,前者先混合RGBA,若A改变也不再重新混合而是直接改变整体颜色
DXT4/DXT5(BC3) 128bit

相比于DXT2的Alpha值直接存储,改为2个8bit极端值+16个3bit索引值

DXTnm

基于DXT5,Unity的法线压缩方法:压缩后R(归为1)G(不变)B(归为1)A(原R通道值)

上:压缩前
下:压缩后

ATI1(BC4) 64bit

数据块存储单通道(如高度图、光滑度贴图),同DXT5中Alpha通道的处理方式

ATI2(BC5) 128bit

数据块存储2个通道(可用于法线贴图的压缩),1个BC5块相当于2个BC4块。
缺点:需要更多的内存和带宽

BC6/7 128bit

仅在D3D11级图形硬件中支持
BC6:RGB半精度浮点数据压缩(唯一原生存储HDR的BC格式),针对HDR,压缩比6:1
BC7:8位RGB或RGBA数据(一般用于高质量RGBA压缩),针对LDR,压缩比3:1

ETC(OpenGL)

爱立信研发,几乎所有安卓设备支持
4 X 4 像素 -> 64bit 数据块

图片来自开头学习视频(最下边的亮度索引4位存疑)

ETC1 64bit

压缩了RGB24的颜色

区域说明大小
亮度索引偏移取值亮度表的索引号3bit * 2
像素索引亮度表中取值的索引号2bit * 2
基础颜色444或333+5558bit
flip2个子块的横竖1bit
diff2个基础颜色的类别1bit
共64bit
ETC2

在ETC1的基础上增加了Alpha通道的支持,要求尺寸为4的整倍数

ASTC 128bit

可以根据不同的图片类型进行不同的压缩,支持LDR、HDR
缺点:兼容性不完善、解码时间长

PVRTC

由Imagination公司为PowerVR显卡设计,不是基于块的算法,将图像分为了低频信号和高频信号

PVRTC 4-bpp(4 bit per pixel) 64bit
区域说明大小
A尺寸为原来1/4的低分辨率图像,14bit(554/4433),1bit标志(左边通道数量)15bit
B同A,15bit(555/4443),1bit标志16bit
调制数据2bit * 16 = 32bit32bit
调制标志确定调制数据的混合方式1bit
共64bit

混合AB2张图得到最终颜色(不透明标志以A的标志为准)

总结

内容来自开头ppt

画质

RGBA > ASTC 4 x 4 > ASTC 6 x 6 > ETC2 ≈ ETC1

压缩比
名称压缩比名称压缩比
DXT16:1DXT2/34:1
DXT4/54:1ATI14:1
ATI24:1BC66:1
BC73:1PVRTC6:1
ASTC4:1 ~ 35.95:1

实际应用中的选择

可参考英伟达和Unity文档,以下内容总结自开头ppt内容

平台低质量无A低质量A高质量
PCDXT1DXT5BC7
AndroidETC1ETC2ASTC
IOSPVRTC2PVRTC2ASTC

另:一些限制要求

版本要求
ETC2OpenGL ES 3.0/OpenGL 4.3以上版本
ASTCIphone6以上版本
PVRTC2Iphone6以下版本

课后作业

结合课程,针对ASTC与ETC2这2个格式进行打包测试,分析内存占用对比。

打包测试

测试场景

以下为针对地板Albedo(一张8K分辨率256MB大小的RGB贴图)进行打包测试

无压缩 RGB24

无压缩:256MB

ASTC 4x4

ASTC 4x4:85.3MB

分析:压缩设置的格式额外带了A通道,所以RGB所占空间为85.3/4*3=63.9MB
压缩比例为:63.9/256 ≈ 1/4

ASTC 12x12

ASTC 12x12:9.5MB

分析:同上
压缩比例为:(9.5/4*3)/256 ≈ 1/36

ETC2 4bits

ETC2 4bits:42.7MB

压缩比例:42.7/256 ≈ 1/6

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值