面向图形绘制平台的场景图优化设计方法

文档序号:6631694阅读:138来源:国知局
专利名称:面向图形绘制平台的场景图优化设计方法
技术领域
本发明涉及一种图形绘制引擎中的场景图的优化设计方法。
背景技术
图形绘制引擎是一套用于3D图形程序开发的软件包,其功能应包括图形绘制显示、三维场景管理、碰撞检测、地形匹配、对象交互等,软件包向高层图形应用程序提供不同层次和形式的接口,以供不同层次的编程人员使用,如图1所示。场景图是一种数据结构,广泛应用于场景构建技术,它保存场景中的所有物体及其相互关系,通常情况下,它是由节点和边组成的一种层次化的有向非循环图,它由一个根节点开始,每个节点表示虚拟场景中的一部分,有向边将各个节点联系起来,图2定义了节点之间的隶属关系。场景图常作为图形绘制引擎在运行时维护和依赖的数据结构,是一种运行时的内存组织形式。通常情况下,图形绘制引擎通过3D模型文件读入模块,将外存中的模型文件读入内存,组织成场景图结构。对不同格式的3d模型文件,应用不同读入程序,读入转换的过程大相径庭,方法策略不一。3d模型的建立依赖于专门工具、设计建模人员的经验习惯以及之间的分工合作,这些因素都会影响模型文件的组织构成。一般而言,3d模型文件也是层次结构,转换到场景图通常都能保持原来的层次关系。模型文件读入模块关心场景图如何正确组织,使得在绘制阶段显示正确,而将场景图绘制为图形的则是图形引擎的运行库组件。图形的绘制是一个大循环过程,如图3所示。
目前,图形引擎中的场景图Scene Graph的节点类型主要有组节点Group和叶节点Leaf,如图4所示,其中组节点Group用于描述整个虚拟场景的层次组织结构,叶节点Leaf则用于描述基本的组成元素,如基本绘制元素,点集合,线集合,三角形面片集合等。组节点Group及其子节点构成的子图通常表示虚拟场景中的一整个场景或一组对象,其子节点可以是Group节点或Leaf节点;Leaf节点表示一个或一组具有相同属性的基本组成元素,它没有子节点。场景图Scene Graph中的每一个节点都是数据的存储结构,每个节点都需要存储用以描述自身的属性信息Attribute,包括两类(1)场景的组织结构信息,如父节点或子节点的句柄;(2)描述表现自身所需的各类特征属性、状态控制信息,如位置坐标、变换矩阵以及颜色、材质等。对于Group节点,其记录的信息有时不仅描述了节点本身,可能也描述了包括其子节点在内的子场景图的属性。此外,一些常用的Group派生类如图5、6所示,LOD,层次细节模型的类型,它允许根据当前视点距离物体中心的距离切换模型的显示。它包含子节点的列表和显示范围的列表(Range List),这两个列表的元素一一对应,当视点与物体中心的距离在显示范围之内时,对应的子节点被遍历并绘制。当物体距离视点较远时,可以用低精度的模型取代高精度模型,减少绘制载荷。Transform,空间坐标变换类的基类,如图7所示,它包含一个4*4的变换矩阵,场景图中以该节点为根的子树的所有几何元素的空间坐标向量在绘制时,和该矩阵相乘,其效果相当于从世界坐标系到局部坐标系的变换或是反变换。
由于建模方法的不同或模型文件读取插件的原因,导致生成的场景图中可能存在不包含任何绘制元素的叶节点,以及不含任何控制和状态信息、且只有一个子节点的冗余中间结点,这两类节点使场景图遍历时的深度加深,影响绘制效率,而且由于场景图中包含很多局部变换节点,使得绘制时要对每一个绘制元素都要反复进行多次从局部坐标系到世界坐标系的运算,产生较大的计算开销;此外,由于场景图中可能多个节点拥有相同的在绘制循环中不会变化的状态信息,如纹理图,每个节点都保存一个表示状态信息的数据拷贝,造成了存储空间的额外开销。

发明内容
本发明的技术解决问题是克服现有技术的不足,提供一种计算开销小、绘制效率高的面向图形绘制平台的场景图优化设计方法。
本发明的技术解决方案面向图形绘制平台的场景图优化设计方法,其特点在于在模型文件读入模块后,首先生成初始场景图,再对初始场景图进行优化操作,生成新场景图,然后运行库组件工作,具体的优化设计方法包括下列步骤(1)节点合并策略互为兄弟的多个Leaf节点和互为兄弟的多个Group节点,如果拥有相同状态控制信息,包围体相交则可以合并。合并将带来裁减阶段视阈裁减效率的损失,但可以减少绘制遍历的开销。合并节点的意义还在于将整个绘制的运算压力从CPU分出部分给GPU,因为对场景图的遍历裁减在CPU中进行,场景图的节点的合并简化使得CPU的运算压力减轻,相应的传递个显卡的绘制数据和命令将因为裁减的效率降低而增加。在当前显卡的能力大幅提高,并行能力远远比CPU强大的情况下,该优化方法显得比较有效。
(2)相近LOD合并策略两个或是两个以上同在一个Group节点下的互为兄弟的LOD节点,如果中心距离接近,说明它们的包围盒有大部分重合,这些LOD节点可以合并起来。这样的合并在视阈裁减上的效率损失不大,但可以减少绘制遍历的开销。多个LOD节点合并成一个LOD节点时,新LOD节点的范围列表(Range List)是各个LOD节点范围列表之和,和各个范围对应的子节点放置在相应的位置。
(3)静态Transform(变换)节点预计算策略将静态Transform的矩阵预先和其子孙节点做运算,在场景图中剔除Transform节点。静态的Transform节点中保存有一个变换矩阵,用于世界坐标系向局部坐标系的变换,在绘制过程中,运行库组件要维持一个变换矩阵栈,在遇到此类节点时,将栈顶与Transform中的矩阵相乘后压栈。遍历该Transform节点的子孙节点用于绘制时,使用变换矩阵栈的栈顶矩阵变换子孙节点的几何元素,得到再世界坐标系下的正确位置。当绘制遍历从该Transform节点向上返回时,变换矩阵栈的栈顶元素出栈。Transform节点的加入在逻辑上符合习惯,在开始绘制循环后,提供改变场景图中对象空间位置形状的途径(动态的Transform),Transform节点的引入还可能是建模人员分工合作的成果最后做集成的需要(比如房屋模型加入到地形模型上)(静态的Transform),但是静态的Transform节点不利于图形绘制效率的提高。从Transform节点的处理过程来看,每帧图像的绘制都是按相同步骤、用相同的数据遍历处理Transform带的矩阵,大量引入矩阵乘法运算。如果将静态Transform的矩阵预先和其子孙节点做运算,在场景图中剔除Transform节点(不必移除,将变换矩阵置为单位矩阵,在绘制时遇到Transform节点包含的是单位矩阵,则不对变换矩阵栈压栈即可),可以提高绘制效率。
(4)消除空节点、冗余节点。
将空节点和冗余节点移除。模型文件读入模块生成的初始场景图中可能存在一些空节点,例如没有子节点的Group节点、即没有控制信息,又没有绘制元素Leaf节点。它们在后面的绘制过程中依然要被遍历,消耗处理时间。将这类节点移除,提高时空效率。初始场景图中还可能存在一些冗余Group节点,这样的Group节点特征是它不带状态控制信息,只有一个子节点。这样的节点在绘制时徒然增加遍历深度,将这类节点移除,提高时空效率。
上述4个步骤可以可以单独使用,可以只对场景图的局部使用。在整个场景图上或是场景图的某个局部,所述4个步骤可以组合使用,使用的顺序没有什么特殊的限制,甚至可以重复,比如在第一步和最后一步都使用方法(4)处理场景图。
本发明与现有技术相比的有益效果是(1)由于建模方法的不同或模型文件读取插件的原因,导致生成的场景图中可能含有不包含任何绘制元素的叶节点,以及不含任何控制和状态信息、且只有一个子节点的冗余中间结点,这两类节点使场景图遍历时的深度加深,影响绘制效率。本发明针对这两类无效节点,在遍历场景图时,采取检查无效节点并剔除的方法,优化了场景图的结构。
(2)由于场景图中包含很多静态局部变换节点,使得绘制时要对每一个绘制元素都要反复进行多次从局部坐标系到世界坐标系的运算,产生较大的计算开销,本发明采取在预处理阶段将静态变换节点的变换矩阵作用于每一个绘制元素,直接保存为世界坐标系下值的方法,从而在进入绘制循环前去除了所有变换矩阵节点,降低了绘制循环的时间开销,提高了绘制效率。
(3)由于场景图中可能多个节点拥有相同的在绘制循环中不会变化的状态信息,如纹理图,每个节点都保存一个表示状态信息的数据拷贝,造成了存储空间的额外开销。本发明采用零拷贝技术,使拥有相同状态的节点指向同一份表示状态信息的数据,从而删去了多余的数据拷贝,降低了场景图的空间开销。
(4)本发明针对裁剪阶段是整个绘制循环的瓶颈的问题,采取了将场景图中的互为兄弟、拥有相同状态的静态叶子节点在预处理阶段合并的优化策略。合并前,这些叶子节点在绘制循环的裁剪阶段需要分别计算,判断是否加入最终绘制场景,计算的开销大。合并后,能减轻绘制循环的裁剪阶段压力,提高绘制效率。


图1为图形绘制引擎所处的位置示意图;图2为图形绘制引擎中通常的场景图;图3为场景图的生成过程示意图;图4为场景图中的Group节点和Leaf点的类图;图5为场景图中的Group派生类图;图6为LOD节点和其所在的子树;图7为Transform节点和其所在的子树;图8为本发明的优化步骤所处的位置示意图;图9、图10分别表示一个3d场景模型和一种可能的表示它的场景图内存结构;图11为本发明在叶节点层次上运用了节点合并策略之后的场景图结构;
图12为本发明包含有LOD节点的场景图;图13为本发明运用了LOD节点合并策略之后的场景图结构;图14为本发明包含有Transform节点的场景图;图15为本发明运用的Transform节点预计算策略后的场景图;图16为含有空节点,冗余节点的场景图;图17为运用了空节点,冗余节点消除策略后的场景图;图18为本发明一个示例场景图;图19为本发明在“建筑”子树上实施静态Transform预计算和相近LOD合并后的结果;图20为本发明在整个场景图上(“根子树”上)实施节点合并策略和消除空节点、冗余节点后的结果。
具体实施例方式
如图8所示,本发明在模型文件读入模块后,首先生成初始场景图,再对初始场景图进行优化设计,生成新场景图,然后运行库组件工作。本发明分为4个步骤进行优化,当然这4个步骤的顺序可以不同,4个步骤可以组合可以,也可以单独使用。
步骤(1),节点合并策略如图9、10、11所示,互为兄弟的多个Leaf(叶)节点,如果拥有相同状态控制信息,包围体相交则可以合并;同理互为兄弟的多个Group(组)节点,在拥有相同状态控制信息,包围体相交的情况下可以予以合并。如图10所示,Group2和Group3的包围体相交,可以进行合并。Leaf1、Leaf2、Leaf3的包围体相交;可以合并。Leaf4、Leaf5的包围体相交,可以合并;Leaf6、Leaf7的包围体相交,可以合并。如图11所示,Group2和Group3合并成Group23,包围体在合并后重新计算,范围将有所增大。Leaf1、Leaf2、Leaf3合并成Leaf123;Leaf4、Leaf5合并成Leaf45;Leaf6、Leaf7合并成Leaf67,它们的包围体都有所增大。
合并的具体步骤是在Leaf节点这一层次上,将同为兄弟的几个节点的几何描述信息予以合并,通常就是将互为兄弟节点的几个Leaf节点中的顶点位置数组,三角形列表,定点纹理坐标数组合并到其中的一个Leaf节点;将其与的参与合并的Leaf节点从场景图中删去。这样因为所有参与的合并的Leaf节点都有相同的状态控制信息,而最后留下的一个Leaf节点又拥有所有的几何信息,场景图可以正确得用以绘制。
步骤(2),相近LOD(层次细节)节点合并策略两个或是两个以上同在一个Group节点下的互为兄弟的LOD节点,如果中心距离接近,说明它们的包围盒有大部分重合,这些LOD节点可以合并起来。
如图12所示,LOD1有两个子节点Leaf3,Leaf4,范围列表中有两项(0,15)(15,),其中Leaf3对应的(0,15),Leaf4对应的(15,),表示视点距离LOD节点中心0到15单位的时候,只绘制Leaf3节点而不绘制Leaf4,在视点大于15的时候只绘制Leaf4不绘制Leaf3。同理LOD2。现在将两个LOD节点合并,将LOD2的子节点Leaf1,Leaf2移动到LOD1下边,将LOD2的范围列表合并到LOD1的范围列表中。删去LOD2。新的LOD节点中范围列表中有范围是重叠的,到视点在这些重叠的区域上,相应范围列表对应的子节点都要绘制。
步骤(3),静态Transform(变换)节点预计算策略将静态Transform的矩阵预先和其子孙节点做运算,在场景图中剔除Transform节点(不必移除,将变换矩阵置为单位矩阵,在绘制时遇到Transform节点包含的是单位矩阵,则不对变换矩阵栈压栈即可),可以提高绘制效率。
如图14所示,Transform节点的子树中还有可能有Transform节点,这种情况下,处于多层Transform节点下的绘制节点上施加的变换效果将叠加。如果图15所示,直接处于Transform1节点下的Leaf4的几何信息在绘制时要用Transform1的变换矩阵M1作用,直接处于Transform2节点下的Leaf2和Leaf3的几何信息在绘制时需要作用的变换矩阵是M1*M2。
步骤(4),消除空节点、冗余节点将空节点和冗余节点移除。初始场景图中还可能存在一些冗余Group节点,这样的Group节点特征是它不带状态控制信息,只有一个子节点。这样的节点在绘制时徒然增加遍历深度,将这类节点移除,提高时空效率。
如图16所示,节点Group2中没有包含任何的控制状态信息,Group也只有一个子节点,它是一个冗余节点,没有给绘制场景提供任何有用信息,没有提供对裁减有用的信息,因为它的包围体和它唯一的子节点的包围体一样,所以可以将它从场景图中剔除,剔除操作简单地改变被剔节点的父节点和子节点指针即可。Group4没有子节点,没有提供任何可以绘制的出得元素信息,可以予以剔除。图17表示剔除Group2和Group4后的场景图情况。
上述4个步骤可以组合使用为也可以单独使用。图18,19,20是一个具体的示例。
如图18是一个示例场景图,从图中看出在建模时应该是建好地形后加上建筑物,这样“建筑”子树上有一个静态转换节点,将建筑模型放到地形合适的位置上,还知道在这个子树中有一些表示树木的LOD,它们也许满足合并条件;汽车节点由于是在进入循环后要不停改变位置,所有“汽车”子树上有一个动态转换节点,于是只在“建筑”子树上使用静态Transform预计算策略和LOD节点合并优化策略,具体来说就是以“建筑”子树的指针做参数,先后调用两个优化函数,之后得到如图19的新的场景图,然后再对整个场景图做节点合并优化和去除空的冗余节点,具体来说就是以“根节点”指针做参数,先后调用两个优化函数,最后得到如图20的最终用于绘制的场景图。
总之,本发明在使场景图数据结构在用于绘制之前,经过一个预处理过程,发现那些影响图形绘制效率的部分,在保证绘制正确地情况下,对场景图数据结构做出调整,提高了绘制效率。
权利要求
1.面向图形绘制平台的场景图优化设计方法,其特征在于在模型文件读入模块后,首先生成初始场景图,再对初始场景图进行优化操作,生成新场景图,然后运行库组件工作,具体包括下列步骤(1)节点合并策略互为兄弟的多个Leaf节点和互为兄弟的多个Group节点,如果拥有相同状态控制信息,包围体相交则可以合并;(2)相近LOD合并策略两个或是两个以上同在一个Group节点下的互为兄弟的LOD节点,如果中心距离接近,进行LOD节点合并;(3)静态Transform节点预计算策略将静态Transform的变换矩阵预先和其子孙节点做运算,在场景图中剔除Transform节点;(4)消除空节点、冗余节点。
2.根据权利要求1所述的面向图形绘制平台的场景图优化设计方法,其特征在于所述的4个步骤可以单独使用,对场景图的局部使用。
3.根据权利要求1所述的面向图形绘制平台的场景图优化设计方法,其特征在于在整个场景图上或是场景图的某个局部,所述4个步骤可以组合使用或重复。
全文摘要
面向图形绘制平台的场景图优化设计方法,包括下列步骤(1)节点合并策略,互为兄弟的多个Leaf节点和互为兄弟的多个Group节点,如果拥有相同状态控制信息,包围体相交则可以合并;(2)相近LOD合并策略,两个或是两个以上同在一个Group节点下的互为兄弟的LOD节点,如果中心距离接近,进行LOD节点合并;(3)静态Transform节点预计算策略,将静态Transform的矩阵预先和其子孙节点做运算,在场景图中剔除Transform节点;(4)消除空节点、冗余节点。上述4个步骤可以组合使用也可以单独使用。使用本发明,在场景图数据结构用于绘制之前,经过一个预处理过程,发现那些影响图形绘制效率的部分,在保证绘制正确地情况下,对场景图数据结构做出调整,提高了绘制效率。
文档编号G06T1/00GK1773494SQ200510086659
公开日2006年5月17日 申请日期2005年10月20日 优先权日2005年10月20日
发明者何兵, 张桀宁 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1