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的紋理;部分要求清晰度較高的,使用RGBA16,但是使用RGBA16的漸變顯示圖片卻慘不忍睹;一些要求高保真的,則需要直接使用RGBA32格式。有些時(shí)候,單純的Unity紋理管理已經(jīng)無法滿足我們的需求了,需要做一下額外工作。
總結(jié)一下我自己的紋理壓縮方案:
Unity RGBA32 - 高清晰無壓縮.pngRGBA32等同于原圖了,優(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)解壓解析罷了。
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ì)有非常明顯的顆粒感。
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)化的工具。具體方法這里不詳述。
Unity RGB16而RGB16,是主要針對(duì)一些,不帶透明通道,同時(shí)長(zhǎng)寬又不是2的次方的圖片;對(duì)于這些圖片,使用RGB16可以降低一半的內(nèi)存,但是效果會(huì)略遜于RGB32。
當(dāng)然了,RGB16其實(shí)也是可以搭配抖動(dòng),也能提升顯示效果;但同樣的Dithering抖動(dòng)對(duì)拉伸放大是不友好的。
生成Alpha通道圖的方法可參考:http://blog.csdn.net/u010153703/article/details/45502895
要配合ETC1+Alpha,還需要Shader支持,這里提供參考直接修改NGUI的Unlit/Transparent With Colored的Shader。
Paste_Image.png| 格式 | 內(nèi)存占用 | 質(zhì)量 | 透明 | 二次方大小 | 建議使用場(chǎng)合 |
|---|---|---|---|---|---|
| RGBA32 | 1 | ★★★★★ | 有 | 無需 | 清晰度要求極高 |
| RGBA16+Dithering | 1/2 | ★★★★ | 有 | 無需 | UI、頭像、卡牌、不會(huì)進(jìn)行拉伸放大 |
| RGBA16 | 1/2 | ★★★ | 有 | 無需 | UI、頭像、卡牌,不帶漸變,顏色不豐富,需要拉伸放大 |
| RGB16+Dithering | 1/2 | ★★★★ | 無 | 無需 | UI、頭像、卡牌、不透明、不會(huì)進(jìn)行拉伸放大 |
| RGB16 | 1/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í)再考慮使用上邊的格式 |
| PVRTC4 | 1/8 | ★★ | 無 | 需要二次方正方形,長(zhǎng)寬一樣 | 盡可能默認(rèn)使用,在質(zhì)量不滿足時(shí)再考慮使用上邊的格式 |
在項(xiàng)目中,盡可能是使用ETC1和PVRTV4等GPU直接支持的圖片格式,不僅內(nèi)存占用低、性能也更好;當(dāng)出現(xiàn)質(zhì)量不及格時(shí),再逐步的提升壓縮格式,來滿足需要。
因此,實(shí)際項(xiàng)目中要混搭各種紋理格式。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注