[Unity] 各種移動(dòng)GPU壓縮紋理的使用方法

1. 移動(dòng)GPU大全

目前移動(dòng)市場(chǎng)的GPU主要有四大廠商系列:

1)Imagination Technologies的PowerVR SGX系列


代表型號(hào):PowerVR SGX 535、PowerVR SGX 540酷鸦、PowerVR SGX 543MP硼身、PowerVR SGX 554MP等

代表作 :Apple iPhone全系催首、iPad全系隅茎,三星I9000广恢、P3100等

2)Qualcomm(高通)的Adreno系列


代表型號(hào):Adreno 200欣孤、Adreno 205馋没、Adreno 220、Adreno 320等

代表作 :HTC G10降传、G14篷朵,小米1、2等

3)ARM的Mali系列


代表型號(hào):Mali-400婆排、Mali-T604等

代表作 :三星Galaxy SII声旺、Galaxy SIII、Galaxy Note1段只、Galaxy Note2(亞版)等

4)nVIDIA(英偉達(dá))的Tegra系列


代表型號(hào):nVIDIA Tegra2腮猖、nVIDIA Tegra3等

代表作 :Google Nexus 7,HTC One X等


2. 壓縮紋理的必要性

1)首先要說一下圖像文件格式和紋理格式的區(qū)別赞枕。

常用的圖像文件格式有BMP澈缺,TGA,JPG炕婶,GIF姐赡,PNG等;

常用的紋理格式有R5G6B5柠掂,A4R4G4B4项滑,A1R5G5B5,R8G8B8, A8R8G8B8等涯贞。

文件格式是圖像為了存儲(chǔ)信息而使用的對(duì)信息的特殊編碼方式枪狂,它存儲(chǔ)在磁盤中,或者內(nèi)存中肩狂,但是并不能被GPU所識(shí)別摘完,因?yàn)橐韵蛄坑?jì)算見長(zhǎng)的GPU對(duì)于這些復(fù)雜的計(jì)算無能為力。這些文件格式當(dāng)被游戲讀入后傻谁,還是需要經(jīng)過CPU解壓成R5G6B5孝治,A4R4G4B4,A1R5G5B5审磁,R8G8B8, A8R8G8B8等像素格式谈飒,再傳送到GPU端進(jìn)行使用。

紋理格式是能被GPU所識(shí)別的像素格式态蒂,能被快速尋址并采樣杭措。

舉個(gè)例子,DDS文件是游戲開發(fā)中常用的文件格式钾恢,它內(nèi)部可以包含A4R4G4B4的紋理格式手素,也可以包含A8R8G8B8的紋理格式鸳址,甚至可以包含DXT1的紋理格式。在這里DDS文件有點(diǎn)容器的意味泉懦。

OpenGL ES 2.0支持以上提到的R5G6B5稿黍,A4R4G4B4,A1R5G5B5崩哩,R8G8B8巡球,A8R8G8B8等紋理格式,其中 R5G6B5邓嘹,A4R4G4B4酣栈,A1R5G5B5每個(gè)像素占用2個(gè)字節(jié)(BYTE),R8G8B8每個(gè)像素占用3個(gè)字節(jié)汹押,A8R8G8B8每個(gè)像素占用 4個(gè)字節(jié)矿筝。


對(duì)于一張512*512的紋理的話,R5G6B5格式的文件需要占用512KB的容量鲸阻,A8R8G8B8格式的文件需要占用1MB的容量跋涣;如果是1024*1024的紋理缨睡,則各需要2M和4M的容量鸟悴,這對(duì)于動(dòng)輒需要幾十、幾百?gòu)埳踔粮嗉y理的游戲奖年,上G容量的游戲在移動(dòng)平臺(tái)上是不容易被接受的(當(dāng)然细诸,還是有1、2G的大作的陋守,里面包含了幾千張的紋理)震贵。

聰明的設(shè)計(jì)師們?cè)谙耄袥]有其他辦法水评,既能表現(xiàn)豐富的色彩和細(xì)節(jié)猩系,又能是最小失真的情況下,達(dá)到更小的紋理容量呢中燥。壓縮紋理格式應(yīng)運(yùn)而生(當(dāng)然寇甸,并不是在移動(dòng)平臺(tái)后才有的產(chǎn)物)。


3. 常見的壓縮紋理格式

基于OpenGL ES的壓縮紋理有常見的如下幾種實(shí)現(xiàn):

1)ETC1(Ericsson texture compression)

2)PVRTC (PowerVR texture compression)

3)ATITC (ATI texture compression)

4)S3TC (S3 texture compression)

ETC1:

ETC1格式是OpenGL ES圖形標(biāo)準(zhǔn)的一部分疗涉,并且被所有的Android設(shè)備所支持拿霉。

擴(kuò)展名為: GL_OES_compressed_ETC1_RGB8_texture,不支持透明通道咱扣,所以僅能用于不透明紋理。

當(dāng)加載壓縮紋理時(shí), 參數(shù)支持如下格式:?

GL_ETC1_RGB8_OES(RGB星澳,每個(gè)像素0.5個(gè)字節(jié))

PVRTC:

支持的GPU為Imagination Technologies的PowerVR SGX系列。

OpenGL ES的擴(kuò)展名為: GL_IMG_texture_compression_pvrtc壮池。

當(dāng)加載壓縮紋理時(shí), 參數(shù)支持如下幾種格式:?

GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG (RGB杀怠,每個(gè)像素0.5個(gè)字節(jié))?

GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG (RGB火窒,每個(gè)像素0.25個(gè)字節(jié))?

GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG (RGBA,每個(gè)像素0.5個(gè)字節(jié))?

GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG (RGBA驮肉,每個(gè)像素0.25個(gè)字節(jié))

ATITC:

支持的GPU為Qualcomm的Adreno系列熏矿。

支持的OpenGL ES擴(kuò)展名為: GL_ATI_texture_compression_atitc。

當(dāng)加載壓縮紋理時(shí)离钝, 參數(shù)支持如下類型的紋理:?

GL_ATC_RGB_AMD (RGB票编,每個(gè)像素0.5個(gè)字節(jié))?

GL_ATC_RGBA_EXPLICIT_ALPHA_AMD (RGBA,每個(gè)像素1個(gè)字節(jié))?

GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD (RGBA卵渴,每個(gè)像素1個(gè)字節(jié))

S3TC:

也被稱為DXTC慧域,在PC上廣泛被使用,但是在移動(dòng)設(shè)備上還是屬于新鮮事物浪读。支持的GPU為NVIDIA Tegra系列昔榴。

OpenGL ES擴(kuò)展名為:

GL_EXT_texture_compression_dxt1和GL_EXT_texture_compression_s3tc。

當(dāng)加載壓縮紋理時(shí)碘橘, 的參數(shù)有如下幾種格式:?

GL_COMPRESSED_RGB_S3TC_DXT1 (RGB互订,每個(gè)像素0.5個(gè)字節(jié))?

GL_COMPRESSED_RGBA_S3TC_DXT1 (RGBA,每個(gè)像素0.5個(gè)字節(jié))?

GL_COMPRESSED_RGBA_S3TC_DXT3 (RGBA痘拆,每個(gè)像素1個(gè)字節(jié))?

GL_COMPRESSED_RGBA_S3TC_DXT5 (RGBA仰禽,每個(gè)像素1個(gè)字節(jié))

由此可見,Mali系列GPU只支持ETC1格式的壓縮紋理纺蛆,而且該紋理不支持透明通道吐葵,有一定局限性。

以上壓縮紋理格式每個(gè)像素大小相對(duì)A8R8G8B8格式的比例桥氏,最高壓縮比是16:1温峭,最低壓縮比是4:1,對(duì)于減小紋理的數(shù)據(jù)容量有明顯作用字支,相應(yīng)在顯存帶寬上也有明顯優(yōu)勢(shì)凤藏,從而提高游戲的運(yùn)行效率(此特性沒有絕對(duì)數(shù)值,根據(jù)每個(gè)游戲的用法和瓶頸點(diǎn)不同而有差別)祥款。


4. OpenGL中相關(guān)API的使用

1) 獲得GPU的型號(hào)

glGetString(GL_RENDERER)

2) 獲得GPU的生產(chǎn)廠商

glGetString(GL_VENDOR);

3) 獲取GPU支持哪些壓縮紋理

string extensions = (const char*)glGetString(GL_EXTENSIONS);

a. 判斷是否支持ETC1格式的壓縮紋理

return (extensions.find("GL_OES_compressed_ETC1_RGB8_texture")!= string::npos);

b. 判斷是否支持DXT格式的壓縮紋理

return (extensions.find("GL_EXT_texture_compression_dxt1")!= string::npos ||

extensions.find("GL_EXT_texture_compression_s3tc")!= string::npos);

c. 判斷是否支持PVRTC格式的壓縮紋理

return (extensions.find("GL_IMG_texture_compression_pvrtc")!= string::npos);

d. 判斷是否支持ATITC格式的壓縮紋理

return (extensions.find("GL_AMD_compressed_ATC_texture")!= string::npos ||

extensions.find("GL_ATI_texture_compression_atitc")!= string::npos);

4) 填充壓縮紋理數(shù)據(jù)

void glCompressedTexImage2D (

GLenum target,

GLint level,

GLenum internalformat,

GLsizei width,

GLsizei height,

GLint border,

GLsizei imageSize,

const GLvoid * data);

這里的參數(shù)不做詳細(xì)解釋清笨,其中internalformat即是壓縮紋理格式的類型。


5. 壓縮紋理工具的使用

每種壓縮紋理以及相應(yīng)的廠商都提供了壓縮紋理的工具刃跛,工具都分兩個(gè)版本:

a. 可視化轉(zhuǎn)換工具 (給美工或小白少量使用)

b. 命令行轉(zhuǎn)換工具 (給程序批量使用)

下面對(duì)每個(gè)工具的用法進(jìn)行說明抠艾。

1)Imagination Technologies PowerVR

工具下載地址

http://www.imgtec.com/powervr/insider/sdkdownloads/index.asp?installer=W...

可視化轉(zhuǎn)換界面


命令行轉(zhuǎn)換腳本

for %%i in (*.tga) do PVRTexTool.exe -f PVRTC4 -i %%i

(將本目錄下的所有tga文件,轉(zhuǎn)換成"PVRTC4"編碼格式的pvr文件桨昙,不帶mipmap)

詳細(xì)使用說明:PvrTexTool.exe /?

2)Qualcomm Adreno

工具下載地址

https://developer.qualcomm.com/mobile-development/mobile-technologies/ga...

可視化轉(zhuǎn)換界面


命令行轉(zhuǎn)換腳本

for %%i in (*.tga) do QCompressCmd.exe %%i %%i.ktx "ATC RGBA Explicit" yes

(將本目錄下的所有tga文件检号,轉(zhuǎn)換成"ATC RGBA Explicit"編碼格式的ktx文件腌歉,帶mipmap)

詳細(xì)使用說明:QCompressCmd.exe /?

3)ARM Mali

工具下載地址

http://malideveloper.arm.com/develop-for-mali/mali-gpu-texture-compressi...

可視化轉(zhuǎn)換界面


命令行轉(zhuǎn)換腳本

for %%i in (*.tga) do PVRTexTool.exe -f ETC -i %%i

(將本目錄下的所有tga文件,轉(zhuǎn)換成"ETC"編碼格式的pvr文件齐苛,不帶mipmap這里還是使用的PVRTexTool.exe翘盖,也可以使用QCompressCmd.exe)

詳細(xì)使用說明:PVRTexTool.exe /?

4)nVIDIA Tegra

可以使用DirectX SDK中自帶的DirectX Texture Tool進(jìn)行轉(zhuǎn)換

可視化轉(zhuǎn)換界面


命令行轉(zhuǎn)換腳本

for %%i in (*.tga) do texconv.exe -f DXT5 %%i

(將本目錄下的所有tga文件,轉(zhuǎn)換成"DXT5"編碼格式的dds文件凹蜂,不帶mipmap)

詳細(xì)使用說明:TexConv.exe /?

本文來源:?http://www.cnblogs.com/luming1979/archive/2013/02/04/2891421.html

主流紋理壓縮標(biāo)準(zhǔn):ETC馍驯、PVRTC、S3TC

首先說OpenGL ES標(biāo)準(zhǔn)中的玛痊,2.0版規(guī)范中將ETC(Ericsson Texture Compression)作為基本的紋理壓縮標(biāo)準(zhǔn)汰瘫,這是大部分移動(dòng)GPU都會(huì)支持的紋理標(biāo)準(zhǔn)。OpenGL ES 3.0中還引入了ETC2擂煞、EAC紋理壓縮格式混弥,二者基本一致,只不過EAC主要用于1-2通道數(shù)據(jù)的情況对省。目前ECT2還在改進(jìn)中蝗拿,除了高通的Adreno 320之外還沒有移動(dòng)GPU支持,Tgera 4也不行蒿涎。

此外哀托,OpenGL ES 3.0中還有一種可選紋理壓縮格式——ASTC(Adaptive Scalable Texture Compression,自適應(yīng)擴(kuò)展紋理壓縮)同仆,這是ARM提出的萤捆,去年被Khronos組織認(rèn)可,納入到標(biāo)準(zhǔn)中來俗批,不過并不是強(qiáng)制性的,目前也只有Mali-T600系列支持市怎。

Imagination旗下的PowerVR GPU支持的是PVRTC(PowerVR texture compression)和ETC岁忘,高通的Adreno 2xx系列支持ETC之外還有3Dc和ATITC。后兩者都是原來的ATI開發(fā)的区匠,Adreno 320除了前面三種標(biāo)準(zhǔn)之外還支持ETC2紋理壓縮干像。

ARM的Mali-300/400系列支持ETC,Mali-T600還多了ASTC紋理支持驰弄。

NVIDIA的Tegra系列更有趣麻汰。之前的說法稱Tegra支持自己的紋理格式,實(shí)際上除了通用的ETC之外戚篙,Tegra支持的紋理叫做S3TC(S3 Texture Compression)五鲫,也被稱為DXTn或者DXTC。S3TC是S3公司在1999年引入的岔擂,后來被DX 6.0和OpenGL 1.3吸收為官方標(biāo)準(zhǔn)位喂,DXTC相當(dāng)于Windows版的名字浪耘,S3TC是OpenGL中的名字。

說到S3TC塑崖,之前蘋果和HTC大打?qū)@麘?zhàn)的時(shí)候就涉及到了這個(gè)標(biāo)準(zhǔn)七冲。S3已經(jīng)歸為VIA威盛旗下,HTC和威盛又有同一個(gè)老板——王雪紅规婆。為了支援HTC打?qū)@麘?zhàn)澜躺,威盛去年就把S3部門出售給了HTC,算是左手倒右手吧抒蚜。

S3TC是DX顯卡都支持的標(biāo)準(zhǔn)苗踪,NVIDIA也在Tegra中支持了這個(gè)標(biāo)準(zhǔn),S3TC根據(jù)不同算法又分為DXT1-DXT5這五個(gè)級(jí)別削锰,Terga支持的實(shí)際上是DXT1通铲、DXT3和DXT5。

Vivante的GC系列也支持ETC和S3TC器贩,跟NVIDIA的Tegra路線相同颅夺。以前都說Vivante支持的是NVIDIA Tegra的紋理數(shù)據(jù),實(shí)際上二者是選擇了共同的路線而已蛹稍,DXT也不是NVIDIA的專利吧黄。

目前來說我們能常用到的紋理壓縮主要是ETC、PVRTC唆姐、S3TC拗慨、ATITC這四種種。

主流紋理壓縮格式優(yōu)缺點(diǎn)


常見的TC格式壓縮比

先來看壓縮比奉芦。如果無失真的PNG容量是5.4MB赵抢,那么S3TC和ETC都能壓縮到1.1MB,PVRTC壓縮最高声功,可壓縮到528KB烦却,不過PVRTC的問題在于它只支持PowerVR系列GPU,有排他性先巴,高通的Adreno支持的ATITC同樣有排他性其爵,其他廠商并不支持。


ETC是最通用的紋理壓縮格式伸蚯,不過ETC并不招廠商待見摩渺,因?yàn)镋TC紋理壓縮不支持Alpha通道,只能用于壓縮不透明的材質(zhì)剂邮,不過ETC也有自己的優(yōu)點(diǎn)摇幻,幾乎所有的安卓設(shè)備都可以支持ETC壓縮的GPU加速。

S3TC無論壓縮速度還是壓縮比都不錯(cuò),也支持GPU加速囚企,而且是桌面顯卡通用的壓縮格式丈咐,看起來是最完美的選擇,可惜的是移動(dòng)市場(chǎng)跟PC不一樣龙宏,大家各自為王棵逊,NVIDIA現(xiàn)在還沒強(qiáng)大到讓其他GPU廠商低頭采用S3TC標(biāo)準(zhǔn)的程度,因?yàn)?b>S3TC說到底還是一種私有的標(biāo)準(zhǔn)银酗,有專利上的麻煩辆影。

ETC2壓縮標(biāo)準(zhǔn)補(bǔ)全了ETC1不支持Alpha通道的缺陷,支持更高質(zhì)量的RGBA(RGB+Alpha)壓縮黍特,而ARM提出的ASTC標(biāo)準(zhǔn)在壓縮速度和質(zhì)量上比S3TC要好蛙讥,但是這兩種壓縮格式都是新出的,支持的廠商實(shí)在太少了灭衷。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末次慢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子翔曲,更是在濱河造成了極大的恐慌迫像,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞳遍,死亡現(xiàn)場(chǎng)離奇詭異闻妓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)掠械,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門由缆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人猾蒂,你說我怎么就攤上這事均唉。” “怎么了婚夫?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵浸卦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我案糙,道長(zhǎng),這世上最難降的妖魔是什么靴庆? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任时捌,我火速辦了婚禮,結(jié)果婚禮上炉抒,老公的妹妹穿的比我還像新娘奢讨。我一直安慰自己,他們只是感情好焰薄,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布拿诸。 她就那樣靜靜地躺著扒袖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪亩码。 梳的紋絲不亂的頭發(fā)上季率,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音描沟,去河邊找鬼飒泻。 笑死,一個(gè)胖子當(dāng)著我的面吹牛吏廉,可吹牛的內(nèi)容都是我干的泞遗。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼席覆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼史辙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起佩伤,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤聊倔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后畦戒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體方库,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年障斋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纵潦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡垃环,死狀恐怖邀层,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遂庄,我是刑警寧澤寥院,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站涛目,受9級(jí)特大地震影響秸谢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜霹肝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一估蹄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沫换,春花似錦臭蚁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冷尉。三九已至,卻和暖如春系枪,著一層夾襖步出監(jiān)牢的瞬間雀哨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工嗤无, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留震束,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓当犯,卻偏偏與公主長(zhǎng)得像垢村,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嚎卫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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

  • 一嘉栓、原始圖像數(shù)據(jù) 1.像素包裝 圖像存儲(chǔ)空間 = 圖像的高度 * 圖像寬度 * 每個(gè)像素的字節(jié)數(shù) 二、函數(shù) (注意...
    a浮生若夢(mèng)a閱讀 628評(píng)論 0 0
  • 一拓诸、紋理基礎(chǔ) 3D圖形渲染中最基本的操作就是對(duì)一個(gè)表面應(yīng)用紋理侵佃。紋理可以表現(xiàn)只從網(wǎng)格的幾何形狀無法得到的附加細(xì)節(jié)。...
    cain_huang閱讀 8,705評(píng)論 0 7
  • Using texturetool to Compress Textures - 使用紋理工具壓縮紋理 iOS S...
    一川煙草i蓑衣閱讀 1,123評(píng)論 0 0
  • 基本概念 ** 紋理 **概念:紋理是一個(gè)用來保存圖像顏色元素值的OpenGL ES緩存奠支。應(yīng)該盡量使用最小的圖像來...
    星空雪雨閱讀 1,505評(píng)論 0 6
  • 本文首發(fā)于個(gè)人博客:Lam's Blog - 【OpenGL-ES】二維紋理馋辈,文章由MarkDown語法編寫,可能...
    格子林ll閱讀 3,751評(píng)論 0 9