unity 纹理压缩格式‘_游戏制作行业为什么使用TGA格式的贴图而不使用PNG格式?...
PNG32也帶有alpha通道,并且支持無損壓縮,壓縮率更高,存儲體積更小,為什么游戲行業更多的是使用TGA格式存儲貼圖。
大家的回答槽點太多了,我是來辟謠的:
TLDR:只使用 TGA 不用其它格式的,只有一個原因,懶。
具體解釋下大家找的各種理由:
理由1:PNG 的 alpha channel 會被優化掉,所以用不了?
這個根本不是什么問題,大量的游戲用 PNG 存儲紋理,有的游戲不用 PNG 存儲通用紋理,也會用 PNG 存儲 UI,因為 DXT/PVR 之類的紋理硬壓縮格式都是有損的,再棱角分明的 UI 元素上,效果很差,所以即便游戲大量使用 DXT/PVR,任然會再 UI 部分使用 PNG 格式保存紋理。
而 256 色 PNG + Alpha channel 這種格式占用的空間是非常低的,對于一些圖形簡單的游戲,用的比較多。
理由2:PNG 需要解碼,TGA 不需要解碼,所以速度快?
錯了,你們自己實際去測試一下,1000張 PNG/JPG 和 1000 張同樣的 BMP/TGA 圖片的載入速度,前者比后者快幾倍,為啥?你 TGA/BMP 是節省了解碼速度了,但是加載時候的 I/O 操作卻因為尺寸更大浪費了更多時間,現代 CPU 解碼 PNG/JPG 基本都是小兒科,JPG 比 PNG 復雜,但是都有 JPG 硬件加速解碼。所以你 TGA 比 PNG 快是不成立的,特別是圖像大一點,或者首次加載(沒有緩存時),你解碼節省的時間 1 ,而 I/O 多浪費的時間是 10。
當然也有解碼相當費時的格式 FLIF,它解碼浪費了 100,而 I/O 節省了 10,這也是阻礙 FLIF 發展的一個重要原因。
理由3:游戲資源都要打包,打包文件都有壓縮,即便用 TGA,也會被壓縮的很小。
這條看著好像有道理,但是他們沒搞懂,PNG 除了壓縮外,還有有多個方向的預測,然后換成差分編碼后再使用標準壓縮技術壓縮,有點類似一個弱智點的視頻編碼器的幀內壓縮方法,雖然比較弱智,但是很多時候使用 PNG 壓縮會比 TGA + zip/rar/lzma2 壓縮要強。
隨便測試了一張普通 UI 圖片(某 Windows 窗口截圖):
PNG:74.8KB (TinyPNG 優化)
TGA:1.04MB
TGA+RAR:198KB
TGA+lzma2:170KB
TGA 搭配 LZMA2 進行壓縮了,也還有 170KB,占用是裸存 PNG 的 2.3 倍。
理由4:因為要使用硬件壓縮格式 dxt/pvr 所以不用 PNG?
這條還是說得過去的,畢竟 dxt/pvr 使用更少的顯存,除了 UI 外,大部分游戲紋理基本都可以使用硬壓縮格式。這些硬壓縮格式還能保存 mipmap,又更方便了一些。
但是這其實還是有很多改進的空間,dxt/pvr 在磁盤上的占用雖然比 BMP/TGA 小不少,但是比起 PNG/JPG 還是大很多,所以更好的做法其實是在磁盤上存儲 JPG/PNG,然后載入的時候實時動態轉存 dxt/pvr,mipmap 的話,可以分開存儲+動態生成,比如你需要 8 張 mipmap,美術畫好最近的 0 號和 4 號,其他全部 bicubic 插值重生成就得了。
加載階段動態壓縮 dxt/pvr 的工具有很多,比如 pc 上的 dxt1-5 的 libsquish,unity 里面也有好幾個插件專門動態生成 etc/pvr 格式的紋理。
默認的 dxt/pvr/etc 壓縮工具非常慢,因為他們都是高精度計算,而 libsquish 之類的實時壓縮,在不視覺上基本看不出區別的情況下,采用低精度的近似運算。
因此最好的做法其實是使用傳統圖片格式保存紋理,這樣游戲安裝包/更新包就能小很多,用戶下載都會快很多,載入時動態轉成 dxt/pvr/etc 格式,還可以弄個緩存,下載時下載的傳統壓縮格式,然后下載完了一次性轉換成本地的 dxt/pvr/etc 格式,這樣后面運行也不會需要額外運行一遍 libsquish 之類的庫來壓縮一次。
最終解決方案是啥?
簡單的話,界面使用 PNG(盡量用 8位帶 alpha),非界面使用 dxt/pvr/etc。
復雜點的話,界面紋理使用 webp 或者更好的 bpg,普通紋理使用 dxt/pvr/etc。
極限的話,全部使用 bpg(有損+無損),需要 dxt/pvr/etc 的地方動態生成(可以加緩存)
至于 FLIF,壓縮率確實非常不錯,比無損 BPG,無損 webp/png 高很多,可惜解碼速度實在慢的無法接受了,有待觀察吧。
聲明:發布此文是出于傳遞更多知識以供交流學習之目的。若有來源標注錯誤或侵犯了您的合法權益,請作者持權屬證明與我們聯系,我們將及時更正、刪除,謝謝。
作者:韋易笑
來源:www.zhihu.com/question/340196227/answer/789538293
More:【微信公眾號】?u3dnotes
總結
以上是生活随笔為你收集整理的unity 纹理压缩格式‘_游戏制作行业为什么使用TGA格式的贴图而不使用PNG格式?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3ds Max 子物体的编辑
- 下一篇: 稳定性、鲁棒性、与非脆弱性的区别