纹理压缩

纹理压缩(Texture compression)是一种专为在三维计算机图形渲染系统中存储纹理而使用的图像压缩技术。与普通图像压缩算法的不同之处在于,纹理压缩算法为纹素随机存取做了优化。

设计初衷

在Beers,Agrawala和Chaddha于1996发表的一篇影响深远的论文基于已压缩纹理的渲染页面存档备份,存于互联网档案馆[1]中,他们列举四项纹理压缩的特点,使其不同于其他图像压缩技术。

  • 解压速度:由于最好能直接从已压缩的纹理直接渲染,为了尽可能地不影响性能,解压缩要尽可能快。
  • 随机访问:由于几乎不可能预测纹素被访问的顺序,任何纹理压缩算法必须允许对其中纹素的随机访问。所以几乎所有的纹理压缩算法都以块为单位压缩和存储纹素,当某一纹素被访问时,只有同一块中若干纹素被读取和解压缩。这项需求也排除了很多压缩率较高的图像压缩方式,例如JPEG行程长度编码
  • 压缩率和图像质量:由于人眼的不精确性,相比于其他应用领域,图像渲染更适宜使用有损数据压缩
  • 编码速度:纹理压缩对压缩速度要求不高,因为绝大多数情况下,纹理只需要进行一次压缩。

由于其数据访问模式是事先知道的,纹理压缩常作为整个绘图管线的一部分,在绘制时对动态地已压缩数据进行解压缩。而反过来绘制管线也可以通过纹理压缩技术来降低对于带宽和存储的需求。在纹理贴图中,已压缩纹理和没有经过压缩的纹理使用起来基本没有区别,都可以被用来存储颜色数据或其他数据,例如凹凸贴图法线贴图,也都可以和Mipmapping各向异性过滤等共同使用。

纹理压缩格式和硬件支持

常见的纹理压缩格式有S3纹理压缩PowerVR纹理压缩(PVRTC),爱立信纹理压缩(ETC)和由ARM开发的自适应可伸缩纹理压缩(Adaptive Scalable Texture Compression)。 绝大多数支持OpenGLOpenGL ES显卡,尤其是移动设备上的显卡,都支持一种或多种压缩格式(主要以扩展的形式)。

参见

参考文献

  1. ^ Andrew Beers; Maneesh Agrawala, Navin Chaddha, Rendering from Compressed Textures, Computer Graphics, Proc. SIGGRAPH, 1996: 373–378