場景檢測:霧效、Canvas和碰撞體

隨着近期的文章《特效優化2:效果與性能的博弈》發佈,常見的主流項目資源檢測規則的知識點講解就暫告一段落。在此也歡迎大家集思廣益,讓我們一起將日常開發中可能會遇到的知識點彙總起來,方便大家避開性能深坑。

今天,我們將聚焦UWA本地資源檢測中和場景相關的檢測規則:“移動端場景霧效檢測”、“UI子節點數過多的Canvas”和“檢測場景中的MeshCollider”,和大家一起探究在“場景”這個角度下值得關注的知識點。我們將力圖以淺顯易懂的表達,讓職場萌新或優化萌新能夠深入理解。

1、移動端場景霧效檢測

關於霧效我們不難理解:Unity爲開發者提供了一種霧狀效果的簡單模擬,它能使得場景中離鏡頭較遠的物體呈現出一種朦朧、如同現實中被霧遮擋而逐漸隱蔽的視覺效果。

霧效的應用很廣泛,但大部分都是服務於場景中的視覺效果:比如模擬自然界的霧以渲染場景環境;或者以霧的視覺侷限性來限制鏡頭的觀察範圍,以達到場景元素出現時的突然性等。配合不同的環境場景需求,項目對霧效的要求也不盡相同。

Fog的開啓與否是針對於每個場景的,可以通過代碼設置,也可以在Window->Rendering->Lighting Settings窗口中設置。

各項參數中比較重要的是Fog Mode,內含Linear、Exponential和Exponential Squared三種模式,簡單來講可以理解爲霧效的三種不同計算方式,在此我們就不展開細說了。

本條規則着眼於視覺效果和項目性能的平衡考量。場景開啓霧效,那麼GPU的渲染壓力勢必會增大。而且依據霧效設置和計算方式的選擇,相關的性能開銷會佔到項目總消耗中的相當一部分比例。

此時開發團隊就需要考慮目標羣體的機型性能。如果霧效開啓帶來的視覺效果的提升,不足以彌補在目標機型上由性能壓力導致的諸如卡頓、降幀、發燙等負面效果,那麼建議開發團隊對項目做減法,關閉相應場景內的霧效設置,以達到效果與性能的平衡。


2、UI子節點過多的Canvas

在Unity的UGUI系統中,只要使用到了UI組件,那麼就一定繞不開Canvas。顧名思義,Canvas就是承載UI元素的“畫布”。

Canvas比較重要的屬性設置有RenderMode和Pixel Perfect。渲染模式上有Overlay、Camera和World Space三種選擇,以決定UI與鏡頭間的距離以及Canvas的特性;而Pixel Perfect可以勾選以避免模糊。其他的設置特性我們就不在此贅述了。

在實際開發過程中,有時候開發人員會忽略性能問題,在一個Canvas下掛很多UI元素。由此帶來的影響是每次UI元素髮生變化時(如Enabled改變,長、寬或Color屬性的改變),CPU進行UI網格重建(Rebuild)的壓力都會比較大。

在此,大家可以參考UWA問答:
https://answer.uwa4d.com/question/5ec4d3d24d93790618e0eda3,已經有前輩爲我們做了更爲詳細的解釋與說明。

所以基於本條規則,在找出這些Canvas後,開發團隊要適時進行UI組件的分類和Canvas的拆分等操作,以降低CPU壓力,提高運行效率。


3、檢測場景中的MeshCollider

有別於我們的真實世界,在0和1的虛擬空間裏,宏觀物理法則無法對其中的事物產生影響。所以在項目開發中,我們需要用各種手段去模擬真實的物理效果,比如物理碰撞。

爲了使項目內的對象能模擬出更真實的物理交互,Unity爲開發者提供了一整套的碰撞體組件。

爲物體添加上相應的碰撞體後,相關的物體就會有一個“碰撞範圍”:只有當另一個物體進入到這個範圍內,纔會觸發這個物體的物理效果反饋。如圖,我們爲一個球體添加上了立方碰撞體(Box Collider),並且把碰撞體的範圍設置得稍大。

這種情況下,外界不需觸碰球體表面,只要接觸到了這個立方體範圍內,就會觸發對應的物理效果。簡言之,觸發範圍與物體本體並不完全等同。這種情況,在項目開發中的大部分使用場合下,多數是可以接受的,我們以犧牲對真實碰撞規則的部分擬真程度,換來更爲簡單與高效的碰撞計算和反饋。

但如果我們需要在項目中實現更爲精準的物理碰撞反饋,比如應用於不規則物體,那麼Unity預製的幾種碰撞體模型並不能很好地貼合到物體表面以實現精確的碰撞反饋,這時候就需要網格碰撞體(Mesh Collider)。

概括地說,Mesh Collider就像是一層皮膚覆蓋在物體表面,它會盡可能地將碰撞範圍與物體表面貼合,基於物體的Mesh數的不同,網格碰撞體的面數也會產生相應的變化。這種對碰撞機制的精準反饋,是以更復雜的碰撞計算和更高的性能開銷爲代價的。

所以,開發團隊在本條規則篩選出這些網格碰撞體後,可以根據自身項目的實際使用需求,把那些不需要高精準物理反饋的物體,選擇性地換用更簡單的碰撞體,從而降低物理計算開銷。


希望以上這些知識點能在實際的開發過程中爲大家帶來幫助。需要說明的是,每一項檢測規則的閾值都可以由開發團隊依據自身項目的實際需求去設置合適的閾值範圍,這也是本地資源檢測的一大特點。同時,也歡迎大家來使用UWA推出的本地資源檢測服務,可幫助大家儘早對項目建立科學的美術規範。

 

萬行代碼屹立不倒,全靠基礎掌握得好!

相關推薦

《UWA學堂訓練營|遊戲自動化測試》

性能黑榜相關閱讀

《那些年給性能埋過的坑,你跳了嗎?》
《那些年給性能埋過的坑,你跳了嗎?(第二彈)》
《掌握了這些規則,你已經戰勝了80%的對手!》

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