【转】手机图片主流纹理压缩标准

本秂侑毒 提交于 2021-02-17 02:58:16

主流纹理压缩标准:ETC、PVRTC、S3TC

首先说OpenGL ES标准中的,2.0版规范中将ETC(Ericsson Texture Compression)作为基本的纹理压缩标准,这是大部分移动GPU都会支持的纹理标准。OpenGL ES 3.0中还引入了ETC2、EAC纹理压缩格式,二者基本一致,只不过EAC主要用于1-2通道数据的情况。目前ECT2还在改进中,除了高通的Adreno 320之外还没有移动GPU支持,Tgera 4也不行。

此外,OpenGL ES 3.0中还有一种可选纹理压缩格式——ASTC(Adaptive Scalable Texture Compression,自适应扩展纹理压缩),这是ARM提出的,去年被Khronos组织认可,纳入到标准中来,不过并不是强制性的,目前也只有Mali-T600系列支持。

Imagination旗下的PowerVR GPU支持的是PVRTC(PowerVR texture compression)和ETC,高通的Adreno 2xx系列支持ETC之外还有3Dc和ATITC。后两者都是原来的ATI开发的,Adreno 320除了前面三种标准之外还支持ETC2纹理压缩。

ARM的Mali-300/400系列支持ETC,Mali-T600还多了ASTC纹理支持。

NVIDIA的Tegra系列更有趣。之前的说法称Tegra支持自己的纹理格式,实际上除了通用的ETC之外,Tegra支持的纹理叫做S3TC(S3 Texture Compression),也被称为DXTn或者DXTC。S3TC是S3公司在1999年引入的,后来被DX 6.0和OpenGL 1.3吸收为官方标准,DXTC相当于Windows版的名字,S3TC是OpenGL中的名字。

说到S3TC,之前苹果和HTC大打专利战的时候就涉及到了这个标准。S3已经归为VIA威盛旗下,HTC和威盛又有同一个老板——王雪红。为了支援HTC打专利战,威盛去年就把S3部门出售给了HTC,算是左手倒右手吧。

S3TC是DX显卡都支持的标准,NVIDIA也在Tegra中支持了这个标准,S3TC根据不同算法又分为DXT1-DXT5这五个级别,Terga支持的实际上是DXT1、DXT3和DXT5。

Vivante的GC系列也支持ETC和S3TC,跟NVIDIA的Tegra路线相同。以前都说Vivante支持的是NVIDIA Tegra的纹理数据,实际上二者是选择了共同的路线而已,DXT也不是NVIDIA的专利。

目前来说我们能常用到的纹理压缩主要是ETC、PVRTC、S3TC、ATITC这四种种。

主流纹理压缩格式优缺点

江湖门派镇山之宝 五大移动GPU厂商论剑
常见的TC格式压缩比

先来看压缩比。如果无失真的PNG容量是5.4MB,那么S3TC和ETC都能压缩到1.1MB,PVRTC压缩最高,可压缩到528KB,不过PVRTC的问题在于它只支持PowerVR系列GPU,有排他性,高通的Adreno支持的ATITC同样有排他性,其他厂商并不支持。

江湖门派镇山之宝 五大移动GPU厂商论剑

ETC是最通用的纹理压缩格式,不过ETC并不招厂商待见,因为ETC纹理压缩不支持Alpha通道,只能用于压缩不透明的材质,不过ETC也有自己的优点,几乎所有的安卓设备都可以支持ETC压缩的GPU加速。

S3TC无论压缩速度还是压缩比都不错,也支持GPU加速,而且是桌面显卡通用的压缩格式,看起来是最完美的选择,可惜的是移动市场跟PC不一样,大家各自为王,NVIDIA现在还没强大到让其他GPU厂商低头采用S3TC标准的程度,因为S3TC说到底还是一种私有的标准,有专利上的麻烦。

ETC2压缩标准补全了ETC1不支持Alpha通道的缺陷,支持更高质量的RGBA(RGB+Alpha)压缩,而ARM提出的ASTC标准在压缩速度和质量上比S3TC要好,但是这两种压缩格式都是新出的,支持的厂商实在太少了。

苹果手机使用的就是PVRTC

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!