紋理壓縮

紋理壓縮Texture compression)是一種專為在3D電腦圖形彩現系統中儲存紋理而使用的圖像壓縮技術。與普通圖像壓縮演算法的不同之處在於,紋理壓縮演算法為紋素隨機存取做了最佳化。

設計初衷

在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