NGUI界面Drawcall優化

遊戲發包了,界面的卡頓成了一個問題,美術資源上是節省不下來了,所以導致圖集的合併工作也幾乎到了不可能優化的地步了,查看了一下drawcall,確實很嚇人。於是就來分析一下,哪裏造成的卡頓。
最爲一個實用文檔,先來講述一下原理,再來結合工具調整,最後將這項工作以指標的形式下發給排界面的人員,恩就這樣開始吧。
    首先的幾個概念我就不解釋了:NGUI、Panel、圖集、drawcall、動態字體、深度值、渲染,不明白的童鞋自己搜索吧。
    界面渲染的原理:
    NGUI把界面元素排布在3D片中展現在攝像機的前面來完成界面的顯示,經過引擎的優化,會把界面中引用一張圖集的片綁在一起進行一次渲染。這就是一次drawcall,這就是一個性能的指標,那麼結論就是drawcall數越少性能越好。
    然後有幾點是需要注意的:
    1. 一個界面使用的圖片儘量打到一個圖集中去。那麼界面的設計就會直接影響性能。畢竟1個圖集就會使drawcall + 1.
    2. NGUI的界面drawcall計算是以Panel爲獨立單位進行計算的,就是說如果兩個Panel都顯示出來,深度設置得不同那麼即使兩個Panel實用的圖集是一樣的,那麼drawcall也不會節省。
    3. 動態字體會對Panel的深度造成影響,這個可以結合後面的工具逐步調節來看。
    4. 動態字體的字號會造成動態字體的drawcall增加,多設置一個字號就會增加一個drawcall。(畢竟動態字體是把字渲染在圖片上來完成渲染的)
    我們所能依賴的工具:
    1. NGUI -> Normalize Depth Heirarchy 正常化深度結構工具。
    2. U3d中自帶的Profilter界面能直觀地看到所使用的drawcall數。
    3. 點擊Panel,Panel下有個組件叫UIPanel,點擊按鈕 Show Draw Calls,上面會羅列這個Panel所使用的Drawcall都是什麼,引用了哪個圖集。都哪個物體使用了,這裏我們優化掉個數較少的就行了。
    最後的指標:
    1. 一個顯示Panel的drawcall數不要超過5
    2. 一次性不要顯示多個Panel
    3. 確保Panel的深度不重複
    4. 如果組件不移動,設置爲靜態
    這裏不就動態字體做過多描述,純屬一個搗亂分子,本來設計的好好的界面加入一些字體就會亂七八糟,那麼這也是考驗拼界面人員的耐性和靈活思考的能力的地方了。 :)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章