遊戲場景管理 四叉樹

2021-08-18 02:14:31 字數 1164 閱讀 8400

內容會持續更新,有錯誤的地方歡迎指正,謝謝!

場景管理:把不同的物體歸屬到不同類別裡,而相似性的判斷是根據物體的空間相干性。

把物體分類的目的:希望下次能快速找到所需的物體,所以更偏向於用四叉樹來管理我們的場景,因為四叉樹構建了這樣的乙個快速索引。

四叉樹:設想乙個二維平面,我們可以先把它按田字形劃分為四份,如果這四份子空間中,存在不包含任何物體的子空間,那麼我們就標記一下,然後在包含物體的子空間,繼續劃分為四個子空間,以此類推,這就是四叉樹。轉換到三維空間,我們可以把空間切分成八份,就是八叉樹。

上圖中,每個節點對應乙個平面區域,每一層的區域大小相同。

圓形代表該區域存在物體,且有四個子區域

白色正方形代表空間中存在物體,已經不需繼續劃分 或 已到最大深度。

黑色正方形代表空間中不存在物體。

四叉樹的應用:四叉樹並不僅針對二維的遊戲場景上,還可以:

廣泛應用於三維室外場景管理(只考慮三維場景中的xy軸即可)

地形渲染剔除機制

根據四叉樹只繪製玩家周圍物體,或者,使用lod技術

動態載入遊戲物件

詳細應用請見:

對於乙個有很多物體的3d場景來說,渲染這個場景最簡單的方式就是用乙個list將這些物體進行儲存,並送入gpu進行渲染。但這種做法在效率上來說是相當低下的,因為真正需要渲染的物體是視椎體內的物體。除此之外,從裁剪演算法和碰撞檢測等演算法的效率來說,使用這種資料結構也是相當低效的。優秀的方式是使用具有層次結構的空間資料結構儲存待渲染的物體,也就是場景管理還能用:

bvh(包圍體層次結構)

bsp(二叉空間分割)樹

四叉樹八叉樹

模糊k-d樹

在進行空間查詢或者剔除的時候將時間複雜度從o(n)降低到o(logn)。當然,對應的代價是每幀更新的時候,需要更新對應的空間資料結構。

虛幻4用的bsp

《天涯明月刀》也用的bsp

國產mmo基本都是地形一套管理機制,室外四叉樹、八叉樹,代表遊戲《誅仙》

遊戲場景測試

在拿到了正式美術資源之後,首先關心的就是場景的尋路和碰撞問題。尋路是遊戲中人可以行走的區域,碰撞是場景中得物體所佔的空間。對於這2個問題,不同的遊戲有著不同的處理方式。有的是服務端有乙份資料,客戶端生成乙份資料,然後2份資料進行對比就可以很方便的找出不一樣的地方。但是我們的遊戲不是這樣做的,美術在做...

遊戲場景管理(六)BVH

bvh和空間劃分技術不同,它並不是通過切割空間來管理場景中的物件。它是通過將物體分堆,然後在其上面包裹一層bv,達到管理場景的目的。樹的根節點是乙個能夠包裹全部物體的bv,而樹的葉子節點可能只是乙個物件的bv,如下圖 bv可以選擇aabb,obb,包圍球等等,往往包裹性越好的bv,相交測試越複雜,但...

遊戲場景管理(三)背面剔除

在圖形渲染中有乙個很大的敵人就是渲染不必要的多邊形,比如處於背面的三角麵片。拿起一本數,無論你怎麼看最多也只能看到書的三個面,有的時候只能看到書的乙個面。看不到的面我們完全可以把它剔除掉,這門武功就叫做背面剔除。如果是軟光柵化,背面剔除通常在世界空間或相機空間中做,演算法很簡單如果平面的法線和視向量...