基于层次包围盒的光线追踪渲染加速算法

本文属spanzhang(张友邦)原创,发布地址为:http://blog.csdn.net/spanzhang。转载或引用请注明原文之出处,谢谢!

光线追踪的效率问题一直以来都是关注的焦点,因为很多时候都会有非常多的求交运算要执行。目前几乎所有的加速算法都是尽量减少求交运算量,比如octree、kd-tree、包围盒(及层次包围盒)等。基于空间分割的算法最重要的就是如何有效地分隔空间,让场景细节和主体脱离(划分在不同的层次中)。

层次包围盒对空间的利用率非常高,如果场景中有多处细节中心,如何有效地构造包围盒层次来分别体现场景的细节就是算法成败的根本。当场将中有成千上万个多边形的时候,不可能手工构造,只能依靠算法来实现。在实践中,我实现了一个快速构造层次包围盒的算法,只需要通过一次扫描就能构造相对有效的层次包围盒模型。算法的核心主要是对细节的发现和分离。

试验结果如下:

基于层次包围盒的光线追踪渲染加速算法

5120个三角形,层次包围盒:5秒;普通算法:49秒。

基于层次包围盒的光线追踪渲染加速算法

10804个三角形,采用层次包围盒:11秒;普通算法:1分46秒。

可以看出,采用层次包围盒的算法快了10倍左右。对于图1来说,场景细节中心分散,并且没有主次。对于图2来说,场景细节中心集中,而且被外部更大的空间所包围。算法对这两种不同类型的场景都能很好的构造层次包围盒加速渲染。

你可能感兴趣的:(算法,.net,Blog)