Unity3D – 效能快速優化的10種方法

簡介

在效能檢測初階版與中階版所提到的Editor中的觀察各個Window所提供的資訊後,必須了解有哪些方法來讓效能有優化減少,進而在Window呈現出數值或圖表有變化。此篇會分做直接從Editor原件或Setting中做調整與從程式方面著手。

從Unity Editor著手

1. Quality Setting :

Edit -> Project Setting可以開啟如上圖的視窗,我們先看到Quality,這部分主要是是在調整場景中的Rendering,我們先看到視窗上方有個『 Levels 』,這邊是類似將參數黨歸納成不同的階級,在HDRP環境下,預設值只會有一個Normal levels,但在Standard環境會有預設Very Low , Low , High , Ultra等等的預設值,但HDRP環境也可以自行新增,只要下方參數調好之後按下”Add Quality Level”即可。而Levels旁邊有一些Device icon,代表的是這個Quality Setting是否要Enable在某些裝置。
而下方比較會優化效能的可以調整,Texture Quality , LOD Bias與Max LOD level。

!『 Texture Quality 』選擇以 (Texture Resolution) 最大分辨率還是以最小分辨率顯示紋理(較低的分辨率會減少處理開銷)。選項包括全『 分辨率,半分辨率,四分之一分辨率和八分之一分辨率 』。這選項是可以最直接反映出FPS的數值優化效果。

前提是你場景中有任一物件有使用LOD Group時,『 LOD Bias 』『 Max LOD level 』設定值才有反應,設置為從0到+無限大的分數。當它設置在0到1之間時,它偏愛較少的細節。設置為大於1則表示需要更多細節。而Max LOD level,設置遊戲使用的最高LOD。有關更多信息,請參見最大LOD級別。但上述的LOD也是要看你物件所設定LOD階層。

最後要說的是Shadows的『 Shadowmask Mode 』,這功能是要搭配『 Lightmap Setting 』所bake場景陰影所融合realtime的陰影做交疊,用意是要省下Shadow造層資源Batch加倍的耗能,假如設定的好可以直接使用Bake的Shadow。
假如需要知道更多詳請可以到官方網站查看。

2. Player Setting :

延續在Project Setting中的『 Player Setting 』,我們可以看到兩個地方可以優化的設定。
!Color Space,在HDRP模式下或是有使用到Post Processing的套件下只能使用『 Linear 』線性的計算,但這會比較好效能,但也沒辦法還是要使用此選項,只是在此提起一下。
!Static Batching,請把此選項打勾,這功能是要將場景中有勾選Static的物件進行靜態的Batch處理,會節省很多效能,這在下方會提示要怎麼讓物件近態化。在之前的版本有多一個Dynamic Static,動態批次處理,但目前這功能已經去除了。
Optimize Mesh Data, 啟用此選項可從網格中刪除應用到其上的材料不需要的任何數據(例如切線,法線,顏色和UV)。

3. Static Object :

!繼續延續上方的『 Static Batch 』選項勾起後,必須選取場景中的物件,可以看到上圖Inspector視窗的右上方有個『 Static 』按鈕請勾選。而在Static選項中有許多的Static Layer,看你哪些有應用到的功能不需要Static的請取消勾選(因為Static後有些功能是無法使用的,例如靜態話後,在場景中是無法作動的)。

4. Object Lod Group :

!在場景中好效能數一數二除了光線、特效之外,再來就是模型+材質檔案了,想要進一步省資源必須將物件套上『 LOD Group 』,你的模型與材質也需要製作多組來套用。如上圖,怎樣看LOD效果有實現在自己場景中?可以拉動Inspector -> LOD Group中的攝影機,並同時對照物件下方的lable變化與物件變化即可。

5. Texture Render Reduce :

!這個就是從單獨Texture著手,在上方Quality Setting中也可以設定全Project中的材質解析度,而這邊是要單獨設定並進階設定貼圖的設定。較重要的是必須把『 Read / Write Enabled 』不要勾選,不需要額外調用資源在單一材質的讀寫。接著可以看上圖下方紅框框處,調整Texture的Max Size也是最大解析度的條整),『 Format 』最省資源的是用16bit格式,既不失真也不太消耗資源。

6. Light / Shadow Control :

!在場景中光線是非常重要的元素,有光才有影,但光影的計算會讓DrawCall呈現double的數值,當然假如使用bake shadow是最好的,但也要Bake好才不會太假。而上圖的紅色框框處要關閉Shadow的選項在此,『 Enable 』勾選取消時,影子也會消失。

7. Camera Rendering Path / Clipping Planes :

!Camera Rendering Path,在舊版的(無HDRP環境下)通常這功能掛載在Camera中,使用舊版的朋友可以直接去Camera調整。而上圖則是在HDRP環境下,位於HDRP – Graphic Setting中,可以到Project Setting -> Graphic -> Scriptable Render Pipeline Settings,在檔案中的Rendering -> Lit Shader Mode選擇到『 Deferred Only 』即可。

!Clipping Planes,此功能用意在Clipping Planes的攝影機擷取範圍(Near – Far)之中,會呈現場景物件的Render效果,所以假如要節省效能,可以將此範圍縮小,越小越好(但還是不要影響你遊戲畫面的呈現)。

8. Mesh Collider :

在Unity中,我們時常會用到Collider,但我們最好不要使用到『 Mesh Collider 』,因為他會根據模型進而產生很多的Collider Mesh,不像單一的Box Collider等等不超過10面的Collider。

9. FBX Setting :

!取消 『 Read/Write Enabled 』,通常不需要讀取寫入,Unity 預設值啟用主要是要給 Mesh Coliider 使用,開啟開功能將消耗大量記憶體。
!『 Normals + Tangents 』,假如都沒有使用到的話都請把這幾項關閉,在上圖有一個Optmize Mesh可以把選項選成Everything。

10. SRP Batcher :

! SPR批處理器(SRP batcher),是一種Unity引擎的新型內循環程式,它可在不影響GPU效能的情況下加速CPU渲染速度,它替代了傳統的SRP渲染程式。
使用PBR的遊戲常常會有很多物件和網格,物件上不同的材質共享著相同的Shader和Shader keyword。SRP批次處理器幫使用PBR的遊戲提供了很大的CPU速度提升。

小結

各位使用Unity好手們,假如有遇到效能上的問題,可以先看看這篇,快速提升效能的10種方法,就像一帖小良藥,請服用。而在之後會更鑽研較複雜且較難的優化方式。其實還有很多優化與設定方式我們在未來可以再繼續研究並分享給大家。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *