干貨:Unity游戲開發(fā)圖片紋理壓縮方案-創(chuàng)新互聯(lián)

原文:http://www.jianshu.com/p/f7c3741f22af

灞橋網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,灞橋網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為灞橋上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的灞橋做網(wǎng)站的公司定做!

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)無法滿足我們的需求了。這時(shí)候,往往需要我們做一些額外工作。

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

紋理壓縮的策略

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

高清晰無壓縮 - RGBA32

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

Unity RGBA32 - 高清晰無壓縮.png

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

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

中清晰中壓縮 - RGBA16 + Dithering

RGBA16 + Dithering

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

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

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

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

采用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)?

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

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游戲開發(fā)圖片紋理壓縮方案

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ì)疑惑,為什么游戲開發(fā)中經(jīng)??吹揭恍﹫D片,需要設(shè)置成2的次方?因?yàn)橄馝TC1、PVRTC4等這類在內(nèi)存中無需解壓、直接被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

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

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

png.py生成alpha圖

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

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

PVRTC4

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

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

格式內(nèi)存占用質(zhì)量透明二次方大小建議使用場(chǎng)合
RGBA321★★★★★無需清晰度要求極高
RGBA16+Dithering1/2★★★★無需UI、頭像、卡牌、不會(huì)進(jìn)行拉伸放大
RGBA161/2★★★無需UI、頭像、卡牌,不帶漸變,顏色不豐富,需要拉伸放大
RGB16+Dithering1/2★★★★無需UI、頭像、卡牌、不透明、不會(huì)進(jìn)行拉伸放大
RGB161/2★★★無需UI、頭像、卡牌、不透明、不漸變,不會(huì)進(jìn)行拉伸放大
RGB(ETC1) + Alpha(ETC1)1/4★★★需要二次方,長(zhǎng)寬可不一樣盡可能默認(rèn)使用,在質(zhì)量不滿足時(shí)再考慮使用上邊的格式
RGB(ETC1)1/8★★★需要二次方,長(zhǎng)寬可不一樣盡可能默認(rèn)使用,在質(zhì)量不滿足時(shí)再考慮使用上邊的格式
PVRTC41/8★★需要二次方正方形,長(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í),再逐步的提升壓縮格式,來滿足需要。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

分享名稱:干貨:Unity游戲開發(fā)圖片紋理壓縮方案-創(chuàng)新互聯(lián)
文章來源:http://muchs.cn/article18/dscpgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)移動(dòng)網(wǎng)站建設(shè)、ChatGPT、網(wǎng)站內(nèi)鏈品牌網(wǎng)站設(shè)計(jì)、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司