2020/02/15 初版撰寫
要理解遮擋剔除(Occlusion Culling)之前,要先理解攝影機渲染的原理,在基本三維渲染的狀況下,攝影機會由遠而近渲染所有的物件,並且用距離近的物件去蓋住遠的物件,這稱為重複渲染 (OverDraw)。
這邊要介紹Unity的兩種剔除手段,遮擋剔除 (Occlusion Culling) 與視錐體剔除 (Frustum Culling),這邊簡稱OC跟FC。
FC是以攝影機視野範圍為基準,只渲染在視野範圍內的物件,視野範圍外的會被剔除,此外Unity攝影機預設就已經開啟這個功能,不需要特別開啟。
OC是基於FC的功能追加優化的效果,Unity可以先烘焙整個場景上的Static物件,建立一格一格的單元格,這些單元格就會組成一個二叉樹供OC來做檢查,檢查的功能有兩種for靜態物件的View cells和動態物件的Target Cells
詳細的效果請看右圖
在屬性面板上的Static屬性中可以看到Static的各種屬性,要加入遮擋剔除計算的物件必須要勾選Occluder Static和Occludee兩種選項。
Occluder(靜態遮擋物):這個意思是會遮擋其他物件的物體
Occludee(靜態被遮擋物): 這個意思是毀被其他物件遮擋的物件
有時候有些物件太小基本沒有可能去遮擋其他物件,這時候就只需要勾選Occludee就好,反之也是如此,有些物件同時需要遮擋和被遮擋的功能,此時兩個都勾選即可。
大致上的概念為:大物件(Occluder) 中物件(Occluder&Occludee) 小物件(Occludee)
這些選項都分開的話可以加速烘焙的時間,當然也可以用暴力的方法直接全勾拿去烤也沒關係╮(╯_╰)╭
2019版本的參數已經跟5.5版本時不一樣了,變得更簡潔更容易理解了
Smallest:可以被剔除的物體的最小尺寸,如果物體小於這個尺寸,即使被遮擋了也不會被剔除。
Smallect Hole: 如果物體堆疊起來形成一個孔,或是這個物體本來就帶孔,通過這個孔我們可以看到後面的物體,這個引數的作用就是當孔的大小小於這個引數值時就會被忽略這個孔的存在,那孔後的物體就會被剔除。
Backface Threshold : 設定背景剔除的閾值。當值為100時就不剔除背景,當小於100時U3D對背景進行優化甚至去掉背景。
選擇場景上的攝影機就會出現右圖的選項,實際運行看看就可以知道當前渲染的物件有哪些
如右圖的狀況,因為模型全部都合併再一起使用,所以就算後面的模型沒有看到,也還是會被渲染出來,避免這種狀況最好還是將模型給分開處理比較好,而且分開處理的狀況下還可以使用批次處理來優化效能。