TA入门笔记(二十)

本文介绍了纹理压缩的重要性,详细讲解了包括DXT、ATI1/2、BC6/7、ETC、ASTC等常见纹理压缩格式的原理和特点,以及它们在不同平台的应用和压缩效果。通过对画质、压缩比的分析,为PC、安卓和iOS提供了纹理压缩的建议。
摘要由CSDN通过智能技术生成

参考
may佬《技术美术百人计划》
你所需要了解的几种纹理压缩格式原理
特定于平台的覆盖的纹理压缩格式

图形3.6 纹理压缩

纹理压缩

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

图片与纹理

图片格式:图片格式是图片文件的存储格式,通常在磁盘、内存中存储和传输文件时使用,如 jpg、png、gif、bmp等

纹理格式:纹理格式是显卡能直接进行采样的纹理数据格式,通常在向显卡中加载纹理时使用

纹理管线

在拿到一张贴图之后,如果设置了纹理压缩格式,CPU就会按照我们设定的格式进行压缩,传递给GPU进行读取;如果不设置纹理压缩格式,GPU无法读取,CPU依旧会进行一次到rgba32的压缩,增加CPU的时间和带宽,同时占用空间依旧很大,没有起到压缩效果
在这里插入图片描述

  • 图片压缩格式是基于整张图片进行压缩,像素之间的解码过程存在依赖关系,无法直接实现单个像素级别的解析,发挥不了显卡的并行能力;而且无论什么格式的图片在显卡中解码之后都是rgba纹理格式,无法减少显存占用率,同时还需要CPU解压之后才可以被GPU读取,增加了CPU时间和带宽
  • 纹理压缩格式是基于块压缩,能够更快读取像素所属字节块进行解压缩,以支持随机访问
    • 如果渲染物体时需要在某个坐标上采样纹理,GPU只需要读取该像素所属固定大小字节块并解压缩

常见纹理压缩格式

黄字为常用的几种压缩方式
在这里插入图片描述

非压缩格式

RGBA8888(RGBA32):一个像素32位,包含A通道,即一个像素消耗4字节

RGBA4444(RGBA16):一个像素16位,包含A通道,即一个像素消耗2字节

RGB888(RGB24):一个像素24位,无A通道,即一个像素消耗3字节

RGB565(RGB16):一个像素16位,无A通道,即一个像素消耗2字节

DXTC

DXTC纹理压缩格式来源于S3公司提出的S3TC算法,基本思想是把4×4的像素块压缩成一个64或128位的数据块,优点为创建了一个固定大小且独立的编码片段,没有共享查找表或其他依赖关系,简化了解码过程

DXT1

也叫BC1,将4×4的像素块压缩成64位的数据块,包含两个16位的RGB颜色作为像素块中的极端颜色值,通过线性插值计算出两个中间颜色;剩余的32位均分给16个像素,每个像素2位作为索引值来分配4个颜色(00,01,10,11)

  • 16位颜色为RGB565,信息放在绿通道精度会高一倍
    在这里插入图片描述

DXT1只适用于完全透明或完全不透明的贴图(即无透明度信息或只有一位透明度信息)

  • 对于没有Alpha信息的贴图,就按照上述方法进行压缩
  • 对于有Alpha信息的贴图,则只通过线性插值得到一个中间颜色,三个索引值用于选择颜色,第四个索引值用来判断是透明还是不透明(其实就是一个Alpha Clip)

计算压缩率:由于主要用于没有Alpha信息的贴图,所以参照对象为RGB24。DXT1一共64位数据供16个像素共用,平均每个像素占用4位,压缩比为6:1

R G B 24 D X T 1 = 24 64 16 = 4 = 6 1 \frac{RGB24}{DXT1}=\frac{24}{\frac{64}{16}=4}=\frac{6}{1} DXT1RGB24=1664=424=16

DXT2/3

DXT2/3与DXT1类似,表示颜色信息的64位数据块不变,另外附加了64位数据来表示每个像素的Alpha信息,整个数据块变为了128位;每个像素占用8位,0-3表示透明信息,4-7表示颜色信息

  • DXT2已经完成了颜色的混合,改变Alpha将会直接改变颜色值;DXT3的Alpha信息则相对独立

计算压缩率:DXT2/3的参考对象为RGBA32

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值