Unity3D – 效能優化- Occlusion Culling

簡介

當我們在製作有大量物件與效果場景時,可以使用許多方法讓讓系統資源減少資源,例如將物件LOD、在Player Setting系統中的參數設定、編輯程式碼來清除CG、光影設定等等。而這篇我們要來說說Occlusion Culling,什麼是Occlusion Culling?!官方說明的是當你場景中當前的攝影機所照射到的範圍是正常顯示(Rendering),但是沒照到的即暫時的Disable掉,因此可以省下不必要的資源(因為看不到)。那下面就讓我們來實作吧。

環境設定

我們要做實驗之前必須要有個場景讓我們來應驗,大家可以上Asset Store下載免費的package,而打開場景後我們可以看到場景中的Main Camera,他是這篇功能的第一配角,我們可以調整他的Feild of View來取決Occlusion Culling的不剔除的範圍。如下圖

Occlusion Culling Window Setting

到Window->Rendering->Occlusion Culling開啟設定的視窗。打開之後可以看到如下圖的三個選項,這邊來解釋一下這三個選項個別有什麼樣的功能。
1.Object:這裡的選項是在設定你需要Occlusion Culling場景中的物件。
2.Bake:這裡的Bake是由於你選取好要Occlusion Culling物件後,系統需要計算每個物件的細節而需要Bake。
3.Visualization:這邊就是你直接在Play Mode時他可以即時在Scene場景中看到Occlusion Culling Bake過後與場景中物件成像的功能,讓你方便做OC的Debug。

選取要OC Bake物件的方法

Unity提供了三種方法可以讓使用者選取,我們來分別說一下限制與使用方法:
All:當你選到All的時候不代表你已經完成所有設定可以Bake了,我們看一下下圖,點下按鈕後我們會發現什麼也沒發生,這邊比須選擇你場景中想要Bake的物件。假設你已經選取物件後並看到Inspector(檢視、巡邏者)的右側如下圖紅色框框下拉選項,選取Occluder Static與Occludee Static這樣Occlusion Culling功能才可以進行Bake。

Renderers:點選此按鈕時在下圖紅色框框處會列出場景中所有的物件,假如你分得清楚的話可以使用這方法來進行選取,選取完後他會在Occlusion Culling視窗中該物件會有兩個選項讓你打勾,其實方法跟上一步All差不多,但個人比較建議適用All或是Occlusion Area比較好用。

Occlusion Area:這功能是Unity Occlusion Culling提供了範圍Occlusion Area,假如你設定此範圍功能,系統僅會Bake你所設定的範圍,此功能可以設定許多的Area。下圖一請點選Occlusion Area,在下方會有個Create New點選他。
在下圖二會出現Area的細部參數可以調整,請調整Area的大小位置來限定你要Bake的區域。

Start Bake Occlusion Culling Object

點選到Bake選項,下方會出現三個參數需要調整。
Smallest Occluder:遮擋剔除時將用於隱藏其他對象的最小對象的大小。小於此大小的任何對像都不會導致被它們遮擋的對像被剔除。例如這邊的預設值是5,單位是公尺,在五公尺以下的物件都不會被剔除,大於則反之,所以假如要剔除的更精細數值可以小一點。
Smallest Hole:該值表示應該看到照相機的幾何圖形之間的最小間隙。如果場景中的裂縫很小,相機應該可以看到,則“最小孔”值必須小於間隙的最窄尺寸。數值越小剔除的更精細。
Backface Threshold:Unity的遮擋使用了數據大小優化,可通過backfaces來減少不必要的細節。這個值最好的效果設定為100。

當以上的數值都設定妥當後,可以看到很不起眼的下方有個Bake按鈕,系統直接進入Bake模式,如下圖二,請靜待數分鐘(假如你細節設定很細的話)。

Visualization

可以看到你的Scene視窗下方有個Occlusion Culling小工具列,其中有三個選項可以選擇,他們個別代表你可以檢視當前Occlusion的狀態,有Camera Volumes、Visibility Lines、Portals。
Camera Volumes會顯示黃色的框框,代表攝影機的所在與他的體積。
Visibility Lines會顯示綠色的射線,它代表著攝影機所照射到的範圍。
Portals會顯示白色框框,代表的是你場景中的物件有被Occlusion Culling Bake過,他會搭配著Visibility Line做一個互動效果,假如有重疊到的Portals Object則會顯示。

小結

優化的方式有很多,但這是好用且易用的功能,可以看看下方展示的動畫,在未來我們會提供更多的優化Unity的效能,大家可以看自己適合哪些優化的功能而選用之,這篇就到這了。

Reference:https://docs.unity3d.com/Manual/OcclusionCulling.html

發佈留言

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