一种基于非均匀空间划分的场景可见性裁剪方法

文档序号:6613630阅读:141来源:国知局
专利名称:一种基于非均匀空间划分的场景可见性裁剪方法
技术领域
本发明属于计算机虚拟现实和计算机图形学技术领域,特别是涉及计算机图形学加速 绘制技术中的可见性裁剪方法。
技术背景随着计算机硬件与虚拟现实技术的不断发展,数据获取能力越来越强,所处理模型的 数据量越来越大,场景也更加复杂。虽然图形绘制己经得到硬件的很大支持,但仍不能很 好地满足复杂场景实时绘制的要求,因此,还需要对各种加速算法进行研究。其中,可见 性裁剪作为一种非常重要的加速技术,可选取并绘制场景中可见的物体,从而很好地降低 场景绘制的复杂度。这种裁剪技术的核心问题就是物体的可见性计算。当场景规模很大时, 可见性计算的开销会严重影响实时绘制的效率。而将越来越多的计算转移到硬件上是图形 领域的发展趋势。近年来,图形硬件生成厂商提供了遮挡査询的功能。因此,在克服传统 场景组织方式局限性的基础上,如何更好地利用硬件提供的辅助功能,以提高可见性裁剪 与复杂场景实时绘制的效率,就成为本人们研究的最基本的出发点。场景组织是可见性裁剪的基础,场景越复杂,场景的组织方式就越重要。 一种好的场 景组织方式可以有效地提高可见性裁剪的效率。比较有效的方法是对场景进行空间分割, 并用树形结构组织,这样可以把空间无序的场景模型,变成一棵空间有序的层次树,对层 次树的遍历也就等价为对整个场景的操作。较常用的空间层次组织结构包括包围体层次结 构,二元空间分割树,八叉树。包围体层次结构既适合于静态也适合于动态场景,但它并不 是严格的空间分割结构,空间利用率不充分,尤其是当场景中存在移动的物体时,需要对 包围体层次进行更新,频繁地更新会导致树结构的极不平衡(参见Tomas Akenine-Moller. Realtime Rendering. Peking University Publish House. 2004)。另外,更新子节点包围体的同 时也需要更新其父节点的包围体,这需要较大的计算开销。二元空间分割树是用一个平面 (轴对齐或者是多边形对齐方式)将空间一分为二,然后将几何体划分到这两个空间中, 递归进行下去,从而生成层次树型结构。这种方式比较适合静态场景,当场景中存在移动 物体时很难进行实时更新,且需要较大的预处理开销。八叉树是另一种较常用的空间数据 组织结构,它能够极大地提高可见性裁剪的效率,广泛应用于虚拟现实系统中。但是传统 的八叉树空间分割方式有很多缺点对动态物体的管理比较困难且不存在对象的概念,它 将场景中所有的三角面片视为一个整体,不能很好地满足场景交互的要求。当小的物体跨 在一个节点的划分平面之上时,小的物体被保持在树的较高层,降低了划分的效率,增加 了可见性裁剪的计算开销(参见DeLoura, M. Game Programming Gems. CHARLES RIVER MEDIA INC. 2000) 发明内容本发明的技术解决问题克服现有技术的不足,提供一种基于非均匀空间划分的场景 可见性裁剪方法,在保留空间分割优点的基础上,避免了传统八叉树场景组织方式的局限 性,减少了场景结构更新的开销,同时克服了松散节点不易被裁剪的缺点,并与硬件提供 的遮挡查询功能相结合,形成了一种有效的可见性裁剪方法。本发明的技术解决方案 一种基于非均匀空间划分的场景可见性裁剪方法,其特点在 于步骤如下-(1) 进行场景组织首先进行非均匀化松散八叉树场景的构造,形成松散八叉树的场景组织方式,然后进 行松散八叉树的更新;(2) 视点排序当松散八叉树建立完成更新后,依据视点对松散八叉树节点进行排序,以最大化遮挡 查询的效率;(3) 进行可见性裁剪首先进行视锥体裁剪,将视锥体外部的数据裁剪掉,然后进行遮挡裁剪,将视锥体内 部被其它物体遮挡的物体裁剪掉,最后进行细节裁剪,如果可见物体在最终图像的投影区 域过小,可以将其忽略。经过上述的裁剪处理,可以裁剪场景中对最终图像没有贡献的物 体,从而减少绘制的开销,提高复杂场景的绘制效率。所述步骤(1)中非均匀化松散八叉树场景构造的步骤如下-(1) 根据公式丄=^^/2^调整节点包围体的大小;(2) 建立约束体系,规定树的最大深度。 所述步骤(1)中松散八叉树的更新步骤如下(1) 确定物体所处的相应深度层次;(2) 求得在相应深度层次的节点。 所述步骤(3)中的视点排序的步骤如下(1) 通过对节点进行编码,来区分不同的节点;(2) 根据距离从近到远选择相应的节点 (3)对节点进行递归的遍历。 所述步骤(3)中的视锥体裁剪的步骤如下补充(要与后面的具体实施方式
相对应)(1) 节点与视锥进行相交测试;(2) 可见节点内的物体插入查询队列;(3) 对孩子节点进行相交测试。所述步骤(3)中遮挡裁剪的步骤如下补充(要与后面的具体实施方式
相对应,但要 比具体实施方式
更简洁)(1) 对下层节点提出遮挡査询;(2) 可见叶子节点中的物体依据视点到包围盒中心的距离进行排序;(3) 对物体依据其包围体进行精确遮挡査询。 所述步骤(3)中细节裁剪的步骤如下-(1) 取得物体可见像素的数量;(2) 将小于预定义阈值的物体裁剪掉。 本发明与现有技术相比的有益效果在于非均匀化的松散场景组织方式可以使物体尽量保持在树型结构的更深层次,减少了剖分边界物体的开销;将场景以对象的方式而不是 面片的方式进行组织,从而克服了传统八叉树场景组织的很多缺点;将松散八叉树的节点 进行编码并依据视点的位置进行从近到远的排序,这对绘制效率的提高是必不可少的。进 一步提出了一种针对复杂场景的"双层"裁剪方法,根据不同的层次执行不同的裁剪策略, 从而克服了 "松散"的缺点,并将视锥体裁剪、遮挡裁剪、细节裁剪相结合,充分裁剪不 可见的图元,达到了对复杂场景实时漫游的效果。


图1为本发明的整体过程示意图;图2为本发明将八叉树节点进行松散处理示意图;图3为本发明的八叉树节点及子节点进行编码示意图;图4为本发明的稠密场景中视锥内的很多物体均为被遮挡的情况示意图;图5为本发明的粗査询与精査询相结合示意图。
具体实施方式
下面结合附图与实施例对本发明作进一步详细描述本发明实施过程包括三个主要步骤场景组织,视点排序,可见性裁剪。如图1所示。 步骤一即场景组织,主要分成二个阶段 第一个阶段非均匀化松散八叉树场景的构造 本发明为了克服传统八叉树存在的问题,将场景进行松散化处理,形成松散八叉树的 场景组织方式。松散八叉树采用自上而下的方式进行构造,并调整节点包围体的大小,如 图2所示,将原八叉树节点进行松散化处理即将其包围体的尺寸扩大,使节点与节点之间 的包围体重叠,这样就可以将处于分割平面上的物体划分到其中的一个节点中,如物体A 属于节点O。一个松散八叉树节点的包围体仍然是一个立方体,传统八叉树中立方体边长为/,设系 数因子为"则松散八叉树节点的包围体边长为W (1<A:<2)。对于不同深度层次d的节点 的包围体计算公式为/ = A*W2rf (1) 因此, 一个节点的包围体与其相邻的节点的包围体相重叠了。这样,以前穿过一个划 分平面的物体将被存储在平面的节点中,因为它有着更松散的包围立方体。接着建立约束体系,即在对场景进行空间划分之前,用户先定义一个阈值作为构造树 的最大深度值,在每次递归构造时检测当前深度值是否大于用户自定义的阈值,如果大于 则停止构造过程。这是因为松散八叉树划分的空间开销是很大的,所以有必要对层次深度 进行限制,这样可以防止递归建立树时,由于深度过深而出现堆栈溢出的情况,同时也可 以防止节点尺寸过小,导致场景中的大部分物体尺寸均超过W情况的发生。传统八叉树在剖分场景时,当节点中不存在几何体时将不继续分裂,以节省内存的占用;松散八叉树的 场景组织为了支持移动物体而避免重构场景的开销,它在分裂方式上采用严格的分裂方法, 一个节点内如果不存在物体,仍然要继续分^,直到达到规定的层次深度,从而使叶子节 点具有统一的尺寸。第二个阶段松散八叉树的更新当场景中存在移动的物体时,如果物体位置发生变化时,它原来所属的叶节点不一定 适用于它,需要对场景进行更新。首先将它从原来的叶子节点中删除,然后将其插入到新 的叶子节点中。插入的过程并不需要将树的结构重新构造,因为对于一个特定的物体,在 树中相应深度需要被插入的节点可以根据物体的中心位置进行选择。设场景的大小为W, 物体的半径为r,对于插入的深度d,可以通过公式得到-"^/7oor(log2(Pw/r)-2) (2)当深度己知时,在给定深度选择节点只需要寻找距物体中心最近的节点就可以了,则计算节点索引的公式为ii^fec(;c,y,z〉 = yZoo^XoZy'ecLce"^^;^,"* W2)/(w/2rf)) (3) 因为物体所在的节点仅仅与物体的位置有关,当物体的位置发生变化时就可以在相应 深度层次直接将物体赋予相应的叶子节点。 步骤二视点排序遮挡裁剪方法的效率与物体的绘制顺序密切相关,为了避免在屏幕上多次的绘制一个 像素,当松散八叉树建立完成后,需要依据视点对松散八叉树节点进行排序,以最大化遮 挡査询的效率。可以采用编码的方式来实现,每个松散八叉树节点包含三位信息,依据不 同的X, y, z平面分割位置来设置相应的位。当处于分割面的正向时为1,负向为0,如 图3所示,视点(红色物体,打出来之后看不出颜色)所在的区域为Oll,因为节点的位置 处于分割平面x的正向,分割平面y的正向,分割平面z的负向。先选择视点所在区域的 节点,然后以任意的顺序选择与此节点相邻接的三个节点,然后以任意的顺序选择与这三 个节点最近的三个八叉树节点,最后是最远的八叉树节点。以这个顺序递归地遍历整个树 形结构就可以得到物体依据视点从近到远的序列; 。W,;^2,7,lh;^0,6,5hAW。因此,当视点变化时,依据这种关系,递归的遍历这些节点单元,以实现排序的功能。步骤三可见性裁剪,共分为三个阶段,视锥体裁剪,遮挡裁剪,细节裁剪。第一个阶段视锥体裁剪针对排序后的节点,应用可见性裁剪方法。遮挡裁剪一般在视锥体裁剪方法之后执行。 大部分视锥体裁剪方法采用视锥与节点的相交测试来确定相应节点的可见性,因为相交测 试的开销比遮挡査询要小很多。遮挡查询大包围体的节点,效率会很低,相反相交测试这 样的节点效率会很高。节点深度层次越深,包含的物体数量越少,被遮挡的可能性就越大。 对于采用松散八叉树组织的场景树,上层节点被遮挡的可能性较小,因此适用于速度较快 的相交测试算法来进行。而对于下层节点和叶子节点相交测试会过多地浪费计算资源,因为下层节点被遮挡的可能性比较大,尤其在遮挡密度高的场景中,如图4黑色的物体为遮挡体,灰色的物体为被遮挡体,视锥体内部大多数物体均被离视点较近的黑色物体所遮挡。 因此,视锥体内部的节点,被遮挡的可能性很大。可以在遍历下层节点时,先进行遮挡査 询,从而减少遮挡查询的数量。所以,对于上层节点用相交测试的方法来进行,对于叶节 点及其中的物体以遮挡查询的方法来进行。针对不同的情况,采用不同的裁剪策略。第二个阶段遮挡裁剪将八叉树的节点进行松散处理后,带来优点的同时也降低了遮挡查询的效率。因其包 围盒的扩大,导致节点内的物体更不容易被裁剪掉。因此,本方法采用了粗査询与精査询相结合来解决这个问题。如图5所示,在遮挡裁剪方法中,先对叶子节点0 (图5右下角节点)的松散包围体进行遮挡查询,因松散的包围体比所包含的物体尺寸大的多,这种査 询是不精确的并且也不容易被裁剪掉。但相对乐上层节点来说,.叶子节点松散包围体本身的尺寸是比较小的,被遮挡的可能性很大,因此,这种粗查询是必要的。为了克服松散节 点中的物体不易被裁剪的缺点,当节点O返回为可见时,先将节点中的对象(A,B,C)依据 视点到包围盒中心的距离进行排序,并插入到査询队列中,然后对队列中的物体依据其包 围体进行遮挡查询,这一步为精査询,以减少松散包围体所带来的影响,从而提高可见性 裁剪方法的准确性。当提出一个遮挡査询后并不是等待查询结果,而是继续对下一个物体 进行遮挡查询,采用并行遮挡査询策略以充分利用CPU的时间。如果包围体不可见,则不 需要对复杂的几何图元进行绘制。 第三个阶段细节裁剪应用遮挡査询后可以检测返回的可见像素数目,因此,为了进一步裁剪可见的几何体, 可见预定义一个阈值,如果结果为可见且返回的像素个数大于预定义的阈值则绘制;否则 如果小于预定义的阈值,则执行细节裁剪,当结果为不可见时继续处理下一个节点。
权利要求
1、 一种基于非均匀空间划分的场景可见性裁剪方法,其特征在于步骤如下(1) 进行场景组织首先进行非均匀化松散八叉树场景的构造,形成松散八叉树的场景组织方式,然后进 行松散八叉树的更新;(2) 视点排序当松散八叉树建立完成更新后,依据视点对松散八叉树节点进行排序,以最大化遮挡 査询的效率;(3) 进行可见性裁剪首先进行视锥体裁剪,将视锥体外部的数据裁剪掉,然后进行遮挡裁剪,将视锥体内 部被其它物体遮挡的物体裁剪掉,最后进行细节裁剪,以将在最终图像的投影区域过小的 可见物体忽略,经过上述的裁剪处理,可以裁剪场景中对最终图像没有贡献的物体,从而 减少绘制的开销,提高复杂场景的绘制效率。
2、 根据权利要求l所述的基于非均匀空间划分的场景可见性裁剪方法,其特征在于 所述步骤(1)中非均匀化松散八叉树场景构造的步骤如下(1) 根据公式丄-^MV2d调整节点包围体的大小;(2) 建立约束体系,规定八叉树的最大深度。
3、 根据权利要求l所述的基于非均匀空间划分的场景可见性裁剪方法,其特征在于 所述步骤(1)中松散八叉树的更新步骤如下-(1) 确定物体所处的相应深度层次;(2) 求得在相应深度层次的节点。
4、 根据权利要求l所述的基于非均匀空间划分的场景可见性裁剪方法,其特征在于 所述步骤(3)中的视点排序的步骤如下(1) 通过对节点进行编码,来区分不同的节点;(2) 根据距离从近到远选择相应的节点;(3) 对节点进行递归的遍历。
5、 根据权利要求l所述的基于非均匀空间划分的场景可见性裁剪方法,其特征在于-所述步骤(3)中的视锥体裁剪的步骤如下(1) 将节点与视锥进行相交测试;(2) 将可见节点内的物体插入査询队列; (3)对孩子节点进行相交测试。
6、 根据权利要求l所述的基于非均匀空间划分的场景可见性裁剪方法,其特点在于: 所述步骤(3)中遮挡裁剪的步骤如下(1) 对下层节点提出遮挡査询;(2) 可见叶子节点中的物体依据视点到包围盒中心的距离进行排序;(3) 对物体依据其包围体进行精确遮挡査询。
7、 根据权利要求l所述的基于非均匀空间划分的场景可见性裁剪方法,其特点在于-所述步骤(3)中细节裁剪的步骤如下(1) 取得物体可见像素的数量;(2) 将小于预定义阈值的物体裁剪掉。
全文摘要
一种基于非均匀空间划分的场景可见性裁剪方法,步骤为(1)进行场景组织先进行非均匀化松散八叉树场景的构造,形成松散八叉树的场景组织方式,然后进行松散八叉树的更新;(2)视点排序松散八叉树建立完成更新后,依据视点对松散八叉树节点进行排序,以最大化遮挡查询的效率;(3)进行可见性裁剪首先进行视锥体裁剪,然后进行遮挡裁剪,最后进行细节裁剪,以将在最终图像的投影区域过小的可见物体忽略,经过上述的裁剪处理,可以裁剪场景中对最终图像没有贡献的物体,从而减少绘制的开销,提高复杂场景的绘制效率。本发明在保留空间分割优点的基础上,避免了传统八叉树场景组织方式的局限性,减少了场景结构更新的开销,同时克服了松散节点不易被裁剪的缺点。
文档编号G06T15/10GK101145245SQ20071017601
公开日2008年3月19日 申请日期2007年10月17日 优先权日2007年10月17日
发明者卓 于, 梁晓辉, 梁爱民 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1