加速結構(加速光線與場景的物體求交)

把包圍盒分成很多個小格子,當小格子與物體表面相交時,就標記該格子。

當光線進入包圍盒時,就會不停的和一路上的小格子發生交互,如果小格子裏有物體,就判斷光線是否與物體交互,如果沒有交互則繼續前進,如果發生交互就記錄並返回。

由於在某些地方比較空曠,所以對空曠地區的劃分並不需要太細,對比較密集的區域才劃分細一些

 

 

使用KD-Tree來建立加速結構,建立KD-Tree過程

 

對包圍盒沿着軸方向進行劃分,中間節點不存儲物體,只在葉子節點存儲物體信息

 

 

在KD-Tree中查找光線與物體的求交,需要在光線前進的方向不停的與包圍盒檢測。

 

 

但KD-Tree有一個比較嚴重的問題。包圍盒中有些物體是與包圍盒有交集,因爲場景物體是由三角形構成,而很難判斷三角形與包圍盒有交集。

於是使用另外的一種加速結構BVH,它根據場景中的物體進行劃分,這樣就避免了判斷三角形是否與包圍盒有交集。

 

 

構造BVH的過程:把一個包圍盒切分成兩部分,重新計算這兩個部分的包圍盒,不斷切分下去,直到包圍盒內的三角形足夠少

 

 

怎麼樣對一個節點劃分,選取最長的那個軸,根據中位數進行劃分。

 

 

 

中間節點存儲包圍盒和指向子節點的指針,葉子節點存儲包圍盒和三角形

 

 

 

僞代碼:判斷光線與BVH根節點是否相交,如果不相交則直接返回,接着判斷相交的是否是葉子節點,如果是就判斷光線是否與葉子節點內的物體相交。

如果不是葉子節點,就遞歸到子節點去判斷。

 

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