基于CUDA的光线跟踪算法

 

光线跟踪是目前常用的主流绘制技术之一,由于它能方便地模拟生成复杂的光照效果,生成高质量的图像,在很多领域得到了广泛的应用,如真实感绘制,虚拟现实,可视化,计算机动画等。但光线跟踪算法的计算开销较大,妨碍了其应用效率。光线跟踪渲染的主要运算操作耗费在光线与场景求交的过程中,为此,为了加快这一计算过程,人们研究了大量的技术来加快求交操作。其中,通过建立一定的空间组织结构来加速求交计算机取得了很大的进展,如基于场景的空间层次划分结构等。

 

对场景进行层次化的树形结构划分与组织,可使得空白区域能以较大的结点表示,从而减少光线穿过空白区域的开销。目前已经被学者提出肯经常使用的空间划分方式有均匀网格划分、层次包围划分、八叉树、KD-Tree等,这些方法在此前论文中均有所研究,且都得到了相应不错的加速效果。而其中最为常用、且被证明效果较好的当属KD-Tree。

 

1. 基于KD-Tree的场景空间划分

为了对场景与光线相交的碰撞检测过程进行加速,对场景的空间划分组织不可缺少。当前主要使用的空间划分技术有基于空间划分的均匀网格,八叉树,KD-Tree等,

以及结合这几个划分方式的混合结构。这些结构各有特点,需要根据所处理的场景的特点及绘制任务进行相应的划分方式的选择,没有哪一种空间划分方法能

最优地处理各种场景。不过这些通过空间划分来对光线和场景之间的相交检测进行加速的基本原理相同,即是将场景中的原始几何体元抽象化后向上层组织,比

如以包围盒的形式,通过首先对包围盒进行与光线的碰撞检测进而来排除那此不可能与光线相交的几何体元与光线之间的相交测试。

 

1.1 KD-Tree的优势

针对不同的场景可以有不同的空间划分方式,不过当前对于光线跟踪所使用的主流空间划分方式为KD-Tree,这主要是因为以下几个原因:

1. KD-Tree是一种特殊的BSP树,它将BSP划分中的任意分割平面退化为轴对齐的分割平面,这样就降低了BSP生成时的几何体元分割操作。但是它却同样具有BSP树

的优良特征,即一定程度上的启发式空间划分,这样可以使得到的最终划分二叉树尽可能地平衡,这样就降低了最坏情况下的光线与划分结构之间的求交次数,进而提升的效率。

2. 由于KD-Tree是一种二叉树,因此在遍历的时间就要比八叉树等非二叉树的划分结构更简单,这也推广了它的使用范围。

3. 最后,很重要的一点是由于二叉树遍历的简易性可以使它们比较容易移植于不支持堆栈递归结构的GPU之中。

鉴于KD-Tree所具有的上述优良特性,本文在实现中也采用了KD-Tree的结构来对空间场景进行划分。

 </

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值