一种时空相关的层次遮挡剔除方法

文档序号:6521595阅读:165来源:国知局
一种时空相关的层次遮挡剔除方法
【专利摘要】一种时空相关的层次遮挡剔除方法,该方法的步骤为:(1)按照自顶向下层次遍历的方式对场景结构树中的结点进行访问,根据上一帧的结点可见信息,计算出当前帧需要进行遮挡查询的结点集合,包括上一帧不可见的终止结点和上一帧可见的叶子结点,并把上一帧可见的叶子结点的包围盒作为遮挡物进行绘制;(2)对上一帧不可见的终止结点进行遮挡查询,并根据查询结果更新相关结点的可见信息;(3)对上一帧可见的叶子结点进行遮挡查询,并根据查询结果更新相关结点的可见信息。本方法可以有效地对大规模三维场景进行遮挡剔除,提高遮挡剔除的速度和精度。
【专利说明】一种时空相关的层次遮挡剔除方法
【技术领域】
[0001]本发明涉及三维场景的图形绘制领域,更具体地讲,涉及一种对三维场景进行遮挡剔除的方法。
【背景技术】
[0002]遮挡剔除能够有效地剔除对最终图像没有贡献的物体,避免绘制场景中被遮挡住的物体。典型的遮挡剔除方法主要分为两类:物体空间的遮挡剔除方法和图像空间的遮挡剔除方法。图像空间的遮挡剔除方法能够利用图形硬件的遮挡查询功能来判断物体的可见性,因此,该类遮挡剔除方法的执行效率比物体空间的遮挡剔除方法高。大部分快速的遮挡剔除方法都利用了图形硬件的遮挡查询功能,并结合一定的查询策略对场景层次结构树进行遍历,判断各个结点的可见性,剔除被遮挡的结点。
[0003]在本发明前,北卡罗来纳大学教堂山分校的Govindaraju等人使用三个GPU交替进行遮挡查询[Govindaraju N K, Sud A, Yoon S E, et al.1nteractive visibilityculling in complex environments using occlusion-switches[C].Proceedings ofthe 2003 ACM symposium on Interactive3D graphics (I3D03),2003:103-112],其中,两个GPU交替进行包围体的绘制和三维物体的遮挡查询,第三个GPU根据遮挡查询的结果,对三维场景中的可见物体进行绘制。德国波恩大学的Guthe等人提出了三维场景中物体遮挡的统计模型[Guthe M, Balazs A, Klein R.Near Optimal Hierarchical
Culling:Performance Driven Use of Hardware Occlusion Queries[J].RenderingTechniques.Springer, 2006:207-214],该模型可以估计出三维场景中各物体被遮挡的概率,他们通过遮挡统计模型估计出三维场景树中各个结点被遮挡的概率,有选择性地对部分结点优先进行遮挡查询。
[0004]上述的遮挡剔除方法都没有考虑结点所处的层次对遮挡查询结果产生的影响,没有充分利用结点的层次信息。因此,它们的遮挡剔除速度和精度均在一定程度上受到了影响。本发明提出了一种时空相关的层次遮挡剔除方法,该方法利用了结点可见信息的时空相关性,并根据结点的层次信息,对位于同一层次的结点,只发送一次多结点的遮挡查询,从而提闻了遮挡副除的效率。

【发明内容】

[0005]本发明的目的是:克服现有遮挡剔除方法没有充分利用结点的层次信息,提供了一种时空相关的层次遮挡剔除方法,该方法可以有效地对三维场景进行遮挡剔除,提高了三维场景遮挡剔除的速度和精度。
[0006]为了实现上述目的,本发明的原理是:利用结点可见信息的时空相关性,并根据结点的层次信息,优先对某些结点进行遮挡查询,从而提高了遮挡剔除的效率。结点可见信息的时间相关性是指视点连续变化时,上一帧大部分的可见物体通常在当前帧还是可见的,上一帧大部分的不可见物体在当前帧还是不可见的。对于上一帧可见的叶子结点,本发明将其作为当前帧的遮挡物,并提前对其包围盒进行绘制;对于上一帧不可见的终止结点,本发明对处于同一层次的多个结点,只发射一次多结点的遮挡查询,减少了遮挡查询的次数。结点可见信息的空间相关性是指可见信息和不可见信息在父子结点间的传递,如果某个结点不可见,则其子孙结点均为不可见;如果某个结点可见,则其祖先结点均为可见。本发明仅对三维场景层次结构树中可见的叶子结点和不可见的终止结点进行遮挡查询,减少了遮挡查询的次数。同时,为了减少CPU停止等待查询结果返回的时间,在遮挡查询结果没有返回时,CPU继续向GPU发送其余结点的遮挡查询请求。
[0007]本发明所采取的技术方案是:首先,按照自顶向下层次遍历的方式对场景结构树中的结点进行访问,根据上一帧的结点可见信息,计算出当前帧需要进行遮挡查询的结点集合,包括上一帧不可见的终止结点和上一帧可见的叶子结点,并把上一帧可见的叶子结点作为遮挡物,提前对其包围盒进行绘制;然后,对上一帧不可见的终止结点进行遮挡查询,并根据查询结果更新相关结点的可见信息;最后,对上一帧可见的叶子结点进行遮挡查询,并根据查询结果更新相关结点的可见信息。
[0008]本发明与现有技术相比的优点在于:充分利用了结点可见信息的时空相关性,并结合结点的层次信息,对三维场景进行遮挡查询,有效地提高了遮挡剔除的效率。
【专利附图】

【附图说明】
[0009]图1为三维场景的场景结构树;
[0010]图2A是可见信息在父子结点间的传递关系;
[0011]图2B是不可见信息在父子结点间的传递关系;
[0012]图3为本发明时空相关的层次遮挡剔除方法的流程图。
[0013]具体实施方法
[0014]下面结合附图和实施例对本发明作进一步详细的描述,在介绍本发明的具体实施方法之前,首先对三维场景的场景结构树、结点可见信息的时间相关性和空间相关性、单结点的遮挡查询和多结点的遮挡查询进行说明。
[0015]三维场景的场景结构树构造方法可以采用二叉空间分割或者八叉树空间分割、Kd树空间分割等方法,对三维场景进行组织。图1为利用二叉空间分割方法生成的场景结构树,该树的结点属性包括结点的可见信息和结点的包围盒信息,其中,结点的可见信息是指结点在当前巾贞是否可见。对于叶子结点,其包围盒可以采用AABB(Axis-aligned boundingbox,轴对称包围盒)、OBB(Oriented Bounding Boxes,有向包围盒)等;对于非叶子结点,其包围盒为其子孙结点中所有是叶子结点的结点包围盒的并集。
[0016]可见的叶子结点是指可见信息为可见的叶子结点,不可见的终止结点是指可见信息为不可见而且其父亲结点可见信息为可见的结点。在图1中,圆形结点表示当前帧可见的结点,方形结点表示当前帧不可见的结点,其中,可见的叶子结点为结点9和结点10,不可见的终止结点为结点3、结点8和结点11。
[0017]结点可见信息的时间相关性是指视点在连续变化时,上一帧大部分可见的物体通常在当前帧还是可见的,上一帧大部分不可见的物体在当前帧还是不可见的。
[0018]结点可见信息的空间相关性是指可见信息和不可见信息在父子结点间的传递,如果某个结点不可见,则其子孙结点均为不可见;如果某个结点可见,则其祖先结点均可见。如图2A所示,可见信息可以由孩子结点传递给其祖先结点;如图2B所示,不可见信息可以由父亲结点传递给其子孙结点。
[0019]单结点的遮挡查询是指对一个结点单独发射一次遮挡查询请求,GPU通过对该结点的包围盒进行深度测试,返回该结点的包围盒所通过测试的像素个数。如果有像素通过,则该结点被判断为可见,否则,该结点被判为不可见。
[0020]多结点的遮挡查询是指对于处于同一层的终止结点只向GPU发射一次遮挡查询请求,即GPU对这些结点的包围盒的集合进行深度测试。如果没有像素通过,则这些结点都被判断为不可见;只有当有像素通过时,才需要对所涉及的每个结点发射一次单节点的遮挡查询。
[0021]本发明提出的时空相关的层次遮挡剔除方法的流程如图3所示,其步骤如下:
[0022](I)按照自顶向下层次遍历的方式对场景结构树中的结点进行访问,根据上一帧的结点可见信息,计算出当前帧需要进行遮挡查询的结点集合,包括上一帧不可见的终止结点和上一帧可见的叶子结点,并把上一帧可见的叶子结点的包围盒作为遮挡物进行绘制:
[0023](1.1)将场景结构树的根结点压入层次遍历队列;
[0024](1.2)从层次遍历队列中取出队首结点,读取该结点上一帧的可见信息,并把其在当前帧的可见信息置为不可见。如果队首结点不可见,则进入步骤(1.3),否则,进入步骤
(1.4);
[0025](1.3)将层次遍历队列的队首结点从队列中弹出,并压入不可见的终止结点栈;
[0026](1.4)如果层次遍历队列的队首结点是叶子结点,则绘制该结点的包围盒,然后,将该结点从层次遍历队列中弹出,并压入可见的叶子结点栈,否则,将该结点的孩子结点压入层次遍历队列,然后将该结点从队列中弹出;
[0027](1.5)如果层次遍历队列为空,则场景结构树的遍历结束,否则,进入步骤(1.2)。
[0028](2)利用不可见结点的空间相关性,对处于同一层次的上一帧不可见的终止结点,只发射一次多结点的遮挡查询,并根据多结点的遮挡查询结果,更新相关结点的可见信息或者对所涉及的每个结点都发射单节点的遮挡查询:
[0029](2.1)如果不可见的终止结点栈为空,则进入步骤(2.4),否则,从不可见的终止结点栈中,读取出栈顶结点及其在场景结构树中所处的层次L,然后将栈顶结点从栈中弹出并压入查询队列;
[0030](2.2)如果不可见的终止结点栈为空,则进入步骤(2.3),否则,如果栈顶结点的层次等于L,则将栈顶结点从栈中弹出并压入查询队列,并重复进入步骤(2.2),否则,进入步骤(2.3);
[0031](2.3)针对步骤(2.1)和步骤(2.2)中新进入查询队列的结点,向GPU发射一次多结点的遮挡查询;
[0032](2.4)如果查询队列的队首结点的遮挡查询结果没有从GPU返回,则进入步骤(2.1),否则,如果队首结点的遮挡查询为多结点的遮挡查询,则进入步骤(2.5),否则,进入步骤(2.6);
[0033](2.5)对于队首结点的遮挡查询为多结点的遮挡查询,根据队首结点的遮挡查询结果,对查询队列中的结点进行处理,有如下两种情况:[0034](2.5a)如果遮挡查询结果为不可见,则将该次多结点的遮挡查询所涉及的结点从查询队列中删除,并将这些结点置为不可见,进入步骤(2.7);
[0035](2.5b)如果遮挡查询结果为可见,则将该次多结点的遮挡查询所涉及的结点从查询队列中删除,然后,将这些结点压入查询队列的队尾,并对每个结点向GPU发射一次单结点的遮挡查询,进入步骤(2.7);
[0036](2.6)对于队首结点的遮挡查询为单结点的遮挡查询,根据队首结点的遮挡查询结果,对查询队列中的结点进行处理,有如下两种情况:
[0037](2.6a)如果遮挡查询结果为不可见,则将该结点从查询队列中删除,并将其置为不可见,进入步骤(2.7);
[0038](2.6b)如果遮挡查询结果为可见,则将该结点从查询队列中删除,并将该结点及其祖先结点都置为可见,进入步骤(2.7);
[0039](2.7)如果查询队列不为空,则进入步骤(2.4),否则,如果不可见的终止结点栈不为空,则进入步骤(2.1),否则,上一帧不可见的终止结点的遮挡查询结束。
[0040](3)对上一帧可见的叶子结点进行遮挡查询,并根据查询结果更新相关结点的可见息:
[0041](3.1)如果上一帧可见的叶子结点栈为空,则进入步骤(3.2),否则,将栈顶结点从上一帧可见的叶子结点栈中弹出并压入查询队列,然后向GPU发射对该结点的单结点的遮挡查询;
[0042](3.2)如果查询队列为空,则进入步骤(3.5),如果查询队列的队首结点的遮挡查询结果没有从GPU返回,则进入步骤(3.1),否则,如果队首结点的遮挡查询为可见,则进入步骤(3.3),否则,进入步骤(3.4);
[0043](3.3)将该结点从查询队列中删除,并将该结点及其祖先结点都置为可见,进入步骤(3.5);
[0044](3.4)将该结点从查询队列中删除,并将其置为不可见,进入步骤(3.5);
[0045](3.5)如果查询队列不为空,进入步骤(3.2),否则,如果可见的叶子结点栈不为空,进入步骤(3.1),否则,对上一帧可见的叶子结点遮挡查询结束。
[0046]本发明中未详细阐述的部分属于本领域技术人员的公知技术。
[0047]最后所应说明的是,以上所述仅是本发明的优选实施方式,应当指出,对于本【技术领域】的普通技术人员来说,在不脱离本发明时空相关的层次遮挡剔除方法的前提下,还可以做出若干改进或等同替换,这些改进和等同替换也应视为本发明的保护范围。
【权利要求】
1.一种时空相关的层次遮挡剔除方法,其特征在于包括步骤如下: (1)按照自顶向下层次遍历的方式对场景结构树中的结点进行访问,根据上一帧的结点可见信息,计算出当前帧需要进行遮挡查询的结点集合,包括上一帧不可见的终止结点和上一帧可见的叶子结点,并把上一帧可见的叶子结点的包围盒作为遮挡物进行绘制;其中,场景结构树中的结点属性包括结点的可见信息和结点的包围盒信息;可见的叶子结点是指可见信息为可见的叶子结点,不可见的终止结点是指可见信息为不可见而且其父亲结点可见信息为可见的结点; (2)对上一帧不可见的终止结点进行遮挡查询,并根据查询结果更新相关结点的可见信息; (3)对上一帧可见的叶子结点进行遮挡查询,并根据查询结果更新相关结点的可见信息,即如果某个叶子的遮挡查询结果为不可见,则将该叶子结点的可见信息重置为不可见;如果某个叶子的遮挡查询为可见,则将该叶子结点及其祖先结点的可见信息都置为可见。
2.根据权利要求1所述的时空相关的层次遮挡剔除方法,其特征在于:所述步骤(2)对上一帧不可见的终止结点进行遮挡查询,包括步骤如下: (2.1)如果不可见的终止结点栈为空,则进入步骤(2.4),否则,从不可见的终止结点栈中,读取出栈顶结点及其在场景结构树中所处的层次L,然后将栈顶结点从栈中弹出并压入查询队列; (2.2)如果不可见的终 止结点栈为空,则进入步骤(2.3),否则,如果栈顶结点的层次等于L,则将栈顶结点从栈中弹出并压入查询队列,并重复进入步骤(2.2),否则,进入步骤(2.3); (2.3)针对步骤(2.1)和步骤(2.2)中新进入查询队列的结点,向GPU发射一次多结点的遮挡查询; (2.4)如果查询队列的队首结点的遮挡查询结果没有从GPU返回,则进入步骤(2.1),否则,如果队首结点的遮挡查询为多结点的遮挡查询,则进入步骤(2.5),否则,进入步骤(2.6); (2.5)对于队首结点的遮挡查询为多结点的遮挡查询,根据队首结点的遮挡查询结果,对查询队列中的结点进行处理,有如下两种情况: (2.5a)如果遮挡查询结果为不可见,则将该次多结点的遮挡查询所涉及的结点从查询队列中删除,并将这些结点置为不可见,进入步骤(2.7); (2.5b)如果遮挡查询结果为可见,则将该次多结点的遮挡查询所涉及的结点从查询队列中删除,然后,将这些结点压入查询队列的队尾,并对每个结点向GPU发射一次单结点的遮挡查询,进入步骤(2.7); (2.6)对于队首结点的遮挡查询为单结点的遮挡查询,根据队首结点的遮挡查询结果,对查询队列中的结点进行处理,有如下两种情况: (2.6a)如果遮挡查询结果为不可见,则将该结点从查询队列中删除,并将其置为不可见,进入步骤(2.7); (2.6b)如果遮挡查询结果为可见,则将该结点从查询队列中删除,并将该结点及其祖先结点都置为可见,进入步骤(2.7); (2.7)如果查询队列不为空,则进入步骤(2.4),否则,如果不可见的终止结点栈不为空,则进入步骤(2.1) ,否则,上一帧不可见的终止结点的遮挡查询结束。
【文档编号】G06T15/10GK103700137SQ201310631959
【公开日】2014年4月2日 申请日期:2013年12月1日 优先权日:2013年12月1日
【发明者】周忠, 秦晓倩, 吴威, 陈珂, 赵沁平 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1