UNITY3d在移动设备上的一些优化实战(一)-概述
生活随笔
收集整理的這篇文章主要介紹了
UNITY3d在移动设备上的一些优化实战(一)-概述
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
項目進入了中期之后,就需要對程序在移動設(shè)備上的表現(xiàn)做分析評估和針對性的優(yōu)化了,首先前期做優(yōu)化,很多瓶頸沒表現(xiàn)出來,能做的東西不多,而且很多指標(biāo)會憑預(yù)想,如果太后期做優(yōu)化又會太晚,到時發(fā)現(xiàn)一些問題改起來返工量就有太大。前一陣子花了大量時間從 cpu gpu 內(nèi)存 啟動時間 到發(fā)熱量對項目做了一翻大規(guī)模的體檢和優(yōu)化,效果還是顯著的,在這里做個筆記,以后開發(fā)項目時可以作為經(jīng)驗和提前關(guān)注
1.項目情況:筆者所在項目是一個非常重度的手游,甚至開始就是瞄著端游做的,3D世界,2.5D視角,RPG,即使戰(zhàn)斗,美術(shù)品質(zhì)要求極高(模型 貼圖精度高 ,超過目前市場同類產(chǎn)品)。對于目前大多數(shù)移動設(shè)備來看,挑戰(zhàn)不小,對手機的各種硬件都是挑戰(zhàn)。、
2.目標(biāo)機型:偏中高端,盡量兼容低端,android至少sumsung S3能流暢,ios至少iphone4s流暢。
3.性能指標(biāo):內(nèi)存占用250M以下(這樣大量512的機器不會掛掉),初始包100m之內(nèi)(太多運營不干,太少實在是裝不下。。)
2.unity自帶的profiler:可以連接設(shè)備看到設(shè)備上cpu gpu mem的信息,使用的時候需要勾選development模式。有點是cpu的占用在腳本的層面看的非常仔細,哪個函數(shù)占用了太多時間一眼就能看出,基本是分析腳本效率的最佳工具,但是gpu大部分設(shè)備不支持看不到,顯示的mem信息不太準(zhǔn)確,基本上偏離實際占用的內(nèi)存
3.unity的internal profiler:在playersetting上可以勾選這個選項,勾選后,連接設(shè)備,在android的adb或者mac的xcode里會每隔幾秒打印出很多關(guān)鍵指標(biāo),這個其實非常有用,不過這個功能直到很后期才發(fā)現(xiàn),詳細文檔見http://docs.unity3d.com/Manual/iphone-InternalProfiler.html
4.android上的adb:adb提供了一組非常強大的分離android程序的工具,http://developer.android.com/tools/help/adb.html
而最常用的是用adb的dumpsys 指令,https://source.android.com/devices/tech/input/dumpsys.html
最常見的包括: adb shell dumpsys meminfo appname 查看實時的內(nèi)存占用,android的內(nèi)存分為ps rs,我們一般看ps為準(zhǔn),關(guān)于ps rs這些概念可參看http://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-android
adb shell dumpsys cpuinfo appname 查看實時的cpu占用,注意這里的cpu可能過百,這是因為多核的原因
adb shell dumpsys gpuinfo appname 查看實時的gpu情況
5.android 的monitor
安裝adt后,在sdk\tools\monitor.bat下面有個monitor,是我認為android看性能最好的工具之一,因為它是圖形化的,而且基本集成了adb的功能,從內(nèi)存到cpu到gpu,還有很有用的網(wǎng)絡(luò)流量使用情況,它的cpu占用是c++層面的統(tǒng)計,看不到腳本,這需要突破那個profilor結(jié)合。
6.android上的mongkey測試:它可以模擬隨機的用戶輸入,用來驗證你的程序的強壯性吧
adb shell monkey -p -v packname 1000
隨機模擬1000條用戶事件
7.ios:ios上的工具則顯得更加專業(yè)更加統(tǒng)一一些,ios就用xcode自帶的instruments了
這里有個詳細的文檔https://developer.apple.com/library/mac/documentation/developertools/Conceptual/InstrumentsUserGuide/Introduction/Introduction.html
看來這么多工具,其實很多是要配合使用的,做u3d開發(fā),其實不只是學(xué)會U3D的事情,要讓U3D在手機上運行的好,還需要對各個平臺有較深的了解。
利用這些工具法線了一些瓶頸,同時也采取了各種策略來提高性能,反正目標(biāo)就是cpu占用降低,內(nèi)存占用減少,啟動快,發(fā)熱小,幀率高,GPU占用少,發(fā)現(xiàn)的一些問題和做出的具體的一些努力列舉如下:
1.使用assetbundle,實現(xiàn)資源分離和共享,將內(nèi)存控制到200m之內(nèi),同時也可以實現(xiàn)資源的在線更新
2.頂點數(shù)對渲染無論是cpu還是gpu都是壓力最大的貢獻者,降低頂點數(shù)到8萬以下,fps穩(wěn)定到了30幀左右
3.只使用一盞動態(tài)光,不是用陰影,不使用光照探頭
粒子系統(tǒng)是cpu上的大頭
4.剪裁粒子系統(tǒng)
5.合并同時出現(xiàn)的粒子系統(tǒng)
6.自己實現(xiàn)輕量級的粒子系統(tǒng)
animator也是一個效率奇差的地方
7.把不需要跟骨骼動畫和動作過渡的地方全部使用animation,控制骨骼數(shù)量在30根以下
8.animator出視野不更新
9.刪除無意義的animator
10.animator的初始化很耗時(粒子上能不能盡量不用animator)
11.除主角外都不要跟骨骼運動apply root motion
12.絕對禁止掉那些不帶剛體帶包圍盒的物體(static collider )運動
NUGI的代碼效率很差,基本上runtime的時候?qū)pu的貢獻和render不相上下
13每幀遞歸的計算finalalpha改為只有初始化和變動時計算
14去掉法線計算
15不要每幀計算viewsize 和windowsize
16filldrawcall時構(gòu)建頂點緩存使用array.copy
17.代碼剪裁:使用strip level ,使用.net2.0 subset
18.盡量減少smooth group
19.給美術(shù)定一個嚴(yán)格的經(jīng)過科學(xué)驗證的美術(shù)標(biāo)準(zhǔn),并在U3D里面配以相應(yīng)的檢查工具
1.項目情況:筆者所在項目是一個非常重度的手游,甚至開始就是瞄著端游做的,3D世界,2.5D視角,RPG,即使戰(zhàn)斗,美術(shù)品質(zhì)要求極高(模型 貼圖精度高 ,超過目前市場同類產(chǎn)品)。對于目前大多數(shù)移動設(shè)備來看,挑戰(zhàn)不小,對手機的各種硬件都是挑戰(zhàn)。、
2.目標(biāo)機型:偏中高端,盡量兼容低端,android至少sumsung S3能流暢,ios至少iphone4s流暢。
3.性能指標(biāo):內(nèi)存占用250M以下(這樣大量512的機器不會掛掉),初始包100m之內(nèi)(太多運營不干,太少實在是裝不下。。)
用于分析和測試性能的一些利器:
1.首先是unity在編輯器下的statics窗口:提供了dc和頂點數(shù)這兩個重要指標(biāo)的查看。缺點在設(shè)備看不到,但是對于dc數(shù)和頂點數(shù)來說,設(shè)備和編輯器差不多,用它可以大體看出渲染的壓力。2.unity自帶的profiler:可以連接設(shè)備看到設(shè)備上cpu gpu mem的信息,使用的時候需要勾選development模式。有點是cpu的占用在腳本的層面看的非常仔細,哪個函數(shù)占用了太多時間一眼就能看出,基本是分析腳本效率的最佳工具,但是gpu大部分設(shè)備不支持看不到,顯示的mem信息不太準(zhǔn)確,基本上偏離實際占用的內(nèi)存
3.unity的internal profiler:在playersetting上可以勾選這個選項,勾選后,連接設(shè)備,在android的adb或者mac的xcode里會每隔幾秒打印出很多關(guān)鍵指標(biāo),這個其實非常有用,不過這個功能直到很后期才發(fā)現(xiàn),詳細文檔見http://docs.unity3d.com/Manual/iphone-InternalProfiler.html
4.android上的adb:adb提供了一組非常強大的分離android程序的工具,http://developer.android.com/tools/help/adb.html
而最常用的是用adb的dumpsys 指令,https://source.android.com/devices/tech/input/dumpsys.html
最常見的包括: adb shell dumpsys meminfo appname 查看實時的內(nèi)存占用,android的內(nèi)存分為ps rs,我們一般看ps為準(zhǔn),關(guān)于ps rs這些概念可參看http://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-android
adb shell dumpsys cpuinfo appname 查看實時的cpu占用,注意這里的cpu可能過百,這是因為多核的原因
adb shell dumpsys gpuinfo appname 查看實時的gpu情況
5.android 的monitor
安裝adt后,在sdk\tools\monitor.bat下面有個monitor,是我認為android看性能最好的工具之一,因為它是圖形化的,而且基本集成了adb的功能,從內(nèi)存到cpu到gpu,還有很有用的網(wǎng)絡(luò)流量使用情況,它的cpu占用是c++層面的統(tǒng)計,看不到腳本,這需要突破那個profilor結(jié)合。
6.android上的mongkey測試:它可以模擬隨機的用戶輸入,用來驗證你的程序的強壯性吧
adb shell monkey -p -v packname 1000
隨機模擬1000條用戶事件
7.ios:ios上的工具則顯得更加專業(yè)更加統(tǒng)一一些,ios就用xcode自帶的instruments了
這里有個詳細的文檔https://developer.apple.com/library/mac/documentation/developertools/Conceptual/InstrumentsUserGuide/Introduction/Introduction.html
看來這么多工具,其實很多是要配合使用的,做u3d開發(fā),其實不只是學(xué)會U3D的事情,要讓U3D在手機上運行的好,還需要對各個平臺有較深的了解。
利用這些工具法線了一些瓶頸,同時也采取了各種策略來提高性能,反正目標(biāo)就是cpu占用降低,內(nèi)存占用減少,啟動快,發(fā)熱小,幀率高,GPU占用少,發(fā)現(xiàn)的一些問題和做出的具體的一些努力列舉如下:
1.使用assetbundle,實現(xiàn)資源分離和共享,將內(nèi)存控制到200m之內(nèi),同時也可以實現(xiàn)資源的在線更新
2.頂點數(shù)對渲染無論是cpu還是gpu都是壓力最大的貢獻者,降低頂點數(shù)到8萬以下,fps穩(wěn)定到了30幀左右
3.只使用一盞動態(tài)光,不是用陰影,不使用光照探頭
粒子系統(tǒng)是cpu上的大頭
4.剪裁粒子系統(tǒng)
5.合并同時出現(xiàn)的粒子系統(tǒng)
6.自己實現(xiàn)輕量級的粒子系統(tǒng)
animator也是一個效率奇差的地方
7.把不需要跟骨骼動畫和動作過渡的地方全部使用animation,控制骨骼數(shù)量在30根以下
8.animator出視野不更新
9.刪除無意義的animator
10.animator的初始化很耗時(粒子上能不能盡量不用animator)
11.除主角外都不要跟骨骼運動apply root motion
12.絕對禁止掉那些不帶剛體帶包圍盒的物體(static collider )運動
NUGI的代碼效率很差,基本上runtime的時候?qū)pu的貢獻和render不相上下
13每幀遞歸的計算finalalpha改為只有初始化和變動時計算
14去掉法線計算
15不要每幀計算viewsize 和windowsize
16filldrawcall時構(gòu)建頂點緩存使用array.copy
17.代碼剪裁:使用strip level ,使用.net2.0 subset
18.盡量減少smooth group
19.給美術(shù)定一個嚴(yán)格的經(jīng)過科學(xué)驗證的美術(shù)標(biāo)準(zhǔn),并在U3D里面配以相應(yīng)的檢查工具
總結(jié)
以上是生活随笔為你收集整理的UNITY3d在移动设备上的一些优化实战(一)-概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机创新设计2大赛获奖作品3Done,
- 下一篇: Linq(03)基础之Orderby