一种基于动态场景的实时光线追踪加速结构的方法与流程

文档序号:16634067发布日期:2019-01-16 06:50阅读:607来源:国知局
一种基于动态场景的实时光线追踪加速结构的方法与流程

本发明涉及计算机图形学技术领域,尤其涉及一种基于动态场景的实时光线追踪加速结构的方法。



背景技术:

渲染是指利用软件将场景模型等信息生成图像的过程,是一项非常重要的技术。光线追踪技术是一种图像合成技术,也是真实感图形学领域中的重要算法,它通过模拟光线与物体表面的交点来实现图像的绘制,是一个在二维(2d)屏幕上呈现三维(3d)图像的方法。光线追踪是根据光学的能量传播的原理,模拟光线在场景中实际传播的过程:从摄像机发出光线,模拟光线在场景中折射、反射等传播情况,并不断计算获得的能量,同时不断迭代,直到达到收敛条件为止。这种方法计算出的图像具有绝对的真实性,可合成高品质的复杂3d场景。然而,由于光线追踪技术在使用中需要考虑全局因素,光源发出的每条光线都必须要与场景中包含的每一个多边形进行求交运算,这会耗费大量的计算资源。单纯的将传统的光线追踪技术用于场景渲染,效果不理想,效率也较低,不能实现实时场景的渲染。但时至今日,实时网游和影视化产业迅猛发展,仅仅基于静态场景的渲染已经远不能满足人们的需求。然而,已有的基于静态场景的渲染数据结构难以满足场景的实时绘制。因此,实现动态场景的实时光线追踪渲染是一个重要的研究方向。

包围盒加速技术是光线追踪算法中最早的加速技术之一,是利用几何特性简单的包围盒将渲染场景中的物体包围起来,利用这些包围盒与光线求交速度较快的思想预先判断光线与场景中的物体是否相交,从而以较小的代价去除与光线不相交的物体,以达到提高算法效率的目的,是加速光线追踪算法的关键步骤之一。在对场景进行空间划分的方法中,最常用的就是kd-tree(k-dimensional树的简称)和bvh-tree(boundingvolumehierarchies的简称),但针对动态场景,bvh-tree的性能优于kd-tree,但传统bvh算法需要很大的时间开销,这阻碍了在场景发生动态变化时bvh-tree的快速重建,这就需要对传统bvh-tree算法进行改进。



技术实现要素:

本发明要解决的技术问题是针对上述现有技术的不足,提供一种基于动态场景的实时光线追踪加速结构的方法,能减少光线求交次数,提高光线追踪算法效率,加快场景的渲染速度,非常适用于动态场景的实时渲染等方面,可将该方法应用于图像渲染优化等研究领域。

为解决上述技术问题,本发明所采取的技术方案是:

一种基于动态场景的实时光线追踪加速结构的方法,包括以下步骤:

步骤1:读取场景中的3d模型,将读取数据储存在gpu显存中,并保存这些3d模型的面片、顶点数量信息;

步骤2:利用步骤1中保存的场景3d模型物体的面片、顶点数量信息对场景中的3d模型进行复杂度分类,具体方法为:

首先针对不同场景设置场景的系统阈值,然后对场景中的所有3d物体进行复杂度分类,若该3d物体的面片顶点数值大于该阈值,则将该物体分类到复杂物体类别中;若该3d物体的面片顶点数小于等于该阈值,则将该物体分类到简单物体类别中;

步骤3:根据步骤2中的分类结果,复杂物体利用内包围盒的构造方法,简单物体利用轴对齐包围盒的构造方法,分别为场景中的所有3d物体建立各自的包围盒;

步骤4:根据场景中的模型分布,分别求出模型x轴、y轴和z轴的跨度,并利用坐标轴sah机制划分空间;

步骤5:利用自顶向下和自底向上两种方式相结合的方法构建bvh-tree,首先采用自顶向下的方法对单个物体创建叶子节点,逐层迭代直至创建完整的bvh树形结构;

步骤6:bvh-tree构建完毕后,输出bvhlist数组;

步骤7:从视点出发,判断从视点发出的光线与场景中物体是否相交,将当前光线与bvh树的节点中的包围盒做相交测试,每条光线为一条射线,表示为:r=e+t*d,其中e为视点(0,0,0,),d为射线的防线,t为射线与某个空间结构相交时的参数;

如果当前光线与bvh节点不相交,则表明当前光线没有与场景相交,则结束当前光线的光线追踪;如果当前光线与bvh节点相交,判断该bvh节点中是否有图元,如果有,则说明当前光线与场景中的物体有相交,要继续对该条光线进行追踪;如果该bvh节点中没有图元,则当前光线没有与场景中的物体相交,结束当前光线的光线追踪;递归的判断从视点出发的每条光线,直至判断完成后,输出渲染图片;

步骤8:当场景发生动态变化时,底层单个物体的原有包围盒逻辑结构不发生变化,利用自顶向下的树构建方法快速更新底层数据结构,之后将场景中每个物体的包围盒作为一个节点,采用自底向上的方式快速更新bvh-tree,并生成新的bvhlist数组;

步骤9:更新bvh-tree结构后,重复步骤7的相交测试,直至渲染成功出图。

采用上述技术方案所产生的有益效果在于:本发明提供的基于动态场景的实时光线追踪加速结构的方法,在图像渲染过程中首先对场景中的物体进行复杂度分类,再利用aabb包围盒以及内包围盒分别对不同复杂度的物体建立不同的包围盒,从而达到减少光线求交次数,提高光线追踪算法效率的目的;同时,利用bvh树自顶向下和自底向上这两种构建方式相结合的方法,简化了动态场景中bvh树的构建和更新的方式。在动态场景的渲染过程中,可以提高算法效率,加快场景的渲染速度,非常适用于动态场景的实时渲染等方面,可以将这种方法应用于图像渲染优化等研究领域。

附图说明

图1为本发明实施例提供的基于动态场景的实时光线追踪加速结构的方法流程图;

图2是本发明实施例提供的包围盒构造方法流程图;

图3是本发明实施例提供的bvh树构建方法流程图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

如图1所示,本实施例的方法如下所述。

步骤1:读取场景中的3d模型,将这些数据储存在gpu显存中,并保存这些3d模型的面片、顶点数量信息。

步骤2:利用步骤1中保存的场景3d模型物体的面片、顶点数量信息对场景中的3d模型进行复杂度分类。如图2所示,首先针对不同场景设置场景的系统阈值,然后对场景中的所有3d物体进行复杂度分类,若该3d物体的面片顶点数值大于该阈值,则将该物体分类到复杂物体类别中;若该3d物体的面片顶点数小于等于该阈值,则将该物体分类到简单物体类别中。

步骤3:根据步骤2中的分类结果,复杂物体利用内包围盒的构造方法,简单物体利用aabb包围盒(轴对齐包围盒axially-aligned的简称)的构造方法,分别为场景中的所有3d物体建立各自的包围盒。

内包围盒技术的原理是在传统包围盒里面建立一个新的包围盒,且这两个包围盒之间存在一定的联系,通常将传统包围盒成为外包围盒,将新建立的包围盒成为内包围盒。光线与外包围盒相交后会存在两个交点,设为p1(x1,y1,z1)和p2(x2,y2,z2),内包围盒就是以线段p1p2为对角线建立起来的,并且内包围盒的面分别于坐标平面相平行。

aabb包围盒又称为轴对齐包围盒,该包围盒的每一条边都平行于一个坐标平面,在渲染场景中构建的aabb包围盒就是一个简单的六面体。

步骤4:根据场景中的模型分布,分别求出模型x轴、y轴和z轴的跨度,并利用坐标轴sah机制划分空间。因为sah假设光线是随机发射的,利用该种方法可以得到具有更高平衡性的bvh-tree。

步骤5:利用自顶向下和自底向上两种方式相结合的方法构建bvh-tree,如图3所示,首先采用自顶向下的方法对单个物体创建叶子节点,逐层迭代直至创建完整的bvh树形结构。

步骤6:bvh-tree构建完毕,输出bvhlist数组。

步骤7:从视点出发,判断从视点发出的光线与场景中物体是否相交,将当前光线与bvh树的节点中的包围盒做相交测试,每条光线为一条射线,表示为:r=e+t*d,其中e为视点(0,0,0,),d为射线的防线,t为射线与某个空间结构相交时的参数。如果当前光线与bvh节点不相交,则表明当前光线没有与场景相交,则结束当前光线的光线追踪;如果当前光线与bvh节点相交,判断该bvh节点中是否有图元,如果有,则说明当前光线与场景中的物体有相交,要继续对该条光线进行追踪;如果该bvh节点中没有图元,则当前光线没有与场景中的物体相交,结束当前光线的光线追踪;递归的判断从视点出发的每条光线,直至判断完成后,输出渲染图片。

步骤8:当场景发生动态变化时,底层单个物体的原有包围盒逻辑结构不发生变化,利用自顶向下的树构建方法快速更新底层数据结构,之后将场景中每个物体的包围盒作为一个节点,采用自底向上的方式快速更新bvh-tree,并生成新的bvhlist数组。

步骤9:更新bvh-tree结构后,重复步骤7的相交测试,直至渲染成功出图。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明权利要求所限定的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1