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

2021-10-07 09:38:30 字數 981 閱讀 4619

在圖形渲染中有乙個很大的敵人就是渲染不必要的多邊形,比如處於背面的三角麵片。拿起一本數,無論你怎麼看最多也只能看到書的三個面,有的時候只能看到書的乙個面。看不到的面我們完全可以把它剔除掉,這門武功就叫做背面剔除。

如果是軟光柵化,背面剔除通常在世界空間或相機空間中做,演算法很簡單如果平面的法線和視向量(平面上的乙個點到視點的向量)的夾角小於90度那麼這個三角面就是正面,否則是背面。這裡的背面剔除只和平面法線及相機位置有關,與相機的朝向無關,也就是說即便背面剔除測試通過,這個三角麵片也有可能不被渲染,比如它根本就沒有在視錐體內。

現在的背面剔除都是gpu來做,背面剔除發生在頂點變換之後,光柵化之前。為什麼不在頂點變換的時候做呢?因為頂點變換階段vs輸入的都是點資訊(方便gpu平行計算)這時候還沒有圖元資訊,所以無法做背面剔除。光柵化階段的輸入是圖元資訊,因為我們需要根據圖元做螢幕空間裁剪和以及線性插值。在螢幕空間中如何做背面剔除,這個是根據三角形三個頂點的繞序。比如dx預設情況下順時針繞序是正面,逆時針是背面。當然我們也可以通過改變渲染狀態,把它顛倒過來。繞序也就是三角形兩條邊叉乘得出的法向量是正是負。

上圖代表了兩種背面剔除的演算法,如果按逆時針是正面的化,藍色的多邊型是背面。視空間中a是背面,因為夾角大於90度。

背面剔除可以開啟也可以關閉,unity在shader中設定,圖形api可以通過渲染狀態設定。

我們在乙個立方體內部向外看,往往是看不到立方體的,因為背面剔除把立方體的面都剔除了。3d模型的法線都是朝外發散的,所以我們在模型外面看模型是沒有問題的。或者說3d模型的麵片的繞序是保證在外面看是正面的。

要想在裡面也能看到模型,關閉背面剔除。

單面多邊形和雙面多邊形的區別是什麼?雙面多邊形怎麼看都不會被剔除。

單面多邊形想不被剔除,又不想關閉背面剔除,怎麼辦,上billboard哈哈哈。

圖形渲染中的知識點太多,必須徹底理解每乙個知識點才能靈活運用。

遊戲場景測試

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

遊戲場景管理(六)BVH

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

遊戲場景管理 四叉樹

內容會持續更新,有錯誤的地方歡迎指正,謝謝 場景管理 把不同的物體歸屬到不同類別裡,而相似性的判斷是根據物體的空間相干性。把物體分類的目的 希望下次能快速找到所需的物體,所以更偏向於用四叉樹來管理我們的場景,因為四叉樹構建了這樣的乙個快速索引。四叉樹 設想乙個二維平面,我們可以先把它按田字形劃分為四...