2012-04-02 121 views
1

當記住性能時,我們(不願意)使用紋理壓縮。通過壓縮引入的人爲因素可能或多或少是可以接受的。有什麼不同的可能性,可以應用在原始圖像層次上的工作周,以最小化由壓縮算法引入的人爲因素。在我目前的情況下,使用漸變時會看到大部分的人工製品。dxt4紋理壓縮

+0

哪些工件?你在使用什麼壓縮機?你使用什麼壓縮格式來處理你的數據?你在說什麼圖片?您的問題太模糊,無法在此表格中回答。 – 2012-04-02 09:40:59

+0

這是你的反饋意見。以下是一些細節:我試過nvcompress和nvdxt,dxt {1..5},我試圖添加鏈接到一些壓縮的圖像來顯示所有的工件。 – ohmy 2012-04-02 09:52:26

回答

4

如果您願意,DXT壓縮全是關於插值或漸變的。但是,你必須很好地理解它究竟做了什麼。 DXT壓縮是一種折衷方案,它在相當不好的壓縮下提供相當差的質量,但它提供了一些壓縮,並且在硬件中實現幾乎是微不足道的,並且以幾乎爲零的成本運行。這就是它被使用的原因。

有幾種方法可以提高質量,但如果質量問題不可接受,唯一的解決方案是不使用DXT。 (此外,DXT4你在你的問題的標題都還不是​​很廣泛的應用,這是DXT5預乘)

首先,請注意:

  • DXT通過編碼紋理像素的4×4塊的顏色存儲兩個5:6:5顏色並在RGB空間中沿着這條線插入。插值量化爲2位,所以每個像素只能選擇4個值。
  • DXT4/5中的alpha通道存儲兩個8位alpha值並使用3位內插器。
    • DXT2/3使用明確的每位素材4位alpha通道(即不在一些選定的8位值之間進行插值)。
    • DXT1可以佯攻一個1位的alpha通道,但這是一個排序/編碼技巧,和一個不同的故事。
  • 如果不轉換到另一個色彩空間(由於端點存儲爲5:6:5),無法在DXT中獲得純灰色。

這意味着,DXT可以在原則(或多或少)完美重現沒有過於苛刻的變化很多水平,垂直或對角線1D梯度,但它是完全無法重現大多數其他模式(儘管它通常可以再現一些東西)。例如,如果您有2D漸變或旋轉漸變,則沒有辦法(除非是巧合!)存在一對兩種顏色,這將允許整個4x4塊很好地內插。另外,由於插值僅量化爲4種選擇,絕大多數「奇數旋轉」不能被編碼,也不能組合多種顏色。但是,對於大多數「天然」紋理來說,這是可以接受的。

DXT壓縮機通常會嘗試在4x4單元格內尋找最佳配合(儘管有些壓縮機會/可能會做其他操作)。即使單元格內的梯度表示良好,這也會導致梯度漸變。

什麼可以做DXT是:

  • 使用不同的壓縮機,並選擇最好的結果。至少有3種不同的壓縮機採用不同的(非蠻力)策略,給出了不同的結果。
  • 試試crunch庫。在某處也有一個Windows GUI壓縮器。雖然緊縮主要是爲了生成較小的(zip壓縮後)文件,並且它最終受到DXT塊格式技術限制的約束,但它使用了一種不尋常的搜索技術,它考慮了更大的範圍。它可能發生,它設法給你的梯度更好看一個或另一個。
  • 避免梯度爲2D或與u/v或對角線不對齊的梯度,因爲您知道無法編碼這些梯度。
  • 在壓縮之前將自然圖像轉換爲非RGB色彩空間。 YCoCg和YCbCr可能是候選者,或JPEG-LS變換。人眼在各方面都不是同樣敏感。有些錯誤不太明顯。使用不同的色彩空間利用了這一點。
  • 如果您不需要alpha,則使用alpha通道作爲最重要的通道,因爲您知道它具有8位端點分辨率(而不是5/6)和3位內插器而不是2位。否則,使用綠色作爲最重要的通道,因爲它還有一個位。
  • 對於手繪紋理,您可以嘗試使用5:6:5匹配的顏色,這至少會爲這些顏色提供完美的點擊。儘管對於「繪製」紋理(看起來像漫畫),DXT通常是非常不明智的選擇。
  • 對於質量沒有削減的情況,不要使用DXT(是的,這聽起來像一個愚蠢的建議,但它確實是...如果它不適合,不要使用它)。