1. 程式人生 > >Unity技術支持團隊性能優化經驗分享

Unity技術支持團隊性能優化經驗分享

當前 via 很多 fps 外部 但是 部分 col 場景

https://mp.weixin.qq.com/s?__biz=MzU5MjQ1NTEwOA==&mid=2247490321&idx=1&sn=f9f34407ee5c5d0d1edb478981299108&chksm=fe1e2fbac969a6acee4eddb865d161fe09400c9147794c777ea4087e59f1e5fc3ccca5d1d0dd&scene=21#wechat_redirect

在10月26日的Unity獨立遊戲日上,Unity大中華區技術總監張黎明為大家分享了Unity技術支持團隊在性能優化方面的經驗。其中主要介紹了Unity如何提供性能優化服務,性能優化服務的流程,以及優化過程中的註意事項。下面我們來看一下具體的內容。

技術分享圖片

Project Review

Project Review是Unity全球企業級支持服務的一部分。Project Review會針對一個項目做全面而深入的分析,從而幫助開發團隊找到項目在資源使用、運行時性能等方面的問題,並給出一套完整的解決方案或詳細修改意見。

整個Project Review是由Unity官方企業支持團隊入駐項目現場,進行為期兩天的現場工作。內容一般包括:

  • 遊戲啟動時間分析

  • 場景、資源加載時間分析

  • 遊戲過程中GPU&CPU性能分析

  • 內存使用情況分析

  • Asset Bundle和序列化分析

  • Il2cpp、代碼剪裁和binary大小優化

  • Asset審查自動化

  • UGUI性能分析

下面我們會介紹一下Project Review中的主要內容,其中包括資源導入設置檢查,以及使用到的性能分析工具介紹。

資源導入設置檢查

技術分享圖片

Project Review開始階段,Unity技術支持工程師一般會先同開發團隊溝通整個項目的情況,了解目前已知的性能問題,然後開始進入資源導入設置檢查環節。最常見的檢查項包括以下內容。

模型導入設置

  • 檢查Read/Write Enabled是否開啟

    開啟Read/Write Enabled一般是用於運行時修改Mesh的頂點數據,開啟這個選項會導致Mesh的內存占用翻倍。因此如果項目中不需要在運行時修改這些Mesh數據的話,我們建議把這個選項關閉。

  • 檢查Animation Type有沒有設置成None

    Unity默認的Animation Type是Generic,對包含動畫數據的FBX文件是適用這個選項的。但是如果FBX文件中沒有包含動畫數據,而只是普通靜態Mesh的話,設置為Generic會導致引擎自動為這個Mesh的GameObject添加一個Animator組件,導致不必要的消耗。因此對於不包含動畫數據的模型文件,我們建議把這個選項設置為None。

紋理導入設置

  • 檢查Generate Mipmaps選項有沒有開啟

    對3D物體,關閉Mipmap會導致遠處的紋理有閃爍感,而且渲染性能較低,因此建議開啟3D物體上紋理的Mipmap。開啟Mipmap的缺點是會導致紋理的內存占用更大。對2D物體,Mipmap並不會導致閃爍和性能問題,所以建議關閉2D以及UI紋理上的Mipmap選項。

音頻導入設置

  • 音頻壓縮格式

    對iOS平臺,建議采用mp3格式壓縮音頻文件,安卓平臺建議使用Vorbis格式,因為這兩種格式分別在這兩個平臺上有硬件解碼的支持。

  • Force to Mono

    手機遊戲往往對聲音質量要求不高,如果不需要立體聲效果,可以把這個選項打開,將音頻文件導入為單聲道音頻。

動畫導入設置

  • 動畫幀率

    在Animation頁面檢查動畫的幀率,一般30FPS足夠滿足大部分遊戲的效果,如果發現有制作成60FPS的,建議美術重新制作成30FPS。

Project Review常用性能分析工具

Project Review最主要的工作是使用各種工具來分析項目中存在的性能問題,最長用的工具包括Unity Profiler,Unity Memory Profiler, XCode Instrument. XCode Instrument內又包含了很多工具,其中最常用的有Time Profiler,Allocation以及Capture GPU Frame。

Unity Profiler

技術分享圖片

Unity Profiler中最常檢查的內容是CPU Usage,其中GC Alloc和Time ms最為重要。GC Alloc展示了每幀在Mono堆上進行內存分配的代碼,過於頻繁的在堆上分配內存會導致Mono定期觸發GC.Collect操作,進而導致遊戲卡頓。因此我們建議對單幀2K以上的內存分配,以及每幀20B以上的內存分配進行排查。如果能把堆內存的分配降到最低是最好的。Time ms展示了每一幀CPU耗時最高的函數,通過這項可以找到耗時不合理的代碼,然後進一步對代碼進行優化。

Unity Memory Profiler

技術分享圖片

Unity為5.3以上的版本提供了一個新的Memory Profiler工具,這個工具目前還是以外部插件方式提供的。這個工具通過圖形的方式展示了工程中占用內存最高的資源類型,因此可以很方便的進行資源內存的優化。另外還可以在遊戲的不同時間點抓取多個快照,通過比較內存占用的不同,來發現某些資源內存泄漏的情況。

XCode Instrument – Time Profiler

技術分享圖片

左上角是Instrument的Time Profiler工具,右下角是Unity Profiler,可以發現它們非常想像。區別在於Time Profiler可以分析一段時間範圍內不同函數的時間消耗,而Unity Profiler只能分析一幀內代碼的時間消耗。另外Time Profiler可以顯示引擎底層耗時高的代碼堆棧,非常方便從底層去理解性能問題的原因。Unity Profiler只能顯示引擎代碼中添加標簽的函數耗時,因此往往在Instrument Time Profiler中可以看到更多有用的數據。

XCode Instrument – Allocation

技術分享圖片

Allocation是用於分析內存分配的工具。默認情況下,它會開啟Created & Persistent選項,這代表它會記錄一段時間內分配出來但是沒有釋放的內存。因為有了這個功能,我們可以很方便的檢查遊戲中存在的內存泄露。一般的使用方法是在遊戲主菜單界面開啟Allocation檢測,進入戰鬥場景測試一段時間再回到主菜單界面,然後檢查有哪些內存分配但是沒有被釋放。這部分內存就可能包含存在泄漏的內存。

Capture GPU Frame

技術分享圖片

從XCode內啟動遊戲在真機運行,通過XCode內的Capture按鈕可以抓取當前渲染幀的全部數據。界面左邊展示了所有的Drawcall列表,中間上方是當前Drawcall渲染出的畫面,下方是當前Drawcall的相關數據,右上方是當前Drawcall用到的紋理數據。這個工具可以顯示每個Drawcall的耗時,因此可以用來檢查哪些對象渲染耗時太高。進而分析是Shader原因,還是網格體太復雜等等。

其他

在安卓平臺下並沒有XCode中這麽全面的性能分析工具。最常用的工具有Adreno Profiler和Mali Graphics Debugger,這兩個工具都是用來進行GPU性能分析的。

Unity企業支持服務

最後給大家簡單介紹一下Unity為中國開發者提供的企業支持服務內容。

首先我們會為每個企業客戶開啟Zendesk賬號,Zendesk是Unity面向企業客戶提供的問題解答平臺。這個平臺可以跟蹤開發者提交的每個問題,並且維護每個問題的當前狀態,方便Unity官方確保每個問題得到及時的解決。

另外我們為每個企業客戶提供了專屬的企業支持經理,全程跟蹤企業遇到的技術問題,並且以最快的速度響應出現的問題。

針對國內客戶普遍存在研發進度非常緊迫的情況,我們提供了每周兩天的現場支持,可以在現場提供性能優化、培訓、問題解答、現場代碼調試等服務。

結語

今天就為大家分享到這裏。後面我們還將繼續為大家分享更多遊戲性能優化相關技巧和內容在Unity官方中文社區(unitychina.cn),請保持關註。

Unity技術支持團隊性能優化經驗分享