前面討論的BSP和Portal大多數情況會被用於室內場景的管理,更確切的說是在充滿分割面的場景中。在室外場景管理中一般會用到BHV(包圍體層次結構)或八叉樹(num_division = 2的一種特殊的BHV)。
關於如何創建BHV及如何遍歷BHV樹利用視椎體進行剔除就不在贅述了。但需要認識到以下幾點:
<1>BHV樹也是需要離線創建的。
<2>層數的限制很自由,至少有以下選擇:
(1)在節點的大小達到特定值時;
(2)在達到特定層數時;
(3)在每個節點包含的多邊形的數目達到特定值時;
<3>8叉樹比較常用,是因爲它能很好的模擬3D座標系有8個象限組成的特性。
最後,讓我們來探討一下OC(遮掩剔除):
在實際應用中,有時候不想使用有關可見性的靜態解決方案,因爲遊戲世界可能頻繁變換,PVS、BSP、BHV都不適合。
可喜的是,我們發現在遊戲中經常會有一些很大的物體,它們會遮掩大部分場景,這就爲OC提供了可能性。
OC技術的步驟如下:
<1>遍歷完全位於視椎體內的且可見的所有的物體,選擇n個最近、最大的物體。
<2>將物體投影到屏幕空間,並計算投影區域的面積。從中選擇m個投影面積較大的物體,然後計算每個遮掩物的內接矩形。
<3>將遮掩矩形加入到遮掩體中,然後根據遮掩體對所有多邊形和物體進行檢測,剔除所有被遮掩的物體。
下面是使用OC需要注意的幾點:
<1>可以離線選擇一部分遮掩物,在運行階段根據潛在的遮掩物進行選擇,速度會很快。
<2>一般結合BSP、Portal、8叉樹等場景管理,才能使效率很高。
到此爲止,關於空間劃分和可見性算法基本介紹完畢。後面會結合具體引擎,關於該專題進行深入分析,並對以前留下的問題進行闡述。