Weitere ähnliche Inhalte
Ähnlich wie Unity台北場優化分享 II (10)
Unity台北場優化分享 II
- 6. 貼圖import settings裡的 Read/Write Enabled 處於勾選狀態
如果這裡有打勾 Read/Write Enabled,貼圖
在傳到GPU之後,同時也會保留一份在CPU
端的的記憶體。
由於手機設備會顯存和記憶體共用,會導致
記憶體佔用加倍。因此需要注意是否有需要
在CPU端存取的貼圖才需要打勾。
例如:需要通過腳本獲取貼圖像素的情況下
,該貼圖的 Read/Write Enabled就要打勾。
- 15. Asset Bundles群組建議
標頭資料 8KB
載入暫存區 16KB
序列化資料 72KB - SerializedFile dependency list
不同的樹狀結構資料 50KB+
每包Asset Bundles會消耗掉上述空間,如果打包規劃是以小包為
主的專案要特別注意太多包累積的空間消耗也是很可觀的
<2018.2將優化到4.5k
- 16. Asset Bundles打包建議
我們常常發現客戶不同的Asset Bundels包裡有相同的資源,比如貼圖。
可以用Asset Bundle browser或Asset Bundle Graph Tool來檢查是否有重複的資源
常見的情況是,無索引的資源被載入,然後又因為UnloadUnusedAssets被卸載。這種無用的
流程一直不斷的循環在背景執行。所以這裡要有良好管理
• 不要使用IgnoreTypeTree選項,容易造成問題。
• 對於版本控制,不要依賴Unity幫Asset Bundle產生的hash, 用CRC比較穩。
• 卸載Asset Bundles時,用AssetBundle.Unload(false)效能比較不好,用
AssetBundle.Unload(true)會自動處理得很好。
- 33. Shader的建議事項
• 手遊專案儘量不要用Standard Shader。 因為Standard Shader對手機平台並沒有優化處理。
• Pass能合併就合併,RenderTexture能共用就共用
• 當一個Shader variant第一次被使用時,你會發現Unity在Shader.CreateGPUProgram()中耗
了花費的時間異常的多,很容易造成CPU尖峰。為了緩解這種情況,您可以把這些場景中使
用的Shader紀錄起來,保存到Graphics Settings裡:
- 36. GPU優化建議
• 採用Forward rendering path但又在場景打太多動態光源是很耗效能的。
因為每盞燈都會幫每個照明物件產生一個render pass
善用Unity Frame debugger
Draw Call的批次處理能降低GPU
的消耗,但是要達到一些條件才
能批次處理,這時可以用這個工
具來看哪些地方沒有被批次處理。
- 38. GPU優化建議
[Mobile] Unity的Post processing stack是很好的後製特效工具,但在手機上有很多限制:
不能用:
Ambient Occlusion(耗效能)
SSR(耗效能且必須用Deferred渲染通道)
TAA(需要支援motion vectors)
大量的Motion Blur(同上)
Eye adaptation(手機不支援)
Color Grading運用浮點材質格式,太低端的手機不支援
- 41. 2017新加的UI Profiler
批次處理會分開的原因如下:
• UI有不同的Z軸。
• 每當專案有nested canvas,然後UI需要在其他UI元素之間顯示Canvas時,就會切斷批次處
理。例如,如果nested canvas有個下拉式選單要顯示,那他必須中斷之前的批次處理確保下
拉式窗口會顯示在最上層。
• 當UI具有不同的材質時,我們需要使用該材質建立一個新的批次處理來分開渲染。
• 當我們遇到不同裁切範圍就會中斷批次。
• 每當UI具有不同的貼圖時,我們需要建立一個具有該貼圖的新批次處理來分別渲染它們。
Hinweis der Redaktion
- 這些優化建議並非絕對,還是要看專案需求
- iOS的PVRTC壓縮格式和Android的ETC壓縮格式都要求貼圖必須是正方形. 如果不是正方形有可能會被調整大小或是變成未壓縮
- OGO在2017.1之後效能應該差不多了,最好試試看如果差異不大,可以不勾
目前這個功能有發現一個bug,開啟這個選項有很低的機率,因為浮點精度問題導致碰撞體大小不斷改動,最終導致PhysX 記憶體被用光產生錯誤。
- 不單單是因為FBX Exporter好用,主要是由於現在的Prefab所指到的FBX關聯從來都是壞的,所以你更新FBX後Prefab裡的實例化的FBX並不會跟著更新。
- 因為Unity對於不壓縮的音效會生成200kb的audio buffer,所以小於200kb的音效會在效能和記憶體利用率上取得比較好的平衡。
- 在Android上,Vorbis應該用於所有剪輯,以充分利用底層內置硬件解壓縮。
在iOS上,Unity不使用硬件解壓縮,所以對於較短的剪輯,應將格式設置為ADPCM,對於較長的剪輯,則應將Vorbis或MP3設置為。
ADPCM提供固定的3.5:1壓縮比,並且解壓縮成本非常低。 對於非常短的聲音效果,ADPCM是更合適的選擇。
使用MP3或Vorbis的音頻剪輯消耗更多資源進行解壓縮,但文件大小要小得多。 高品質的MP3需要較少的資源進行解壓縮,而兩種格式的中低質量都幾乎相同。
對於較長的循環聲音,我們建議使用Vorbis,因為它可以更好地處理循環。
- ShaderLab Allocations
- NotCoplanarWithCanvas
CanvasInjectionIndex 例如,如果nested canvas有個下拉式選單要顯示,那他必須中斷之前的批次處理確保下拉式窗口會顯示在最上層。
DifferentMaterialInstance
DifferentClipRect or DifferentRectClipping
DifferentTexture or DifferentA8TextureUsage