- RGBA PVRTC 4 bits - iOS推薦的壓縮格式,但是4bits對於圖像品質的破壞太大
- ARGB 32 bit - 雖能保有圖片品質,但所消耗的容量實在太龐大
- ARGB 16 bit - 雖能降低貼圖容量,但是顏色有明顯的帶狀瑕疵(color banding)
Android平台由於各家GPU所支援的壓縮格式各有不同,因此ARGB 16 bit也就是降低texture容量最適合的選項,但16 bit所造成的帶狀瑕疵十分明顯,若真的要使用也不太可能,正好前一陣子看到Unity IN上有Cytus開發者之一的syyang所發表的文章
使用 RGBA4444 搭配 Dithering 減少記憶體用量 by syyang @ UNITYIN
這篇文章正好解決了這個問題,利用Dithering在16bit color depth獲得較佳的圖像呈現,消除帶狀瑕疵。進行Dither處理之後,圖片的顏色資訊會被重新處理,檢視圖片可發現變的有顆粒狀感(抖色),當圖片在眼中的呈現越小時,就會發現看起來跟truecolor的圖片品質頗接近。由於是對顏色資訊做了重新的演算,所以並不受到Unity的轉檔所影響,只要在Import Settings中設定Format為16 bit的壓縮,即可省下容量又能保有還能接受的圖片品質。
此外需要注意的是經過dither處理的texture若又被Unity重新壓縮到不同尺寸的圖片時,會加重顆粒感使圖片品質降低(因為顏色訊息被重新處理過了),因此輸出給Unity的texture asset必須要輸出成遊戲主要使用的texture size。此外,若處理過的貼圖是用於3D模型的話,經過UV的拉扯也會使圖片失真更加明顯。目前Unity本身並不支援dithering,在網上也還沒看到有人做出支援dither處理的script/plug-in,因此得要自行預先處理這些textures。
經過UV拉扯、尺寸放大後失真變的相當明顯 |
在以Gimp進行dithering處理時,須先將貼圖縮成最終使用的尺寸,在縮小圖片時三種內插法看起來效果幾乎相同,然後再執行Dither to ARGB,此時會多出一個圖檔視窗就是dithering後的圖檔,進行匯出之後即可。匯出PNG的設定所有選項皆可取消,但當texture需要再alpha邊緣作細緻的過度時,透明像素的色彩是必須要被儲存的。Compression Level 0跟9在色系較單純的圖片上是幾乎沒有差別。
Gimp在安裝script之後可進行dithering處理 |
Gimp匯出PNG時的設定 |
參考資料
- https://en.wikipedia.org/wiki/Color_depth
- http://en.wikipedia.org/wiki/Dither
- http://game.ceeger.com/Manual/ReducingFilesize.html
延伸閱讀
作者已經移除這則留言。
回覆刪除請問有哪一套批次處理,可以同時調整模式?目前很苦惱,只能一張張慢慢轉檔,還是Photoshop可以安裝ARGB4444嗎? 謝謝您!!!!
回覆刪除批次處理這部分我沒有嘗試過,恐怕只能靠Gimp2的script批次處理(Script-fu或Python-fu),或者是另外用C之類的語言寫工具轉。
刪除若是想要簡單點的方法,也許按鍵精靈之類的軟體也可以完成批次處理XD