⑴ 【Unity】圖片壓縮的解決方案
公司做的項目需要拍照生成精靈,流程是客戶端先拍照,壓縮後上傳給伺服器,然後由伺服器的圖像識別演算法進行生成裁剪後的精靈與精靈身上的器官坐標點。
問題來了,客戶端拍出來的照片太大,普遍是2M-5M,所以客戶端拍出來的照片需要經過壓縮才能上傳給伺服器。
在網上尋找圖像壓縮的解決方案,最終暫定有三種方案:
第一種方案
由於PC端運行時用的是DGI圖像介面,不能調用System.Drawing庫,所以暫時否定第一種方案
第二種方案
理論
第三種方案由於需要付費,並且伺服器穩定性不可控,暫定為優先順序最低的方案,目前正在研究第二種方案
⑵ unity圖片壓縮格式和內存計算
例子2:使用RGB ETC 4bit壓縮,佔用內存 = 0.5Bytes 512 512 = 128KB
一、2的N次方大小的圖片會得到引擎更大的支持,包括壓縮比率,內存消耗,打包壓縮大小,而且支持的力度非常大。
二、減小圖片的佔用大小和內存方式有:圖片大小變化(Maxsize),色彩位數變化(16位,32位),壓縮(PVRC)。
三、U3D對於圖片的格式是自己生成的,而並不是你給他什麼格式,他就用什麼格式,一張1024 1024圖在無壓縮格式下,它會被U3D以無壓縮文件形式存放,也就是說U3D里的Texture Preview里顯示的佔用大小 *MB不只是內存佔用大小,還是空間佔用大小
U3D的內部機制為自動生成圖片類型來替換我們給的圖片,在圖片的壓縮方式上需要進行謹慎的選擇。
壓縮格式在U3D的Component Reference里有介紹我就不再詳細介紹,只介紹幾個重點的:
RGBA32格式為無壓縮最保真格式,但也是最浪費內存和空間的格式。Automatic Turecolor和它一個意思。
RGBA16格式為無壓縮16位格式,比32位節省一半的空間和內存。Automatic 16bits和它一個意思。
RGBA Compressed PVRTC 4bits格式為PVRTC圖片格式,它相當於把圖片更改了壓縮方式新生成了一個圖片來替換原來的我們給的圖片格式(比如我們給的是PNG格式)。
注意:U3D所有圖片的壓縮格式都會以另一種方式來存儲,不會以你給的方式來存儲,只有你指定了某種格式,它才會轉成你要的格式。而且壓縮格式在Android里並不一定有效,因為Android的機型多,GPU的渲染方式也不一樣,有的是Nvidia,有的是PowerVR,最最好的在安卓機子上啟用RGBA16方式,因為這個是適應所有機型的,並且比32位佔用量少一半,但也需要因項目而異,只是推薦使用的格式,可以多用,但要權衡內存和顯示效果。
⑶ 打ab包時如何打需要更新的內容
AB分配策略:
確定如何將項目的資產劃分為AssetBundles並不容易。關鍵決策是如何將對象分組到AssetBundles中。以下是unity手冊提供的主要策略是:
1. 邏輯實體分組(Logical Entity Grouping)
例子
捆綁用戶界面屏幕的所有紋理和布局數據
捆綁一個角色/一組角色的所有模型和動畫
捆綁跨多個級別共享的場景片段的紋理和模型
最常用的策略:按功能出現需要的資源,將需要的資源捆綁到一個ab里,這樣,載入該功能界面的時候,只要載入該ab就可以,如果功能比較復雜,可以視情況拆分粒度 邏輯實體分組是可下載內容(DLC)的理想選擇,因為通過這種方式將所有內容分開,您可以更改單個實體,而無需下載其他不變的資產。
使用前提:開發人員必須精確地了解項目將在何時何地使用每種資產。
2. 類型分組(Type Grouping)
預制
音頻
熱更腳本
類型分組是構建供多個平台使用的AssetBundle的較好策略之一。
3. 並發內容分組(Concurrent Content Grouping)
每個關卡都包含完全獨特的角色,紋理,音樂等
基於場景的包,每個場景束應包含大部分或所有場景依賴關系。
這些資產將同時載入和使用。
最後,無論您採用哪種策略,以下都是一些可以全面記住的其他提示:
將經常更新的對象與很少更改的對象分離
把需要同時載入的Asset盡量打包到同一個AB里。例如模型,其紋理和動畫。
如果一次經常載入少於50%的捆綁包,請考慮將其拆分
如果您發現多個AssetBundle中的多個對象都依賴於完全不同的AssetBundle中的單個資產,請將依賴關系移至單獨的AssetBundle。
根據依賴樹進行的最優打包策略,公共資源單獨打ab,獨立資源打到一起。
如果不太可能同時載入兩組對象(例如標准和高清資產),請確保它們位於自己的AssetBundle中。
考慮合並較小(少於5到10個資產)但經常同時載入其內容的AssetBundle
如果一組對象只是同一對象的不同版本,請考慮使用AssetBundle Variants
通常情況下,1M左右的AssetBundle包載入性能最好,冗餘也可以接受,但是在Unity 5.3版本之後,對於AB文件的文件大小其實不必再限定於1MB之內。使用LZ4壓縮,基於其Chunk的載入特點,AB載入很快,且內存佔用要比之前小很多。所以LZ4的AB其實可以考慮更加粗粒度一些。
shader字體等其他細碎並且需要常駐內存的資源打包到一起,啟動游戲的時候常駐內存。
根據項目實際需求將需要經常熱更新的資源進行單獨打包。
————————————————
版權聲明:本文為CSDN博主原創
原文鏈接:https://blog.csdn.net/qq_39329287/article/details/122109028
⑷ Unity如何打包Apk能壓縮資源
unity3d開發3d游戲,不可避免的要用到大量的模型、圖片和其他資源。通吃一個游戲Apk包才幾兆大小,但是資源卻又幾十兆上百兆,甚至幾百兆。可以把apk單獨發布,然後資源包單獨拷貝到SD卡裡面採用文件方式訪問。但是這樣操作比較麻煩。發布游戲如果採用這種方式,那受眾可能接受不了。還有一種方式就是把資源包打包進APK包裡面,這樣發布的時候,用戶只用安裝一個Apk包就行了,但是這樣帶來的問題就是Apk包比較大。
那麼怎麼樣把資源包打包進APK包裡面呢?其實很簡單,只要在項目文件夾裡面新建一個StreamingAssets文件夾,將要打包的各種資源文件放到該目錄下面就可以了。這樣資源就被打包進Apk包裡面的Assets文件夾裡面了。這裡面的資源通過什麼目錄訪問呢,其實也挺簡單 "jar:file://" + Application.dataPath + "!/assets" 就是訪問該目錄的路徑,如果實在IOS平台,路徑則是 Application.dataPath +"/Raw",這裡面一定要注意文件路徑大小寫,這裡面是區分大小寫的,如果不注意這個問題,可能就會資源載入不了的問題。所以項目的命名規范一開始就要做好。
⑸ (轉)Unity 圖片壓縮技巧
轉自 移動設備壓縮紋理使用技巧
壓縮紋理能夠節約不少內存空間,因此目前項目中UI全都是用Texture Packer打包出大圖之後壓縮。Unity導入紋理的默認設置是compress,在符合條件的情況下會優先使用PVR或ETC、否則會降為RGBA4444。從程序的角度來說,當然是1/4大小的壓縮紋理更好啦~但是,畢竟是有損壓縮,會帶來一定的損失,有時候還是挺郁悶的。
第一個常見的問題是漸變顏色區域經過壓縮之後會出現色階,如下圖所示。我參考了dither思路,用Photoshop加了一層0.3%的高斯分布雜音;可以看到ETC和PVR都有所改進,但是仔細盯著看依然能看到一些雜訊。
另一個很常見的問題就是有雜色(下圖綠色部分),本質是在某些block里邊界混合了…解決方法就是非常粗暴的放大解析度,可以看到當放大到2x大小的時候就完全沒問題了。這個事情桌子很早也和我提過,壓縮紋理的UI部分最好放大一些,當超采樣來用…
順便再提一句就是,新版本的Texture Packer里有了polygon布局,還能扣洞真是excited…
ps. 最早我們使用的是將原始圖片拆分成RGB和Alpha Mask兩張圖的策略,然後替換默認的UI Shader。但是Unity-5.2開始默認將ETC2設為默認(順便支持了ETC1 Compression for Sprite Atlases),所以我就懶得切圖+每個Sprite拖材質球了…直接一張RGBA進行壓縮完事兒
⑹ .unitypackage文件如何打開/解壓縮
.unitypackage文件是unity項目導出的包文件,包內包含項目的所有文件及文件結構。
如何打開/解壓縮?
步驟一、使用unity IDE創建你一個空的3D項目
步驟二、拖動.unitypackage文件到Unity IDE里Project窗口的Assets文件加下,如下圖:
步驟三、在彈出的窗口底部點擊 import按鈕
步驟四、成功打開