移動裝置記憶體有限,為了節省記憶體,一般都會對貼圖進行壓縮。
一張4mb的貼圖,在移動裝置中壓縮之後只有1/8(安卓裝置中算上alpha貼圖是1/4),也就是0.5mb。
假如有一張1024px * 1024px的4通道(rgba8888,每個通道都為8bit)貼圖。
一般來說,一張紋理所占用的記憶體的計算方式為長乘以框再撐每個畫素的位元數,計算公式如下:
1 byte = 8 bit那麼這張圖所長的記憶體為:1024 * 1024 * 4 * 8 bit = 1024 * 1024 * 4 byte = 1024 * 4 kb = 4mb1 kb = 1024b
1mb = 1024kb
記憶體 = 長 * 寬 * 畫素位元數
android裝置中一般使用etc1壓縮,一種有損的影象壓縮方式。
etc1是opengl2.0支援的標準,壓縮之後每個畫素佔4bit,壓縮之後的格式為ktx或者pkm,前者支援儲存多紋理,後者只支援單紋理。
上面的壓縮之後的大小為:1024 * 1024 * 4 bit = 0.5mb
etc1的缺點是不支援alpha通道,不支援有透明度的壓縮。
etc2解決了alpha通道,但是它是opengl3.0標準,考慮到2.0裝置的市場占有率,一般使用etc1。
etc1壓縮alpha通道解決方案ios裝置中採用的影象格式一般是pvr,也是一種有損的影象壓縮方式。一種alpha貼圖:是將alpha通道擴充套件到原圖的下方,形成乙個和原圖一樣大小的區域來表示原圖中的alpha資訊,對於pkm和ktx可以使用這種方式;
另一種方法是將alpha資訊寫入ktx的meta資訊中,在讀入記憶體時,從meta中取出alpha資訊,生成一張與原圖一樣大小的a8紋理,兩種方式都會增加一倍的記憶體占用,所以經過擴充套件的etc1每畫素大約會佔8bit的記憶體。
pvr壓縮分為兩種,pvrtc2和pvrtc4。
pvrtc4:compressed format, 4 bits per pixel, ok image quality
pvrtc2:compressed format, 2 bits per pixel, poor image quality
常用的pvrtc4,壓縮之後的大小為:1024 * 1024 * 4 bit = 0.5mb
除了壓縮記憶體,pvr可以直接被顯示卡讀取,載入速度更快,顯示卡不能直接讀取的格式,讀如記憶體後,需要轉換成rgba8888之後傳給顯示卡;缺點是pvr需要powervr晶元支援,目前ios裝置都能完美支援,android支援尚少;此外,pvrtc4只支援方形貼圖,非方形會被處理成方形,且長寬必須為2的冪。
關於pvr壓縮演算法可以參考:
WOW渲染中的紋理壓縮
一直沒玩台服,國服也停留在72級。成都的天氣一天天嚴峻,更是不想動了,於是用nvperfhud掛了下wow,看看它到底啥樣。用nvperfhud掛程式需要被掛的程式自身支援,但是網上有乙個老兄寫的乙個nvperfhud any程式可以幫你完成這個功能。對大多數d9的都有效。除非本身做了破解。完美時空...
中手遊署理《每天炫舞》內測 前進精品手遊商場
這次內測為v1.1版別,和封測期間比較,遊戲內加入了更多全新的元素,遊戲植入了華晨宇的語音及形象,規劃了很多與華晨宇有關的遊戲彩蛋,以新增遊戲體驗。除此之外,每天炫舞 在遊戲中為華晨宇及其粉絲格外製作了以星空為主題的場景作為遊戲主介面,滿意玩家的遊戲需求。每天炫舞 是3d舞蹈類手機網遊,由知名舞蹈團...
個人理解的 紋理壓縮
2.壓縮紋理的必要性 1 首先要說一下影象檔案格式和紋理格式的區別。常用的影象檔案格式有bmp,tga,jpg,gif,png等 常用的紋理格式有r5g6b5,a4r4g4b4,a1r5g5b5,r8g8b8,a8r8g8b8等。檔案格式是影象為了儲存資訊而使用的對資訊的特殊編碼方式,它儲存在磁碟中...