天天看點

深入UGUI Mask元件原理和性能深度優化

作者:侑虎科技

對于一款遊戲UI系統必不可少,UGUI是現在項目組中實作UI系統的大多數解決方案,使用廣泛。UGUI提供的元件很多,外部很多廠商也提供了很多UGUI的第三方插件,而用戶端開發人員往往過度關注項目進度實作功能,對各個元件僅僅停留在“會使用”這個基本層面上,并沒有對元件本身的實作原理、優缺點以及性能方面做深入了解。

該課程以性能備受争論的Mask元件為例,從Mask元件的實作原理入手,深入到CPU、GPU和GC上Mask産生的影響,然後給出解決方案,最後給出在UI上使用3D模型,如何使用Mask原理對其進行遮罩處理。

1. Mask元件實作原理以及存在的問題

2. Mask元件的性能以及優化(CPU、GPU、GC)

3. 如何用Mask元件來給3D Object做遮罩

作者于洋,Unity技術專家、引擎組組長。曾就職于人人網、Kabam、競技世界。從事遊戲開發十餘年,經曆了從Flash到Unity的遊戲開發過程,長期從事遊戲渲染和性能優化相關工作,對PBR、雲、霧、地形、URP管線等有深入研究,曾參與過《Legacy of Zeus》、《荒島求生》、《mythwar puzzle》等遊戲的渲染和性能優化工作,樂于分享渲染和優化的相關技術。

目錄

1|概述

2|Mask元件實作原理以及存在的問題

3|Mask元件的性能以及優化

4|如何用Mask元件來給3D Object做遮罩

5|結論

本篇轉載自《深入UGUI Mask元件原理和性能深度優化》UWA學堂 | Unity和Unreal遊戲引擎的從業者學習交流平台的第1節。

1|概述

遮罩不是一種可見的UI控件,而是一種修改控件子元素外觀的方法。遮罩将子元素限制(即“掩蓋”)為父元素的形狀。是以,如果子項比父項大,則子項僅包含在父項以内的部分才可見。

擁有Mask元件的UI控件,可以限制其子對象的顯示範圍,即當子對象的顯示範圍明顯大于父對象的顯示範圍時,遊戲視圖就隻顯示父對象範圍内的子對象,其他部分自動隐藏。

我們在Canvas下面建立一個2D UI Image,選擇一個帶有形狀圖案的Sprite,在該物體上Add Mask Component,這樣,它就變成了一個遮罩物體。以該物體作為父對象,在其下面建立一個2D UI Image作為子物體,選擇一個Sprite,這樣就完成了一個簡單的Mask元件的使用,結果如下圖:

深入UGUI Mask元件原理和性能深度優化

注意到Mask元件裡有個選項“Show Mask Graphic”,官方的描述“是否應在子對象上使用Alpha繪制遮罩(父)對象的圖形?”

深入UGUI Mask元件原理和性能深度優化

​意思就是是否繪制出Mask元件上的Image圖形,如下圖:

深入UGUI Mask元件原理和性能深度優化

​勾掉後,就不會再繪制出該Image,具體有關的性能問題,在後續會詳細讨論。

以上基本介紹了一下UGUI Mask元件以及最基礎的使用方法,在使用方法上,大家作為Unity的開發人員肯定是特别熟悉。

但是在實際遊戲開發中,我們不僅僅要關注于項目的功能開發進度,如果遊戲的性能不能滿足要求,經常出現卡頓、閃退等問題,使用者體驗嚴重下降,就算開發出再好的遊戲玩法也沒辦法滿足玩家的體驗需求。

性能優化是遊戲項目開發中一個重要且必須的元素。而即便在硬體裝置高速發展的今天,随着使用者和項目的需求的持續增長,對遊戲特效、畫質、高度複雜且真實的場景的需求也在逐漸榨幹硬體性能,無論大公司還是小公司,無論研發團隊有多麼豐富的開發經驗,性能優化這件事永遠是一個非常棘手而又無法繞開的問題。

那麼我們在進行遊戲開發的時候,對項目中所使用到的元件、庫、插件、Unity built-in的功能的過程當中,要時刻警惕其性能問題:有沒有給項目帶來嚴重的性能下降?如果出現了性能下降了,是由于使用了哪個功能導緻的?有沒有其他的方案可以作為替代?

Mask元件就是其中之一,我們在使用的時候要不斷地進行性能評估。

你是否在實際開發中有過下面幾個疑問:

1.在使用了Mask元件之後,DrawCall為何增加特别嚴重?這些DrawCall的來源是哪裡?

2.使用Mask元件做遮罩的視覺效果其實并不理想,有鋸齒?

3.網上說的使用Mask元件的子對象沒辦法和外界做合批處理,低層的原因是為什麼?

4.如何對Mask元件進行優化以滿足自己項目的性能要求?

接下來的章節會一一詳細解答這些問題。

以上就是《深入UGUI Mask元件原理和性能深度優化》UWA學堂 | Unity和Unreal遊戲引擎的從業者學習交流平台的第1節,此篇文章比較适合從事遊戲開發的Unity用戶端開發人員、希望提升渲染和性能優化能力的人以及對性能優化感興趣的同學。

讀完全篇後你會深入了解UGUI源代碼和實作邏輯,并掌握Mask元件對模闆緩沖區的使用。

作者的另一篇文章《移動端GPU性能深度優化分析》也同時上線,組合購買僅需19.9元。「連結」

繼續閱讀