干貨:Unity游戲開(kāi)發(fā)圖片紋理壓縮方案

Unity3D引擎對(duì)紋理的處理是智能的:不論你放入的是PNG词顾,PSD還是TGA硬霍,它們都會(huì)被自動(dòng)轉(zhuǎn)換成Unity自己的Texture2D格式贮匕。

在Texture2D的設(shè)置選項(xiàng)中,你可以針對(duì)不同的平臺(tái)刊头,設(shè)置不同的壓縮格式,如IOS設(shè)置成PVRTC4诸尽,Android平臺(tái)設(shè)置成RGBA16等原杂。

嗯,非常的智能您机。

但是穿肄,在一些進(jìn)階的使用中,一些情況是難以滿足的际看。

比如咸产,我們NGUI的圖集紋理,在Android平臺(tái)仲闽,使用ETC1紋理+Alpha通道圖的方式脑溢;iOS平臺(tái),使用PVRTC4的紋理赖欣。

個(gè)別圖片紋理屑彻,要求清晰度較高的,使用RGBA16顶吮,但是使用RGBA16的漸變顯示圖片卻慘不忍睹社牲;

一些要求高保真的,則需要直接使用最高質(zhì)量的RGBA32格式云矫。

很多時(shí)候,隨著項(xiàng)目的復(fù)雜需求發(fā)展汗菜,單純的Unity紋理管理已經(jīng)無(wú)法滿足我們的需求了让禀。這時(shí)候,往往需要我們做一些額外工作陨界。

總結(jié)一下我自己的紋理壓縮方案:

紋理壓縮的策略

手游開(kāi)發(fā)(Android/iOS)中巡揍,我會(huì)使用3個(gè)級(jí)別的壓縮程度:高清晰無(wú)壓縮、中清晰中壓縮菌瘪、低清晰高壓縮腮敌;4種壓縮方法:RGBA32, RGBA16+Dithering俏扩,ETC1+Alpha糜工,PVRTC4。一般足夠應(yīng)付大部分的需求了录淡。

高清晰無(wú)壓縮 - RGBA32

Unity RGBA32 - 高清晰無(wú)壓縮.png

RGBA32等同于原圖了捌木,優(yōu)點(diǎn)是清晰、與原圖一致嫉戚,缺點(diǎn)是內(nèi)存占用十分大刨裆;對(duì)于一些美術(shù)要求最好清晰度的圖片澈圈,是首選。

要注意一些png圖片帆啃,在硬盤(pán)中占用幾KB瞬女,怎么在Unity中顯示卻變大?因?yàn)閁nity顯示的是Texture大小努潘,是實(shí)際運(yùn)行時(shí)占用內(nèi)存的大小诽偷,而png卻是一種壓縮顯示格式;可以這樣理解慈俯,png類似于zip格式渤刃,是一個(gè)壓縮文件,只不過(guò)在運(yùn)行時(shí)會(huì)自動(dòng)解壓解析罷了贴膘。

中清晰中壓縮 - RGBA16 + Dithering

RGBA16 + Dithering

Unity RGBA16卖子,不抖動(dòng)處理的漸變圖片慘不忍睹

既然叫RGBA16,自然就是RGBA32的閹割版刑峡。
對(duì)于一些采用漸變的圖片洋闽,從RGBA32轉(zhuǎn)換成RGBA16,能明顯的看出顏色的層疊變化突梦,如上圖诫舅。

采用Floyd Steinberg抖動(dòng)處理后,除非放大宫患,否則肉眼基本看不出區(qū)別

RGBA16的優(yōu)點(diǎn)刊懈,內(nèi)存占用是RGBA32的1/2;搭配上Dithering抖動(dòng)娃闲,在原尺寸下看清晰度一模一樣虚汛;

缺點(diǎn),Unity原生不支持Dithering抖動(dòng)皇帮,需要自己做工具對(duì)圖片做處理卷哩;對(duì)于需要放大、拉伸的圖片属拾,Dithering抖動(dòng)的支持不好将谊,會(huì)有非常明顯的顆粒感。

如何進(jìn)行Dithering抖動(dòng)渐白?

Texture Packer工具中Image Format選擇RGBA4444尊浓,Dithering選擇FloydSteinberg

在我的項(xiàng)目中,TexturePacker具有非常重要的作用纯衍,像UI的圖集生成眠砾,預(yù)先生成好正方形的IOS PVRTC4圖集和非正方形的Android ETC1圖集、 縮放原圖50%等工作都由TexturePacker完成。

同樣褒颈,對(duì)圖像進(jìn)行抖動(dòng)處理柒巫,也是預(yù)先在TexturePacker使用FloydSteinberg算法進(jìn)行圖像抖動(dòng),再在Unity中導(dǎo)入使用谷丸。

TexturePacker提供命令行工具堡掏,可以做成自動(dòng)化的工具。具體方法這里不詳述刨疼。

RGB16

Unity RGB16

而RGB16泉唁,是主要針對(duì)一些,不帶透明通道揩慕,同時(shí)長(zhǎng)寬又不是2的次方的圖片亭畜;對(duì)于這些圖片,使用RGB16可以降低一半的內(nèi)存迎卤,但是效果會(huì)略遜于RGB32拴鸵。

當(dāng)然了,RGB16其實(shí)也是可以搭配抖動(dòng)蜗搔,也能提升顯示效果劲藐。

要注意的是,Dithering抖動(dòng)對(duì)拉伸放大是不友好的樟凄。

低清晰高壓縮 - ETC1+Alpha/PVRTC4

很多初學(xué)者都會(huì)疑惑聘芜,為什么游戲開(kāi)發(fā)中經(jīng)常看到一些圖片缝龄,需要設(shè)置成2的次方汰现?因?yàn)橄馝TC1、PVRTC4等這類在內(nèi)存中無(wú)需解壓叔壤、直接被GPU支持的格式瞎饲,占用內(nèi)存極低,而且性能效率也是最好的百新。

但是企软,相對(duì)RGBA32庐扫,還是能肉眼看出質(zhì)量有所下降的饭望。

ETC1

ETC1+Alpha一般應(yīng)用在Android版的UI圖集中,ETC1不帶透明通道形庭,所以需要外掛一張同樣是ETC1格式的Alpha通道圖铅辞。方法是,在原RGBA32的原圖中萨醒,提取RGB生成第一張ETC1斟珊,再提取A通道,填充另一張ETC1的R通道富纸;游戲運(yùn)行時(shí)囤踩,Shader將兩張ETC1圖片進(jìn)行混合旨椒。

生成Alpha通道圖的方法可參考:
http://blog.csdn.net/u010153703/article/details/45502895

后來(lái),由于不想基于Unity API生成透明圖堵漱,我生成Alpha通道圖的方法综慎。我使用Python的一個(gè)png.py庫(kù),用Python腳本來(lái)處理:

png.py生成alpha圖

要配合ETC1+Alpha勤庐,還需要Shader支持示惊,這里參考直接修改NGUI的Unlit/Transparent With Colored的Shader。


PVRTC4

PVRTC4在Unity中是直接支持的愉镰,不過(guò)要注意的細(xì)節(jié)是米罚,它必須是二次方正方形;也就是說(shuō)丈探,長(zhǎng)寬在二次方的同時(shí)录择,還必須要相等。

幾種紋理格式的對(duì)比

格式 內(nèi)存占用 質(zhì)量 透明 二次方大小 建議使用場(chǎng)合
RGBA32 1 ★★★★★ 無(wú)需 清晰度要求極高
RGBA16+Dithering 1/2 ★★★★ 無(wú)需 UI类嗤、頭像糊肠、卡牌、不會(huì)進(jìn)行拉伸放大
RGBA16 1/2 ★★★ 無(wú)需 UI遗锣、頭像货裹、卡牌,不帶漸變精偿,顏色不豐富弧圆,需要拉伸放大
RGB16+Dithering 1/2 ★★★★ 無(wú) 無(wú)需 UI、頭像笔咽、卡牌搔预、不透明、不會(huì)進(jìn)行拉伸放大
RGB16 1/2 ★★★ 無(wú) 無(wú)需 UI叶组、頭像拯田、卡牌、不透明甩十、不漸變船庇,不會(huì)進(jìn)行拉伸放大
RGB(ETC1) + Alpha(ETC1) 1/4 ★★★ 需要二次方,長(zhǎng)寬可不一樣 盡可能默認(rèn)使用侣监,在質(zhì)量不滿足時(shí)再考慮使用上邊的格式
RGB(ETC1) 1/8 ★★★ 無(wú) 需要二次方鸭轮,長(zhǎng)寬可不一樣 盡可能默認(rèn)使用,在質(zhì)量不滿足時(shí)再考慮使用上邊的格式
PVRTC4 1/8 ★★ 無(wú) 需要二次方正方形橄霉,長(zhǎng)寬一樣 盡可能默認(rèn)使用窃爷,在質(zhì)量不滿足時(shí)再考慮使用上邊的格式
  • 內(nèi)存占用,相對(duì)于RGBA32做比較
  • 質(zhì)量星級(jí),更多是本人感受按厘,僅供參考

一個(gè)商業(yè)項(xiàng)目医吊,混搭多種紋理格式是在所難免的事情。把項(xiàng)目紋理劃分成高逮京、中遮咖、低三種質(zhì)量需求,是這個(gè)方案的落腳點(diǎn)造虏。

在項(xiàng)目中御吞,盡可能是使用ETC1和PVRTV4等GPU直接支持的圖片格式,不僅內(nèi)存占用低漓藕、性能也更好陶珠;當(dāng)出現(xiàn)質(zhì)量不及格時(shí),再逐步的提升壓縮格式享钞,來(lái)滿足需要揍诽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市栗竖,隨后出現(xiàn)的幾起案子暑脆,更是在濱河造成了極大的恐慌,老刑警劉巖狐肢,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件添吗,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡份名,警方通過(guò)查閱死者的電腦和手機(jī)碟联,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)僵腺,“玉大人鲤孵,你說(shuō)我怎么就攤上這事〕饺纾” “怎么了普监?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)琉兜。 經(jīng)常有香客問(wèn)我凯正,道長(zhǎng),這世上最難降的妖魔是什么呕童? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任漆际,我火速辦了婚禮淆珊,結(jié)果婚禮上夺饲,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好往声,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布擂找。 她就那樣靜靜地躺著,像睡著了一般浩销。 火紅的嫁衣襯著肌膚如雪贯涎。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,727評(píng)論 1 305
  • 那天慢洋,我揣著相機(jī)與錄音塘雳,去河邊找鬼。 笑死普筹,一個(gè)胖子當(dāng)著我的面吹牛败明,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播太防,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼妻顶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蜒车?” 一聲冷哼從身側(cè)響起讳嘱,我...
    開(kāi)封第一講書(shū)人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酿愧,沒(méi)想到半個(gè)月后沥潭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嬉挡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年叛氨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棘伴。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寞埠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出焊夸,到底是詐尸還是另有隱情仁连,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布阱穗,位于F島的核電站饭冬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏揪阶。R本人自食惡果不足惜昌抠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鲁僚。 院中可真熱鬧炊苫,春花似錦裁厅、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至唠梨,卻和暖如春袋励,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背当叭。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工茬故, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蚁鳖。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓均牢,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親才睹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子徘跪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容