Carved Marker

貼圖壓縮簡介 [Part 2]

在這一篇文章中,我們會介紹一種簡單的貼圖壓縮方式:VQTC。

VQTC 是由 NEC/Videologic 的 PowerVR 系列所使用的一種貼圖壓縮方式,但是因為 PowerVR 系列一直沒有得到很大的成功,所以 VQTC 一直未受到重視。而現在 Videologic 最新的 Kyro 顯示晶片也不再支援 VQTC。不過,因為 VQTC 相當簡單,所以還是簡單做個介紹。

VQTC 是使用 vector quantization 的方式,所以叫 VQTC。它的原理是:把貼圖切成許多相同大小的區塊(例如 2x2 或 4x4),對這些區塊做 vector quantization。例如,可以從這些區塊中,找出 4096 個最具代表性的區塊。這樣一來,每個區塊就只需要存放 index,也就是 12 bits 的空間。

顯示晶片在讀取貼圖資料時,要先將整個向量(即 4096 個區塊)讀入顯示晶片中的一個向量表。這個動作對每個貼圖只需要做一次。在讀取各個 texel 時,則是先判斷出所需的 texel 所在的區塊(以 2x2 的區塊來說,就是把位置座標分別除以二),讀取 index,再從向量表中查出區塊的內容。基本上,這些動作都非常簡單。

在壓縮比方面,以上面的例子來說,如果使用 256x256 32bpp 的貼圖,並使用 2x2 的區塊,那麼貼圖就有 128x128 = 16384 個區塊。找出 4096 個最具代表性的區塊後,整個貼圖需要的空間就是 4096 個區塊再加上 16384 個 index 的空間,即 4096x16 + 16384x1.5 = 88 KB。和原來未壓縮所需要的 256KB 相比,它的壓縮比約為 1:2.9。

如果是更大的貼圖,則可以使用更大的區塊(例如 4x4),不過,這樣會使品質變差。但是,經由選擇不同的區塊大小,和區塊的數目,就可以調整出品質和壓縮比的平衡點。這是 VQTC 的優點之一。

不過,VQTC 並非沒有缺點的。事實上,VQTC 最大的缺點,就是「不能做部分更新」。簡單的說,如果想要更新一個 VQTC 貼圖中的一小部分,幾乎可以說是不可能的,除非將貼圖重新壓縮,或是犧牲一些品質,使用原有的向量來壓縮。當然,對大部分的情形來說,這並不是個嚴重的問題;因為需要做部分更新的情形,通常是相當少見的。

另外,VQTC 也不太適合處理有「透明度」(即 alpha channel)的貼圖。一般來說,如果貼圖中有 alpha channel,會對 VQTC 的品質造成影響。

VQTC 現在已經不常用了(也許只在 Dreamcast 遊戲機中還被使用)。目前最流行的貼圖壓縮,則是由 S3 所開發的 S3TC。我們會在下一篇文章中介紹這個方法。

[Part 1] [Part 2] [Part 3] [Part 4]

8/1/2000, Ping-Che Chen


Sorry, Traditional Chinese only. This page is encoded in UTF-8.

Copyright© 2000 Ping-Che Chen