Unity性能優化以內存-貼圖格式優化

最近作的一個小遊戲在美工提交了一批角色模型後,發現一輩子成角色的時候就會卡一下。分析緣由後發現貼圖佔用內存太大,優化後作個總結。segmentfault

1.分析緣由

既然是生成新角色的時候卡了一下,那麼問題緣由就定位在生成新模型的過程上。打開性能分析器看下CPU和內存狀況,發現內存出現大幅波動。性能優化

(1)未生成角色前:貼圖佔用內存:27.4M
未生成角色前性能

(2)生成1個角色:貼圖佔用內存:52.7M
1個角色增長了25M內存
生成1個角色優化

(3)生成6個角色:貼圖佔用內存:189.5M
6個角色增長了162M內存 平均每一個增長27M
生成6個角色spa

(4)查看角色下全部材質和貼圖
角色皮膚貼圖:
角色皮膚貼圖3d

皮膚貼圖格式:
佔用內存大小orm

皮膚貼圖大小:
皮膚貼圖大小blog

角色表情貼圖:
角色表情貼圖遊戲

表情貼圖格式:
表情貼圖格式圖片

表情貼圖大小
表情貼圖大小

2.解決方法

調整圖片格式

(1)調整貼圖類型 Texture Type:
該貼圖不是UI, Texture Type = Default 默認類型。

(2)調整是否支持透明度通道:Alpha Is Transparency
皮膚和裝飾不須要透明度,Alpha Is Transparency = X 不勾選。
表情須要透明度,Alpha Is Transparency = √ 勾選。

(3)調整生成小貼圖選項 Generate Mip Maps:
角色移動範圍有限,不須要生成小貼圖 Generate Mip Maps = X 不勾選。

(4)調整循環模式 Wrap Mode:
不須要平鋪貼圖 Wrap Mode = Clamp 強制拉伸(Repeat 爲 重複)。

(5)調整過濾模式 Filter Mode:
須要平滑一下 Filter Mode = Bilinear 雙線性過濾。
Filter Mode 用於紋理的過濾模式。在紋理檢視面板對應設置。
Point 點過濾 - 紋理像素成爲近似塊。
Bilinear 雙線性過濾 - 紋理取樣的平均值。
Trilinear 三線性過濾 - 紋理取樣的平均值,也混合mipmap等級。

(6)調整最大尺寸 Max Size:
貼圖是2048x2048分辨率,美工給的是高清貼圖,沒毛病。
貼圖的默認參數遠大於咱們的需求,須要咱們根據需求本身改一下格式。用QQ截圖測量了一下,角色距離相機最近的時候,最大寬高也沒超過100x100像素,128x128足以知足項目需求。角色移動範圍很小,不會遠離攝像機,不須要生成Mip Map。

(7)調整壓縮質量 Compression:
Compression = Normal Quality 默認的通常質量便可。

3.調整後:

6個角色貼圖佔用內存:32.3M(內存降低157.2M)
平均每一個角色佔用內存:0.82M(內存降低26.2M)
調整後內存大小

4.總結:

美工或策劃提交的資源,程序更新後必定要過一遍,作到內心有數。
紋理貼圖是內存大戶,要嚴格監控,根據項目需求修改貼圖屬性尤爲是對貼圖的類型,最大尺寸,壓縮質量進行修改。確保不浪費性能。有時候像表情貼圖這種體積不大的png,也會佔用巨大的內存。

性能優化歷來不是一蹴而就的事兒,與其卡的時候優化那1%最後的稻草,不如前面99%的細節都作好。

安心的吃吧,孩子們,爸爸愛大家。
圖片描述

轉載請標明原文地址:https://segmentfault.com/a/11...

相關文章
相關標籤/搜索