空間劃分及可見性算法【三】

前面討論的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叉樹等場景管理,才能使效率很高。

 

 

到此爲止,關於空間劃分和可見性算法基本介紹完畢。後面會結合具體引擎,關於該專題進行深入分析,並對以前留下的問題進行闡述。

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