貼圖在移動和桌面應用中普遍存在每瞒,他們?yōu)閺V泛的應用程序添加了一定的真實感云稚。其中圖像質(zhì)量和加載時間等因素對智能手機涵妥,平板電腦用戶至關重要。通常我們通過提高貼圖分辨率來提高質(zhì)量乖寒,通過壓縮貼圖來提高性能蒙秒。
在Unity中我們 PVRTC 和 ASTC兩種壓縮格式,由于在IOS 9以后才會支持ASTC宵统,所以這里只討論PVRTC格式晕讲。
下面來看一個貼圖壓縮前后的對比圖。
可以發(fā)現(xiàn)右邊貼圖質(zhì)量非常低马澈,正常來說我們很難接受這樣的貼圖瓢省,再來看看 RGB 格式的貼圖壓縮情況。
對比來看 RGB貼圖的壓縮質(zhì)量有顯著的提高痊班,已經(jīng)在我們可以接受的范圍內(nèi)了贩汉。
RGBA Compressed PVRTC 4 bits 和 RGB Compressed PVRTC 4 bits擁有相同的壓縮比率,但RGBA的質(zhì)量損失更加嚴重季春。通常來說這種壓縮格式在3D模型上的表現(xiàn)是可以接受的徙菠,但在2D UI上則表現(xiàn)不佳。
觀察到RGB格式的壓縮質(zhì)量遠遠高于RGBA凝果,可以通過把RGBA貼圖分離成 RGB貼圖和Alpha貼圖來提高貼圖質(zhì)量祝迂。同步修改下Shader改成采樣兩張貼圖,以2張4bits貼圖 換1張32bits貼圖節(jié)省了3/4的內(nèi)存與加載時間器净。
貼圖RGB和Alpha分離解決了大部分貼圖質(zhì)量問題型雳,但是這時候還會碰到一個色階塊的問題。一張Alpha漸變貼圖的在壓縮后表現(xiàn)成塊狀山害。通過上圖我們可以知道PVRTC 是按 4x4的方式壓縮貼圖纠俭,這里使數(shù)據(jù)更加離散化,變成我們能觀察到的色塊了浪慌。
由于Alpha貼圖只占用一個通道冤荆,而我們只有RGB壓縮格式。所以可以通過把數(shù)據(jù)分散在另外兩個通道來改善色階塊的問題权纤。具體實現(xiàn)可以通過修改自己貼圖分離的代碼和Shader同步實現(xiàn)钓简。比如 AlphaTexture.rgb = (sourceTexture.a, 0, sourceTexture.a / 2 + sourceTexture.a % 2)可以顯著改善色階塊的出現(xiàn)。
還有一個用內(nèi)存換質(zhì)量的方法妖碉,直接使用Alpha 8 bits格式涌庭。這個格式比 RGB PVRTC 4 bits大一倍,不過這樣貼圖質(zhì)量肯定不會有任何損失欧宜。