貼圖打包格式優(yōu)化(上)

前言
今天要給大家分享的內(nèi)容是游戲開(kāi)發(fā)正式開(kāi)發(fā)完成后,在準(zhǔn)備打包時(shí)的打包貼圖格式選擇問(wèn)題
如果商業(yè)游戲項(xiàng)目在打包時(shí)沒(méi)有選擇好打包格式,那么對(duì)于游戲包體的大小、加載運(yùn)行速度是會(huì)有比較大的影響的
所以商業(yè)游戲開(kāi)發(fā)中必須要考慮到的貼圖打包優(yōu)化問(wèn)題,本文要帶給大家的就是貼圖打包優(yōu)化的方方面面
版權(quán)聲明
本文為“優(yōu)夢(mèng)創(chuàng)客”原創(chuàng)文章,您可以自由轉(zhuǎn)載,但必須加入完整的版權(quán)聲明
更多學(xué)習(xí)資源請(qǐng)加QQ:1517069595或WX:alice17173獲?。ㄆ髽I(yè)級(jí)性能優(yōu)化/熱更新/Shader特效/服務(wù)器/商業(yè)項(xiàng)目實(shí)戰(zhàn)/每周直播/一對(duì)一指導(dǎo))
點(diǎn)贊、關(guān)注、分享可免費(fèi)獲得配套學(xué)習(xí)資源
主題

模型貼圖包括哪些?
UI貼圖包括哪些?
貼圖打包/加載流程
各種貼圖格式的應(yīng)用場(chǎng)景
相關(guān)面試問(wèn)題
貼圖格式如何優(yōu)化
關(guān)于貼圖格式更深層次的思考
什么是模型貼圖?

上圖中最下面的圖片是場(chǎng)景中的一個(gè)銹跡斑斑的小球,它在次世代游戲中是如何被表現(xiàn)出來(lái)的呢?
除了需要一個(gè)小球模型以外,還需要五張貼圖才能夠?qū)崿F(xiàn)完整的小球材質(zhì)表現(xiàn)
這五張貼圖分別是
1,ALBEDO貼圖
ALBEDO可以翻譯為漫反射貼圖,它是小球表面的基本顏色,但它跟普通的漫反射貼圖又有一些區(qū)別,ALBEDO貼圖是不包含局部陰影信息的,只包含純顏色信息
2,AO貼圖
AO貼圖翻譯成中文叫做環(huán)境遮蔽貼圖,用于存放陰影信息
基本的顏色貼圖是由RGB三種顏色構(gòu)成的,不能進(jìn)行優(yōu)化,而AO貼圖是由黑白灰三種顏色構(gòu)成的,這種貼圖在進(jìn)行打包時(shí)就能進(jìn)行優(yōu)化
3,NORMAL貼圖(法線(xiàn)貼圖)
4,METALLC貼圖(金屬度貼圖)
5,ROUGHNESS貼圖(粗糙度貼圖)
UI貼圖

右邊的這些圖片是從劍網(wǎng)三端游里截取到的背包面板貼圖,可以看出下面背包面板實(shí)際上就是由上面哪些貼圖構(gòu)成的
左邊的游戲場(chǎng)景里也是無(wú)不充斥著UI界面,所以貼圖優(yōu)化的第二個(gè)目標(biāo)就是優(yōu)化UI界面的貼圖
貼圖打包流程

Unity引擎層面里的PNG圖片打包流程
由于PNG圖片在Unity引擎里是不能被直接使用的,所以PNG圖片在Unity引擎載入時(shí)會(huì)被轉(zhuǎn)換成2D紋理的通用格式
2D紋理格式在安卓平臺(tái)打包時(shí)會(huì)被打包成ETC2格式,中間會(huì)經(jīng)過(guò)兩個(gè)過(guò)程
1,圖像格式轉(zhuǎn)換
2,圖像壓縮過(guò)程
ECT2格式里可能不存在壓縮過(guò)程,但其他圖形格式存在壓縮過(guò)程,這個(gè)壓縮好不好呢?
壓縮是需要消耗壓縮時(shí)間的,但從性能角度上說(shuō),壓縮過(guò)的圖片肯定比沒(méi)有壓縮過(guò)的圖片要好,這取決于不同的圖片格式
在打包時(shí)不可能把一張張圖片散放在磁盤(pán)上面,所以會(huì)把這些圖片打包到一個(gè)AB包里,以便于將來(lái)做遠(yuǎn)程熱更新
游戲里會(huì)有很多AB包,比如模型的AB包、貼圖的AB包、文本劇情的AB包等等,這些AB包最終會(huì)打包形成一個(gè)APK文件,APK文件在安卓上就是一個(gè)安裝文件,用戶(hù)從游戲市場(chǎng)去下載的都是這種APK包
貼圖加載流程

用戶(hù)從游戲市場(chǎng)上下載了APK包,安裝并啟動(dòng)游戲后,Unity引擎會(huì)加載所需圖片所在的AB包,并對(duì)AB包進(jìn)行解包,以得到在前面步驟中打包的ETC2格式圖片,然后將這張圖片進(jìn)一步解壓到內(nèi)存里來(lái),它會(huì)形成一個(gè)二維數(shù)組,這個(gè)數(shù)組里的每一個(gè)元素就是這張圖片的RGB顏色值
由于圖片是通過(guò)顯卡顯示的,所以?xún)?nèi)存里的圖片不能直接用于渲染,需要把它加載到顯存里面,最終再通過(guò)顯存和GPU來(lái)將顯存里的圖片渲染到幀緩存里
幀緩存是存儲(chǔ)將來(lái)要顯示的屏幕畫(huà)面的地方,它是顯卡里的最后一個(gè)部件
注意點(diǎn):
ETC2格式圖片在安卓平臺(tái)里并不會(huì)先加載到內(nèi)存,然后從內(nèi)存加載到顯存里去,因?yàn)檫@樣需要消耗很多時(shí)間
安卓平臺(tái)能夠?qū)TC2格式圖片直接送到顯卡里,不需要做任何解壓,這一點(diǎn)安卓平臺(tái)的顯卡大多都能支持
貼圖壓縮的時(shí)機(jī)

貼圖壓縮的四個(gè)時(shí)機(jī)對(duì)應(yīng)了游戲項(xiàng)目研發(fā)的四個(gè)階段
1,預(yù)研階段
預(yù)研階段里要確定項(xiàng)目的預(yù)算、確定項(xiàng)目的玩法、確定項(xiàng)目的性能指標(biāo)
如果游戲的玩法達(dá)不到能夠流暢游玩的性能指標(biāo),或者性能指標(biāo)能達(dá)到但是項(xiàng)目預(yù)算會(huì)很高,那這個(gè)項(xiàng)目在預(yù)研階段就會(huì)被PASS掉
2,原型階段
在預(yù)研階段確定了項(xiàng)目可以開(kāi)發(fā)后,就要準(zhǔn)備開(kāi)發(fā)原型了,但是在一開(kāi)始不會(huì)直接招很多人來(lái)做大規(guī)模開(kāi)發(fā),原型開(kāi)發(fā)階段主要是測(cè)試游戲玩法好不好玩,是否具有開(kāi)發(fā)下去的價(jià)值
在這個(gè)階段里還會(huì)完成具體架構(gòu)的實(shí)現(xiàn)、開(kāi)發(fā)項(xiàng)目所需要的工具,這是程序部分,還有美術(shù)和策劃部分也會(huì)在此階段提前做好準(zhǔn)備
3,大規(guī)模開(kāi)發(fā)階段
大規(guī)模的開(kāi)發(fā)階段里需要完成各個(gè)功能系統(tǒng)的實(shí)現(xiàn)
4,測(cè)試階段
貼圖打包的格式究竟是放在哪個(gè)時(shí)間點(diǎn)考慮呢?
業(yè)余開(kāi)發(fā)可以晚點(diǎn)考慮,甚至是不考慮,因?yàn)闃I(yè)余開(kāi)發(fā)主要是愛(ài)好
但如果是一個(gè)商業(yè)項(xiàng)目,還是建議盡早考慮,肯定不能在測(cè)試階段再去考慮,因?yàn)闇y(cè)試階段再考慮這件事情太晚了,返工的工作量非常大
具體的貼圖壓縮時(shí)間點(diǎn)本文不給出答案,讀者可以自己考慮放在什么階段最合適,也可以在文末掃愛(ài)麗絲老師的二維碼與老師交流
為什么要做貼圖壓縮

為什么商業(yè)項(xiàng)目一定要考慮貼圖壓縮問(wèn)題?
從GPU的角度來(lái)說(shuō),貼圖經(jīng)過(guò)壓縮以后所占用的渲染帶寬會(huì)更低
比如上面說(shuō)的ETC2格式如果不是用在安卓平臺(tái),而是Windows平臺(tái),那么由于Windows平臺(tái)不支持ECT2格式的硬件解壓,那么它就需要先解壓到內(nèi)存,這個(gè)解壓過(guò)程是消耗內(nèi)存的,并且由于它是從ETC2的壓縮格式轉(zhuǎn)換到非壓縮格式,中間會(huì)產(chǎn)生很多解壓帶來(lái)的開(kāi)銷(xiāo)
由于壓縮包里的資源解壓出來(lái)時(shí)會(huì)比壓縮包里的資源要大,所以它在加載到到顯存時(shí)所占用的內(nèi)存也會(huì)更大,如果貼圖不壓縮或者選擇了一種當(dāng)前平臺(tái)不支持的貼圖壓縮格式,那么它的渲染帶寬占用就會(huì)很高
這就是貼圖壓縮的理由,貼圖送到顯卡以后,從顯卡到渲染這個(gè)步驟中,它中間的每一次渲染都需要傳輸圖片的每一個(gè)像素點(diǎn),這都是有開(kāi)銷(xiāo)的,這個(gè)開(kāi)銷(xiāo)就是通過(guò)壓縮圖片格式來(lái)解決的

貼圖壓縮以后,游戲包體就會(huì)更小,包體小帶來(lái)的好處就是下載速度會(huì)更快、內(nèi)存占用會(huì)更低
而且圖片格式是支持顯卡加速的,它甚至可以不經(jīng)過(guò)內(nèi)存,直接將數(shù)據(jù)存到顯存里去
寫(xiě)在最后
更多學(xué)習(xí)資源請(qǐng)加QQ:1517069595或WX:alice17173獲?。ㄆ髽I(yè)級(jí)性能優(yōu)化/熱更新/Shader特效/服務(wù)器/商業(yè)項(xiàng)目實(shí)戰(zhàn)/每周直播/一對(duì)一指導(dǎo))
點(diǎn)贊、關(guān)注、分享可免費(fèi)獲得配套學(xué)習(xí)資源