紋理壓縮

? ? ? ?前言: 目前在做紋理壓縮粮彤,對(duì)項(xiàng)目調(diào)研的資料進(jìn)行整理


? ? ? ?目前的渲染管線中谬俄,對(duì)于3D物體表面的細(xì)節(jié)汤功,主要還是靠紋理貼圖來(lái)表現(xiàn)物邑,分辨率越高,精度越高的紋理滔金,在細(xì)節(jié)表現(xiàn)上自然越強(qiáng)色解,但是同時(shí)會(huì)導(dǎo)致內(nèi)存開銷增大,以及帶寬等問題餐茵。因此科阎,我們必須對(duì)紋理進(jìn)行壓縮。

傳統(tǒng)壓縮圖片格式

主要介紹兩種重要的格式:jpg和png

壓縮方式 質(zhì)量 元素 顏色 透明度
JPEG 有損 點(diǎn)陣圖 直接色 不支持
PNG-8/24 無(wú)損 點(diǎn)陣圖 索引色/直接色 支持

Android和iOS平臺(tái)都支持jpg和png的圖片格式

為什么不用JPEG

? ? ? ?既然如此忿族,那么游戲中為什么不直接使用這兩種圖片格式呢?
? ? ? ?原因很簡(jiǎn)單:jpeg锣笨、png這些壓縮格式是為CPU解碼設(shè)計(jì)的蝌矛,不適合GPU的并行特性。

GPU解碼圖像的要求

? ? ? ?GPU在解碼圖像的時(shí)候错英,必須滿足以下三個(gè)要求:

隨機(jī)訪問 Random Access

即對(duì)于任意一個(gè)像素都能隨機(jī)地快速算出它在圖像數(shù)據(jù)中的地址(偏移值)入撒。

? ? ? ?對(duì)于JPEG來(lái)說(shuō)顯然是做不到的,它采用VLC(variable bit length coding)不定長(zhǎng)編碼方式椭岩,為不同區(qū)域分配不同的壓縮位數(shù)茅逮,從而達(dá)到為不同區(qū)域分配不同壓縮質(zhì)量。說(shuō)的通俗點(diǎn)判哥,就是:顏色變化少頻率低的部分献雅,編碼后占的內(nèi)存字節(jié)數(shù)就少。

JPEG壓縮示意圖

? ? ? ?同理塌计,PNG的壓縮算法也是根據(jù)圖片整體進(jìn)行壓縮(比如霍夫曼編碼)挺身,像素和像素之間存在依賴關(guān)系,無(wú)法直接實(shí)現(xiàn)單個(gè)像素級(jí)別的解析锌仅。
? ? ? ?所以瞒渠,除非你把整張圖片都解壓完畢,否則我們無(wú)法準(zhǔn)確的計(jì)算出原圖一個(gè)坐標(biāo)處的顏色對(duì)應(yīng)的壓縮到了哪里技扼,如圖所示。

坐標(biāo)對(duì)應(yīng)

? ? ? ?因此嫩痰,這就導(dǎo)致GPU的Texture Sample不可用剿吻,因此必須采用fixed rate coder

解壓速度 Decoding Speed

? ? ? ?GPU會(huì)有很多解壓?jiǎn)卧⑿刑幚恚@要求解壓算法復(fù)雜度必須足夠低串纺、足夠簡(jiǎn)單丽旅,基本不影響渲染性能。

直接尋址 Indirect Addressing

? ? ? ?類似顏色表或者其他全局?jǐn)?shù)據(jù)纺棺,會(huì)導(dǎo)致GPU間接尋址來(lái)獲得顏色數(shù)據(jù)榄笙。這樣,GPU需要四次才能最終得到顏色值祷蝌,是非常消耗時(shí)的茅撞。

間接尋址

? ? ? ?jpeg內(nèi)部有這種數(shù)據(jù),png采用索引值也不符合直接尋址的要求巨朦。

顯存大小

? ? ? ?無(wú)論是JPEG或者PNG的圖片最終在顯卡解碼(其實(shí)是cpu解碼)之后米丘,都是RGB(A)紋理,無(wú)法減小顯存的占用(256×256像素的圖片糊啡,雖然文件格式拄查、磁盤占用、內(nèi)存占用大小不一樣棚蓄,但都是占用256Kb的顯存空間堕扶,性能消耗大)

jpeg和png圖片碍脏,從文件加載的時(shí)候都必須先在cpu先解碼成原始的RGB(A)格式的數(shù)據(jù)

? ? ? ?正是因?yàn)閭鹘y(tǒng)的圖片并沒有考慮顯卡的這種特性,而3D物體表面的細(xì)節(jié)需靠高分辨率紋理貼圖來(lái)表現(xiàn)更強(qiáng)的細(xì)節(jié)稍算,但同時(shí)又要避免內(nèi)存以及帶寬開銷過(guò)大典尾,所以顯卡廠商才推出專為GPU設(shè)計(jì)的壓縮紋理格式。

紋理壓縮技術(shù)

? ? ? ?紋理壓縮不同于其他圖片壓縮方式(jpg,png)邪蛔,在使用中急黎,不會(huì)在CPU中進(jìn)行解壓縮,而是直接把壓縮內(nèi)容傳給GPU侧到,而且在GPU中也不會(huì)一次把整張圖片進(jìn)行解壓縮勃教,只會(huì)在需要采樣特定區(qū)域的紋理時(shí)對(duì)這一區(qū)域的紋理進(jìn)行解壓縮。

優(yōu)點(diǎn)

  • 解決了內(nèi)存和顯存中紋理占用空間大的問題

不需要在CPU中就解壓縮匠抗,在GPU中也不需要對(duì)整個(gè)圖片解壓縮

  • 解決了帶寬問題

從CPU傳到GPU的圖片是壓縮格式故源,因此傳輸?shù)臄?shù)據(jù)量會(huì)小很多,大大減輕了帶寬壓力

  • 解決了包體大小的問題

打包到游戲內(nèi)的紋理是已經(jīng)處理好的壓縮格式

缺點(diǎn)

? ? ? ?因?yàn)槭褂玫氖怯袚p壓縮汞贸,以效果換性能绳军,所以3D表面細(xì)節(jié)會(huì)產(chǎn)生一定程度的損失。

兩種常見的紋理壓縮

ETC/ETC2

待續(xù)

ASTC

待續(xù)

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末矢腻,一起剝皮案震驚了整個(gè)濱河市门驾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌多柑,老刑警劉巖奶是,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異竣灌,居然都是意外死亡聂沙,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門初嘹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)及汉,“玉大人,你說(shuō)我怎么就攤上這事屯烦】浪妫” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵驻龟,是天一觀的道長(zhǎng)甸箱。 經(jīng)常有香客問我,道長(zhǎng)迅脐,這世上最難降的妖魔是什么芍殖? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮谴蔑,結(jié)果婚禮上豌骏,老公的妹妹穿的比我還像新娘龟梦。我一直安慰自己,他們只是感情好窃躲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布计贰。 她就那樣靜靜地躺著,像睡著了一般蒂窒。 火紅的嫁衣襯著肌膚如雪躁倒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天洒琢,我揣著相機(jī)與錄音秧秉,去河邊找鬼。 笑死衰抑,一個(gè)胖子當(dāng)著我的面吹牛象迎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呛踊,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼砾淌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了谭网?” 一聲冷哼從身側(cè)響起汪厨,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎愉择,沒想到半個(gè)月后劫乱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡薄辅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抠璃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片站楚。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖搏嗡,靈堂內(nèi)的尸體忽然破棺而出窿春,到底是詐尸還是另有隱情,我是刑警寧澤采盒,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布旧乞,位于F島的核電站,受9級(jí)特大地震影響磅氨,放射性物質(zhì)發(fā)生泄漏尺栖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一烦租、第九天 我趴在偏房一處隱蔽的房頂上張望延赌。 院中可真熱鬧除盏,春花似錦、人聲如沸挫以。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)掐松。三九已至踱侣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間大磺,已是汗流浹背房轿。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荒适,地道東北人持际。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像殴蹄,于是被迫代替她去往敵國(guó)和親究抓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354