加速结构(加速光线与场景的物体求交)

把包围盒分成很多个小格子,当小格子与物体表面相交时,就标记该格子。

当光线进入包围盒时,就会不停的和一路上的小格子发生交互,如果小格子里有物体,就判断光线是否与物体交互,如果没有交互则继续前进,如果发生交互就记录并返回。

由于在某些地方比较空旷,所以对空旷地区的划分并不需要太细,对比较密集的区域才划分细一些

 

 

使用KD-Tree来建立加速结构,建立KD-Tree过程

 

对包围盒沿着轴方向进行划分,中间节点不存储物体,只在叶子节点存储物体信息

 

 

在KD-Tree中查找光线与物体的求交,需要在光线前进的方向不停的与包围盒检测。

 

 

但KD-Tree有一个比较严重的问题。包围盒中有些物体是与包围盒有交集,因为场景物体是由三角形构成,而很难判断三角形与包围盒有交集。

于是使用另外的一种加速结构BVH,它根据场景中的物体进行划分,这样就避免了判断三角形是否与包围盒有交集。

 

 

构造BVH的过程:把一个包围盒切分成两部分,重新计算这两个部分的包围盒,不断切分下去,直到包围盒内的三角形足够少

 

 

怎么样对一个节点划分,选取最长的那个轴,根据中位数进行划分。

 

 

 

中间节点存储包围盒和指向子节点的指针,叶子节点存储包围盒和三角形

 

 

 

伪代码:判断光线与BVH根节点是否相交,如果不相交则直接返回,接着判断相交的是否是叶子节点,如果是就判断光线是否与叶子节点内的物体相交。

如果不是叶子节点,就递归到子节点去判断。

 

posted @ 2022-08-18 09:31  捞的不谈  阅读(124)  评论(0编辑  收藏  举报