導航:首頁 > 操作系統 > androidetc1

androidetc1

發布時間:2023-08-19 10:11:00

『壹』 一個操作讓游戲內存立減50+%-CocosCreator性能優化之壓縮紋理

在游戲中,紋理不僅占據大量的包體,也占據了大量的內存。傳統的圖片壓縮格式(如JPEG、PNG等)雖能減少資源大小,但是不能被GPU直接識別,還是需要先載入到內存通過CPU解碼,轉換成RGB/RGBA等能被GPU識別的格式,才能傳送到GPU進行渲染。

為避免這些問題,壓縮紋理,指的是一種針對GPU的紋理壓縮方案,使紋理能夠直接被GPU識別並進行渲染,它具有以下優點。

傳統的圖片壓縮主要目的是 存儲 和 傳輸 ,為了盡可能的高效壓縮,使用了可變的壓縮比率,因此在解壓時需要解壓更多的像素位才能讀取某個像素的位置,不適合隨機和快速讀取,也發揮不了GPU的並行處理優勢。

而壓縮紋理使用一個固定的壓縮比率,將紋理劃分成多個像素塊,每個像素塊包含 2*2 或 4*4 個像素,然後對每個像素塊進行壓縮,被壓縮的像素信息存儲在一個像素集合中,每個像素塊的索引位置存儲在一個塊索引圖中。讀取時,首先將紋理坐標轉化為塊索引值,然後在像素集合中查找對應的像素塊,最後在這個像素塊中找到紋理顏色值。

因為採用了固定的壓縮比率,GPU內部可以並行處理,從而快速的解壓縮。與之相對的是,紋理的壓縮過程發生在程序運行之前,並不在意編碼速度,因此在壓縮時會遍歷所有可能性,找到和原始像素差值最小的編碼,這也是紋理壓縮耗時較久的原因。

順便說一下,普通圖片格式中,PNG是無損壓縮,JPEG是有損壓縮。而壓縮紋理都是有損壓縮,只是在絕大部分情況下,手機上看不出來而已。

手機上使用壓縮紋理依賴於OpenGL ES的支持,OpenGL ES 2.0本身並沒有定義任何紋理壓縮格式,它僅提供 glCompressTexImage2D() 方法供應用程序上傳壓縮紋理,壓縮紋理的格式由各個GPU廠商定義和實現。

OpenGL ES 3.0提供了壓縮紋理標准,使各個平台都可以使用同一種壓縮紋理,但市面上的設備還需要很長時間才會全部過渡到OpenGL ES 3.0。因此,仍然需要對不同的平台和設備使用不同的壓縮紋理格式。

手機游戲中常用的有以下格式。

ETC1把 4*4 的像素塊壓縮成固定的64位編碼(8個位元組), 4*4 像素塊是16個像素,每個像素4位元組,一共佔64個位元組,所以壓縮比是 64/8=8。但是ETC1隻能存儲RGB信息,不適用帶透明度的紋理,為解決這個問題,Creator在ETC1文件中額外寫入了透明度信息,即ETC1+A格式,它的壓縮比是 64/16=4。
ETC1/ETC1+A需要OpenGL ES 2.0(對應WebGL 1.0)環境,目前幾乎所有Android手機都支持ETC1,但是iOS不支持。
ETC1/ETC1+A紋理的長寬可以不相等,但要求是2的冪次方。

ETC2是ETC1的擴展,壓縮比率一樣,但壓縮質量更高,而且支持透明通道,能完整存儲RGBA信息。
ETC2需要OpenGL ES 3.0(對應WebGL 2.0)環境,目前還有不少低端Android手機不兼容,iOS方面從 iPhone5S 開始都支持OpenGL ES 3.0。
ETC2和ETC1一樣,長寬可以不相等,但要求是2的冪次方。

Creator中常用的是PVRTC4+A,壓縮比和ETC一樣,iOS全系列支持,但是Android不支持。另外PVR要求紋理長寬相等(正方形)且是2的冪次方,例如 1280*720 的PNG圖片,轉換後變成 2048*2048 ,這一點會大大增加內存消耗。在實測中還發現轉換後的圖片質量不如ETC1,存在模糊、毛邊現象,對畫面要求高的游戲不適合。

壓縮紋理的使用非常簡單,根據構建平台添加需要的格式即可,具體參見Creator官方文檔,本文不再重復了。

Creator編輯器還提供了轉換壓縮紋理的選項,根據轉換速度分為Fast、Slow等好幾檔,速度越慢則畫面質量越好。但不管選哪個,隻影響顯示效果和轉換時長,顯存佔用都是一樣的。一般情況下,顯存佔用就是壓縮紋理的文件大小,例如文件大小是1.5M,則它佔用的顯存也是1.5M。

在設置壓縮紋理格式時,目前Creator 2.x版本還需手動一個一個設置。如果想一次性設置所有或部分資源,自己寫個腳本遍歷修改對應的 .meta 文件也比較方便,這里是一個我寫好的腳本 一鍵自動化設置壓縮紋理格式

在實際項目中的測試結果是,單圖、自動圖集、TexturePack合圖加起來超過兩千張圖片的Creator工程,使用PNG時打出來的apk包大小近500M,內存佔用1.3G。採用壓縮紋理後,包體大小降到150M,內存佔用降到600M。

『貳』 etc上的安卓插口有什麼用

etc上的安卓插口有什麼用
1、應急充電,萬一ETC設備,存放時間太久,裡面的電池已經沒有電力,靠太陽能充電依然不能啟動,就可以通過它應急充電,但是不是每個設備都是這個功能,在沒有明確指示的情況下,切莫自行嘗試。
2、程序燒錄口,有些設備的「自毀」開關出廠前是用封膠壓住的,然後在組裝完成後,再寫入程序,所以,這插孔還能用來燒錄程序。
3、數據傳送口,有些設備,可能會記錄通行信息,所以這個口可以用來,下載或者上傳一些必要數據。

閱讀全文

與androidetc1相關的資料

熱點內容
有什麼做手帳app 瀏覽:156
phpjquery源碼 瀏覽:884
大話西遊手游源碼 瀏覽:653
javaudp代碼 瀏覽:660
linuxu盤啟動win7 瀏覽:990
如何啟用交換機dhcp伺服器 瀏覽:237
三田汽車壓縮機好嗎 瀏覽:294
馬蜂窩app偏向什麼客戶 瀏覽:366
php簡單的登錄注冊 瀏覽:554
我們接到上級命令 瀏覽:349
php本周星期一 瀏覽:65
裘錫圭pdf 瀏覽:726
android模擬器調試 瀏覽:135
sap命令大全 瀏覽:296
mysql導出數據命令 瀏覽:954
文件夾隱藏了出不來 瀏覽:564
電信網上大學源碼 瀏覽:206
rr輪轉調度演算法 瀏覽:253
我的世界無法登入伺服器怎麼辦 瀏覽:149
文件加密授權特定隱藏訪問控制 瀏覽:801