優化不再禿頭,這個優秀實踐我們一點一點說。

UWA本地資源檢測正式面世後,不少研發團隊參與了體驗並給出了反饋,我們很高興該工具幫助大家有效提升了研發效能。在和用戶的積極交流中,更有一位資深用戶分享了他們完整的實踐流程,從接入到分析排查到複測再到總結覆盤,詳盡又落地,可作爲大家實踐參考的攻略帖。

文末附建議收集欄,相互成就始於彼此的隻言片語,期待大家的真知灼見。


在此特別感謝作者黃程的分享,以下爲原文:
4月初項目到收尾階段,終於有時間去應用一下UWA推出的新Pipline產品本地資源檢測工具。在此記錄一下整個使用體驗過程。

一、接入和使用

1、接入
在UWA主頁創建項目以後進入項目的測試概況界面並下載SDK,我們使用的Unity2018.4,因此選擇下載“Unity 5.6-2019.3”這個包。
SDK的接入非常簡單,在工程中建立Assets/ThirdPart/UwaProjScan/Editor目錄(根據各自工程需求創建目錄),將UwaProjScan.dll和uwascan_ruleconfig.json兩個文件拷入,即完成接入。

2、運行
接下來使用默認配置進行資源檢測,在Unity編輯器菜單中選擇Tools/UWA Scan/Run即開始執行資源檢測。完成以後在工程的Assets同級目錄會生成一個UwaScan的目錄,裏面保存的則就是本次檢測的結果數據。

3、提交
開始將檢測結果數據提交UWA服務器進行報告的整理。將下載包內的UwaDataUploader.exe程序就是用於提交數據的。
首先配置一下config.json文件,填入UWA的用戶名,密碼和第一步創建的對應項目名。接下來執行命令執行上傳。
Windows
UwaDataUploader.exe "./UwaScan"
類Unix
mono UwaDataUploader.exe ./UwaScan
我這兒的環境是Mac,因此要事先安裝mono環境,去mono的官網下載MonoFramework-MDK-6.6.0.166.macos10.xamarin.universal.pkg安裝即可。

4、查看報告
刷新UWA網站的本地資源檢測頁面即可查看最新上傳的報告記錄。官方會將歷史檢測記錄進行圖表化對比,有助於開發者瞭解迭代的進度情況。


二、報告分析

1、代碼掃描檢測
目前代碼掃描檢測項比較少,可以看到檢測出代碼中有2個空的Update方法,24個OnGUI方法的調用。

 

事實上平時我們開發時已經很注意這些空方法的移除工作,但實際還是會有遺漏,經過調查2個空Update方法對應到一個漏掉沒改的和一個正在開發中的類。當項目代碼規模到一定程度後,很難通過人工去做排查了。

OnGUI方法發現主要集中在於編輯器插件,因此需要後期使用工具排除檢測目錄功能將絕大部分排除掉。

 

經過修改後,只留下了一些必要的OnGUI方法調用。這一塊基本就過了。

2、Editor設置檢測
這塊的檢測項目前也很少。由於前期已經完成了設置,因此一次就過了。期待以後有更多的編輯器設置項檢測來幫助開發者。

 

3、場景檢測
這部分檢測是和場景有關的,因此不要忘記切換場景標籤來查看不同場景的檢測結果。

 

由於我們採用簡單場景+預製體運行時載入的方案,實際上場景內並沒有多少內容,因此也是快速通過。

部分場景的確需要有霧的設置,因此即使這項未通過也是在預期內。

 

第一次檢測發現有好多測試用場景也被包含檢測了。重新配置了檢測選項, 將scan_scene_mode改爲buildonly以後,只檢測打包的場景,就減少了不必要的信息。

4、項目資源檢測
項目資源檢測是重點,也是問題最多的地方。

4.1 首先來看貼圖相關,首次檢測:

 

1)發現很多過濾模式用Trilinear的,其實都是來源於第三方插件中使用的貼圖,因此進行排除以後就沒了;
2)一張純色紋理是用於做特效的,有特定用途,因此也可以忽略;
3)尺寸大於1024的貼圖絕大部分是UI的圖集和大背景圖,有合批的需求,大部分進行保留,但是也發現了有優化的餘地;
4)非壓縮格式中的9成也是來自於第三方插件自帶的貼圖資源。實際遊戲中不會用到。少量的得以修;
5)Wrap爲Repeat的基本上是用於特效的貼圖,有UV動畫的需求,因此需要設置成Repeat。

優化後基本都在可控範圍內了:

 

過大尺寸的貼圖會持續關注,UI後續根據式樣修改還會做一些合併和拆分,因此失敗數量應該還會進一步減少,美術後續對特效用途做一些梳理,但是優化空間不大了。

4.2 網格,首次檢測:

 

58個開啓了讀寫選項的網格基本集中在遊戲場景中的Obj,以及特效中使用的面片。由於前期項目中使用了運行時貼花系統,需要開啓場景中物體的讀寫來進行計算,後期系統移除以後這些選項都沒有重新設置。這次都一起發現並優化了。

UV2主要是場景模型在使用,因爲需要進行光照烘焙,和UWA聊了下,這塊作爲檢測標準有待商榷,畢竟因爲烘焙而開啓UV2可以說是比較正常的。後期官方可能會改爲檢查UV3。

包含Color屬性的Mesh發現全部是用於特效的,已經安排美術排期修改。這兒要說一下的是,可以通過導出單項的CSV,將需要修改的對象列表發給其他組員,這個真是非常方便的!

Normal屬性主要是角色使用,要參與渲染效果計算,因此要保留,只優化了少數幾份。
Tangent用不上都關閉了。

 

Mesh的面片數其實絕大部分都在原規劃內,並且相比而言優化材質和進行合批更有效果,因此暫時不動。

結合之前貼圖的問題以及後續的檢測,都可以看出項目中特效相關資源還管理不足,有很多需要優化的地方,那麼這次資源檢測的工作對我們後2周的工作安排是很有幫助的。

4.3 材質

 

對比優化前後,可以發現這塊的優化進步很大。包含空紋理採樣的材質很多,檢查發現是相當多的物體或者特效使用了同一個材質Shader來進行渲染,但又不是每個採樣都用到,這樣做提高了材質的共用性,有更多的合批機會,美術製作時也方便不少。

但的確也會提高一定的GPU負擔。於是創建了一個新的Shader,提供相類似的渲染並剝離了不需要的貼圖採樣。將大部分空紋理採樣問題修正,但是同時也提出一個新的疑慮,可能會有一組物體本來是同一個材質,只是參數不同,雖然之前也沒有合批的機會,但是現在變成2個材質,切換材質的成本是不是更高了呢?還是要待後續進一步檢測性能。

包含相同紋理採樣問題,除了一個材質有特殊需求外,其他都得以優化。
包含無用紋理採樣其實是材質切換Shader以後,原來一些使用到的紋理遺留在了材質文件內,Unity並沒有去除。這個就很容易優化掉了。

4.4 動畫的檢測結果有點出乎意料的。
我們的帶動畫的角色模型導入的時候會自動進行處理。已經進行了剝離scale和降低精度的操作。經過檢測發現居然沒有效果。

 

原來我們忽略了FBX文件本身是隻讀的。導入時的處理其實並不能被保存。造成我們自以爲進行了的優化實際上並沒有發生。如果沒有這個檢測工具我們可能一直不會發現。

通過將FBX內動畫拷貝出並關閉FBX的動畫導出,重新關聯動畫Controller以後優化這些問題。
考慮到很多特效動畫實際上需要對面片進行縮放操作,不能剝除Scale,因此將精度控制和Scale剝除分到2個不同的處理腳本。對所有動畫進行批量降精度,只對角色動畫進行移除Scale。

4.5 預製體及粒子系統

 

我們修改了角色預製體自動生成腳本,去除了MotionVector的勾選。
有不少粒子特效使用到了幀動畫,因此紋理尺寸就降不下來。在不影響表現的前提下,對少部分紋理縮放到256以下。

除一個使用了特殊Spring系統的角色外,其他角色動畫都開啓了OptimizeGameObjects,但是還是檢測出很多未開啓。進一步檢查後發現主要還是集中於特效動畫或者是一些鏡頭動畫,開始還未發現在哪兒可以關閉,經網友提醒找到了設置的地方,夠隱蔽的。然而是灰色,並不能被操作。

 

那麼檢測工具是否能通過Animator.hasTransformHierarchy或者Animator.isOptimizable去判斷是否能進行優化,無法優化的從報告中排除。


三、小結

團隊的客戶端人員使用本地資源檢測工具後,異口同聲地表示:“方便”。很容易找出項目中資源的各種不足並加以修改。

雖然不少優化項和需要注意的地方其實大家都是清楚的,並且也做了不少檢查和優化工作,但是仍然會有很多點被遺漏。這幾乎是避免不了的。然而該工具可以幫我們兜底守住這一道門。即使到最後很多雖然未通過,但是屬於項目特例項的羅列,也能讓我們清楚地跟蹤它們,就算優化不了總比不知道它們的存在而失控要好。另外檢測結果表明至少接近一半左右的檢測項是一次通過的,也從側面肯定了團隊之前的開發工作。

如果在項目開發的早期就引入該工具,並且貫徹整個開發期間持續使用,我們可以進一步節省很多時間。

對於該工具的使用我覺得不能僅僅是項目後期對檢測失敗的具體資源進行修改這麼簡單,而是要初期設法針對每個檢測項去設計項目特定的工作流和工作流工具。要將本地資源檢測工具當作項目工作流的檢測工具,而不僅僅是資源檢測工具。而工具報告中的一些閾值則可以當作項目資源的參考標準和規範。

另外雖然日常我們都知道要注意各種規範和優化,但是大量業務需求下往往會一拖再拖,然而現在有了詳細的報告,於是也有了一種推動力和理由去暫時停一停追趕進度的腳步,好好做一些優化工作再上路。量化的數據也更容易說服項目管理者或者公司上層去調整進度和計劃。


後記

本地資源檢測工具是可以通過uwascan_ruleconfig.json來配置檢測項的,對於程序員還好,但是如果是QA組或者非技術人員參與排查就不方便切換了。於是我自行製作了對應的設置界面來操作切換配置。官方以後也肯定能提供更好的操作界面讓大家更加便利地使用各工具集。

UWA本地資源檢測:https://v.qq.com/x/page/n095355qglz.html

最後,工具還在免費期,大家趕快用起來,不要錯過咯!!

登錄UWA 本地資源檢測

 


UWA想開發者所想,急開發者所急,爲了更貼合用戶的需求,在此徵集下一波功能建議。歡迎在UWA公衆號留言或是私信QQ:289422269,我們會評估並適時地在之後的研發計劃中落地。

建議收集貼
1、對於現有的Editor設置檢測規則,有很多用戶爲我們提供了很多有用的建議,因爲大家對這個點關注的比較多。在此我們希望放到更大的一個層面,徵求大家在工作中還有哪些針對Editor設置的內容,從而希望我們UWA能幫助解決的呢?

 

2、請大家暢所欲言!我們UWA目前提供的這些檢測規則是根據我們多年優化過程中得出的經驗而制定的,我們也希望能不斷打磨完善,從而更貼近研發團隊的需求,所以你是否也希望在資源檢測中增加某些新的規則呢?即使是一些比較特有的規則,歡迎私信QQ:289422269提出你寶貴的意見。

感謝大家的參與,每一個真知灼見,我們都會用心對待。期待未來我們的不斷成長也能成就廣大研發團隊的不斷卓越。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章