2012-10-12 171 views
2

我試圖用原始PNG壓縮DXT壓縮將我的紋理轉換/壓縮爲DDS格式。我在Mac上,所以我使用Graphic Converter(儘管我也嘗試了其他工具)。但無論我使用哪種DXT級別(DXT1-5),文件大小大致保持原始PNG的大小。DXT壓縮產生與原始PNG相同的文件大小

+0

您可以使用gzip爲DXT獲得良好的壓縮比 – mems

回答

6

PNG是一種無損壓縮格式,基於帶有一些專用濾波器的zlib。 它將保證重現與原始圖像完全相同的圖像。

因此,PNG壓縮比是變量。 在複雜的圖像上,壓縮效果很差。 在全黑圖像上,壓縮效果非常好。

相比之下,DXT壓縮的固定壓縮比爲。 DXT1的比例爲8:1,DXT5的比例爲4:1(假設爲32位RGBA輸入)。 DXT5的優勢是更好的alpha通道(用於透明度)。如果你不需要它,不要使用它,這只是浪費帶寬。

正如您所能猜到的那樣,的DXT質量將是可變的。 DXT質量僅被認爲是「足夠好」,但並不完美。在圖像的複雜部分,會有一些可見的人造/失真。在簡單的部分,複製品將幾乎精確到原始。

PNG的工作方式是將整個圖像壓縮成作爲單字節流。 DXT壓縮的工作方式是將剪切成4×4像素的小塊,並將它們獨立壓縮爲固定壓縮比。

這使得基本上不同的屬性:DXT紋理應該由GPU硬件直接解碼。這非常快,幾乎免費。這得益於紋理被切割成小塊的事實:不需要解碼整個紋理來推動單個像素=>只需解碼適當的4x4塊。這個屬性是解碼過程的關鍵。

相比之下,PNG解碼整個圖像,因此有更多的空間通過查找4×4鄰域以外的相關性來提高壓縮。但是,這種權衡是不可能僅僅檢索一小塊像素:這就是整個圖像或沒有任何東西。如你所見,選擇其中一種或其他壓縮方法並不是壓縮比的問題。出於存儲目的,選擇PNG,不是因爲它是無損。爲了實時快速顯示大量紋理(3D遊戲的典型場景),DXT是唯一的選擇。

+0

感謝青青,我明白。 DXT有助於運行時內存,其中PNG只有益於文件大小。儘管壓縮WebGL紋理和傳輸時間需要考慮,但這可能會更加棘手。 – Someone

1

DDS/DXT紋理不保證小於PNG。這取決於紋理的內容和大小。一個純色PNG或大多像純色卡通的PNG會壓縮非常小,因爲照片一般不會很好壓縮。 DXT是4比1還是6比1壓縮週期取決於它是DXT1還是DXT3或DXT5