带你读《2022技术人的百宝黑皮书》——内存优化: 纹理压缩技术(1)https://developer.aliyun.com/article/1340980?groupCode=taobaotech
主流纹理压缩格式、原理及兼容性情况
纹理压缩格式
格式 |
WebGL扩展名 |
简介 |
ETC1 |
WEBGL_compressed_- texture_etc1 |
ETC(Ericsson Texture Compression)是Khronos 开放标准,专利来自于瑞典爱立信公司,它在移动平台中广泛采用,是一种为感知质量设计的有损算法,它基于人眼对亮度而不是色度更敏感这一事实,在每个block定义四种不同的亮度偏移,即四种不同的颜色可用,可以认为这些颜色就是一个局部调色板,ETC会把4x4的像素块压缩成一个64或128位的数据块。 ETC有两种压缩格式:ETC1和ETC2。纹理长宽必须是2的幂次方; ETC1基本所有Android机型都支持,但是缺陷是不支持Alpha通道; ETC2是ETC1的扩展,向下兼容ETC1。支持Alpha,但是需要开启OpenGL ES 3.x。 |
ETC1 |
WEBGL_compressed_- texture_etc1 |
|
ASTC |
WEBGL_compressed_- texture_astc |
ASTC(Adaptive Scalable Texture Compression)是目前最强大的纹理压缩格式,由ARM & AMD研发。ASTC同样是基于block的压缩方式,但块的大小却较支持多种尺寸,比如从基本的4x4到12x12;每个块内的内容用128bits来进行存储,因而不同的块就对应着不同的压缩率;相比ETC, ASTC不要求长宽是2的幂次方。
|
PVRTC |
WEBGL_compressed_- texture_pvrtc |
PVRTC(PowerVR Texture Compression),专为 PowerVR 图形核心系列设计,IOS平台都支持,它使用2张双线性放大的低分辨率图,根据精度和每个像素的权重,融合到一起来呈现纹理;PVRTC 2-bpp把一个8×4的像素单元组压成一个64位的数据块,压缩效果比较差;PVRTC 4-bpp把一个4×4的像素单元组压成一个64位的数据块;PVRTC压缩要求图片的大小必需是正方形而且边长必需是2的幂次方。 |
S3TC |
WEBGL_compressed_- texture_s3tc |
S3TC(S3 Texture Compression)基本思想是把4x4的像素块压缩成一个64或128位的数据块,有损压缩。S3TC算法有五种变化DXT1-DXT5,一 般在桌面设备上面使用,详见wiki。 |
压缩纹理素材生产
如上所示,设计师产出png/jpeg等素材后,可以通过工具生成.ktx格式的压缩纹理素材,随后就可以在项目中直接使用了。不同格式的压缩纹理生产工具也不一样(PVETextTool、Adreno Texture Tool、...),而为了在各个平台中都能使用,通常需要生成不同格式的压缩纹理,社区有一些工具做了二次封装,可以生成多种格式的压缩纹理, 如texture-compressor等。
带你读《2022技术人的百宝黑皮书》——内存优化: 纹理压缩技术(3)https://developer.aliyun.com/article/1340978?groupCode=taobaotech