一种基于双层嵌套网格的大规模地形绘制系统的制作方法

文档序号:6619223阅读:180来源:国知局
专利名称:一种基于双层嵌套网格的大规模地形绘制系统的制作方法
技术领域
本发明涉及一种基于双层嵌套网格的大规模地形绘制系统,属于虚拟现实技术领域。
背景技术
大规模地形的绘制在军事和民用方面都有着较为广泛的应用。不论是军事方面的战场地 形环境仿真、飞行训练模拟、军事指挥还是民用方面的城市规划、石油化工、图形引擎,大 规模地形的绘制都是其中必不可少的部分。
国内外针对大规模地形的实时绘制展开了广泛的研究,在地形主流的算法中,根据生成 的网格不同,可以分成两类基于不规则三角形的网格的算法和基于规整网格的算法。基于 不规则三角形的网格的算法直接用满足重要性条件的顶点生成网格。基于规整网格的算法从 DEM栅格数据出发,按照四叉树剖分或二叉树剖分的形式生成规整的三角形网格。
不规则三角形网格的代表算法有两种, 一个是渐进网格法,另外一个是批量动态自适应
网格算法。渐进网格法是1997年H叩pe提出的一种网格模型化简的方法,后来运用到地形 网格的化简之中。这是一种顶点以自顶向下的方式组织成层次结构,并基于视点对任意网格 执行简化的算法。根据一定的权值,对部分定点进行合并或分割,达到化简模型的效果。批 量动态自适应网格算法的主要思想是用四叉树管理纹理数据,用三角形簇的二叉树管理几何 数据,三角形簇采用TIN的形式,在预处理的时候用化简和条带化算法计算。由于不规则三 角形网格在更新网格的过程中需要重新对地形进行分析,跟踪三角形的邻接关系,进行一些 耗时的计算,所以在大规模地形绘制中一般不会被采用。
基于规则网格的算法种类比较多,在实际中应用较广。ROAM (Real-time Optimally Adapting Meshes,简称ROAM)算法的基本思想是在对地形进行三维显示时,根据视点的位 置和视线的方向来计算视点距离地形表面的三角片元的距离,再根据目标格网的空间粗糙程 度来判断是否对地形表面的三角片元进行一系列基于三角型二叉分割的分解和合并,最终生 成逼近真实地形的无缝无重叠的简化连续三角化地形表面。实时连续的层次细节绘制是由 Lindstrom在19恥年首先提出的,使用基于四叉树的边剖分方法表示地形,该算法自底向上 迭代合并三角形知道屏幕投影误差超出阀值,这样就减少了地形绘制所需的三角形数目。为 了确保三角形无裂痕,必须在顶点之间建立相互依赖关系。在顶点处于活动状态,即该顶点 用来表示地形网格时,需要通知它所依赖的顶点,只有所有的孩子节点不处于活动状态,父 节点才可以处于非活动状态。2001年,SOAR算法的主要思想包括了自顶向下逐步求精;提出了物体空间和屏幕空间的饱和误差;合理组织了数据结构,适应内外存间的调度。SOAR 算法在规则网格上采用基于视点的最长边剖分方法,自顶向下逐步求精,每一帧均采用相同 的步骤,并且把三角形条带化,视域剔除,以及地形的几何过渡都集中在这一步骤中,使得 执行起来更为方便。同时,该算法提出了物体空间和屏幕空间的饱和误差,来隐式的表示顶 点的依赖关系,使得构网时无须对有依赖关系的顶点通知更新,而自动保证构阿无T-连接, 使得自顶向下遍历更为简单。它提出一种有效的顶点布局方法(基于空间填充曲线)组织整 个外存模型的数据,能利用顶点的局部性提高内存数据和外存数据之间的存储一致性,以减 少内外存之间数据页面调度的次数。Chunked L0D算法的核心思想就是一棵静态的、事先计 算的网格四叉树。这棵树以它的组成网格(chunks)在程序预处理阶段从一个高分辨率的网 格中产生的。每个chunk都是一个静态的三角形面片簇。树的根节点chunk是整块地形的一 个低分辨率表示。根节点的四个儿子节点将整块地形分成了四个部分,每一部分独立的代表 整块地形的四分之一。同时儿子节点的分辨率也比父节点要高。Chunked LOD算法的优点为 高三角形面片吞吐量;低CPU负载;有效的利用了三角形面片聚簇;网格LOD有效的结合了 纹理L0D;易于处理海量数据;有效的、光滑的定点过度,没有顶点跳变;当顶点迅速变化
时也能保持相当低的CPU负载。Chunked LOD算法也有如下缺点预处理时间比较长;地形 数据必须是静态的;比较其它的LOD算法,在相同的屏幕误差测度下,三角形面片数目有更 大的冗余;对于可处理的数据量有一定的上限,虽然这个上限是用户可以控制的。2004年 H叩pe等人提出了嵌套网格算法,嵌套网格算法把地形缓存在一组嵌套的规则网格中,同时 在观察点移动吋,不断更新这些数据。嵌套网格算法框架中把地形作为一张2D的高度图来 处理,并预先把它过滤为一张包含L层的mipmap金字塔。在该算法中仅以视点到地形的距 离作为衡量标准,对DEM金字塔多分辨率模型分别计算每一层的可视区域大小,这样就组成 了一个个逐层嵌套的矩形环。当视点移动时,可视区域也随之进行更新,然后计算每一层的 渲染区域,进行图元装配发送给图形渲染管线。

发明内容
本发明要解决的技术问题是克服了现有技术的不足,提供一种基于双层嵌套网格的大 规模地形绘制系统,并且保证其实时性。
本发明采用的技术方案为系统由预处理模块和实时绘制模块组成。其中,预处理模块 将绘制时所需要的DEM数据和纹理数据进行离线的预先处理将粗糙层次的分辨率控制在一 定的阀值内,进行存储;对精细层次进行分层分块处理,将处理后的地形块数据存储在外存 中;实时绘制模块负责大规模地形的实时绘制,该模块又包含场景模型的绘制和场景模型的 更新两个子模块。场景模型的绘制子模块的功能包括T连接的消除、视域剔除、几何过渡以及两个层次的融合;场景模型的更新子模块根据视点的变化改变各地形区域的精细程度,并 对地形海量数据的预调度进行控制。地形场景的绘制子模块和更新子模块分为两个线程执 行,这样能够明显的提高大规模地形场景的绘制速度。
本发明的特点在于采用双层嵌套网格算法如图l所示,在预处理模块处理过程中,需要 分别对精细层次和粗糙层次的数据进行处理。将粗糙层次的分辨率控制在一定的阀值内,进 行存储,在实时绘制开始前加载入内存。精细层次分层分块进行存储。在实时绘制模块处理 过程中,首先构建双层模型,然后分别绘制粗糙层次和精细层次,需要对精细层次进行一些 处理,包括T连接的消除、视域剔除和几何过渡,最后,在GPU上对两层地形进行融合。当 下一帧绘制开始前,要对地形进行必要的更新,进入下一帧的绘制。本系统具体步骤如下
在预处理阶段,分别对精细层次和粗糙层次的数据进行处理。将粗糙层次的分辨率控制 在一定的阀值内,进行存储,在实时绘制开始前加载入内存。精细层次分层分块进行存储。 在实时绘制阶段,首先构建双层模型,然后分别绘制粗糙层次和精细层次,需要对精细层次 进行一些处理,包括T连接的消除、视域剔除和几何过渡,最后,在GPU上对两层地形进行 融合。当下一帧绘制开始前,要对地形进行必要的更新,进入下一帧的绘制。
在传统的分层分块算法中有大量低分辨率却数量巨大的地形块存在,这些地形块在视域 剔除和地形绘制时需要占用大量的时间。在本发明中将这些低分辨率的地形块组织成为粗糙 层次,在GPU中对其进行处理,这样能够提高地形绘制的速度。同时,根据嵌套网格所采用 的数据预调度也能够减少帧循环期间外存数据的实时调度,使得在帧循环阶段避免数据的实 时调度。
本发明与现有技术相比的优点在于在保证大规模地形绘制效果的同时,明显提高了绘 制速度,在漫游时获得比较平稳的帧率和流畅的视觉感受。


图1为基于双层嵌套网格的大规模地形绘制系统绘制框架图2a、图2b为精细层次的更新;
图3为两层地形模型的地表细节的区别;
图4a、图4b为精细层次的预装载;
图5为本系统绘制帧率;
图6为本系统精细层次每帧绘制的三角形数量; 图7a、图7b为本系统绘制得到的地形场景效果图。
具体实施例方式
本发明的具体实施方法如下
6本方法所实现的地形场景系统的框架图如图l所示。在预处理阶段,我们需要分别对精 细层次和粗糙层次的数据进行处理。我们将粗糙层次的分辨率控制在一定的阀值内,进行存 储,在实时绘制开始前加载入内存。精细层次分层分块进行存储(步骤1)。在实时绘制阶段, 首先构建双层模型(步骤2),然后分别绘制粗糙层次和精细层次,我们需要对精细层次进行 一些处理,包括T连接的消除(步骤3)、视域剔除(步骤4)和几何过渡(步骤5),最后, 我们在GPU上对两层地形进行融合(步骤6)。当下一帧绘制开始前,我们要对地形进行必要 的更新(步骤7),进入下一帧的绘制。
在步骤1中,我们将精细层次的DEM数据分层分块后,将一定数量的地形块DEM数据组 织在一个文件内,我们不只存放这些地形块最精细程度的DEM数据,也存放这些地形块不同 精细程度的DEM数据,由于我们对每一精细程度DEM数据的采样都是其更精细程度数据采样 的1/4,这样我们的DEM数据量会增加大约1/3。虽然这样会增加DEM数据在外存存储时所 需要的数据量,但是相对于只存储最精细程度DEM数据的方法,这样能够减少地形块DEM数 据载入内存时所需的数据量,同时载入的DEM数据也不需要额外的处理。我们将存放DEM数 据的文件大小控制在200KB以下,这样能够提供很好的数据读取速度。
在步骤2中,本方法将场景模型分为两层精细层次(levelFine)和粗糙层次 QevelCoaxse)。
精细层次由一个中心区域(Central Area) —定数量的环构成。中心区域由3*3个地形 块构成。在中心区域外有一定数量的环,我们定义其为Rl, R2,…Rn (n〉=0),其中Rl为紧邻 中心区域的环,Rn为精细层次中最外层的环。Rl层次中每个地形块所包含三角形的数量是 中心区域每个地形块所包含三角形数量的1/4,对于任意i, Ri层次中每个地形块三角形的 数量都是Ri-l层次中每个地形块三角形数量的1/4 (i=2,3,…n)。层次Ri (i=l,2,…n)所 包含的地形块宽度为2i块,这样对于层次Ri (i=2,3,…n),其宽度是层次Ri-l宽度的2 倍,对于大规模地形,这样能够取得比较好的绘制效果。
粗糙层次的分辨率是精细层次中最外层环分辨率的1/4。这样能够简单的在几何空间内 对两层地形模型进行融合。在本方法中,以显示列表的形式保存粗糙层次,在预处理过程中 可以对粗糙层次的精细程度进行控制,并在绘制开始时,将粗糙层次载入显存,绘制过程中 不必对其进行换入换出操作。
在步骤3中,我们采用如下方法
在绘制过程中,精细层次中不同环交界处以及精细层次和粗糙层次交界处相邻的两个地 形块之间由于精细程度不一样,这样在两个地形块共享边的时候,会导致T连接产生。在本 方法中采用一种简单快速的方法消除T连接。在该算法中,我们能够明确的知道不同层次间相邻地形块相对于观察者所在地形块的位置。这样在不需要知道相邻地形块精细程度的情况 下,我们也能根据每一个地形块的位置来判断其是否需要改变某条边上的顶点的连通性。同 时,由于粗糙层次每个地形块所包含三角形的数量都是精细层次中最外层环地形块所包含三 角形数量的1/4,所以在精细层次最外层环上和粗糙层次相邻的地形块上,我们改变其和粗 糙层次共享边上的顶点的连通性,就能够保证精细层次和粗糙层次的无缝连接。这样,我们 -只要对精细层次中中心区域和每个环外边界上的地形块进行处理,而不需要对粗糙层次进行 处理,就能够消除整个场景模型中的T连接。 在步骤4中,我们采用如下方法
在绘制过程中,视域剔除能够减少需要绘制的地形块的数量,从而提高绘制速度。在本 方法中,粗糙层次保存在显示列表中,我们并不对其进行视域剔除处理,而只对精细层次进 行视域剔除处理。我们只绘制在视椎体内的地形块,对于视域为90的观察者来说,能够将 渲染负载减少到视域剔除前的1/4左右。
在步骤5中,我们采用如下方法
在地形场景的实时漫游中,允许地形有微小的局部几何变化,但是精细程度的变化可能 会导致几何细节变化太大,从而导致空间和视觉上的跳跃。为了解决这个问题,我们需要对 变化太大的区域进行几何过渡处理。在大规模地形场景的绘制中,几何过渡都是重要并且棘 手的问题,因为为了确定需要进行插值的点,需要对大量的顶点甚至是全部顶点在前后两帧 的高度变化进行记录和比较,对于大规模地形这种具有海量顶点信息的情况来说,这样处理 是非常耗时的,同时也额外占用大量的存储空间。由于每一帧都需要几何过渡的处理,这会 严重影响到绘制的效率。
在本方法中,我们并不需要对大量的顶点进行记录和比较。如图5所示,图中标有L 和R的地形块在更新时会有精细程度的改变,只有这些地形块需要进行几何过渡处理,而其 余的地形块由于精细程度没有改变,是不需要进行几何过渡处理的。在大规模地形绘制中, 需要进行几何过渡的地形块是很少的。
在图3. a情况下,我们需要进行几何过渡的地形块数量为
M。 (") = i。 (w) +凡(")=2' 5" [2(! + 2) -1] = 2(" + 4) - 2" -10
/ = 0
在图3. b情况下,我们需要进行几何过渡的地形块数量为
MA (") = A (") + & (") = 2' F [2('' + 3) — 3] = 2(打+ 5) _ 6" — 22
这样处理能够很好的解决精细层次中所存在的顶点跳动的问题,但是无法处理精细层次最外层环和粗糙层次交界处由于视点变化所带来的视点跳动问题。由于粗糙层次和精细层次 分为两遍绘制,而粗糙层次使用显示列表进行存储,不利于数据的更改。 一个可行的办法是 我们在精细层次最外层环外再加上一个地形块宽度的环形区域,其中地形块分辨率同粗糙层 次一致,这样我们可以对这个环形区域里的地形块进行处理,解决几何过渡的问题。 在步骤6中,我们采用如下方法-
如果不对精细层次和粗糙层次进行处理,直接进行两遍绘制的话,由于两层地形的精度 不一样,必然导致两层地形的地表形状不一致。若不对两层地形进行处理而直接进行绘制的 话,两层模型会互相遮掩,不仅会导致地表细节信息的丢失,还会因为两层地形地表高度信 息的不一致,导致最终绘制画面的闪烁,所以必须对两层地形进行处理。由于粗糙层次以显 示列表的形式存在于显存中,从而无法用传统的方法对两层地形进行处理。我们在着色器中 对两层地形进行处理。由于两层地形都是用规则的网格表示,所以我们在几何空间对两层地 形进行镶嵌。我们将视点所在的地形块的坐标传入着色器,我们可以计算得到两层地形重合 的地方。在两遍绘制中,我们先绘制精细层次,在着色器中不用对精细层次进行特殊处理, 绘制粗糙层次时,我们需要计算得到需要绘制的区域,丢弃不需要绘制区域里的所有片元, 从而解决两层地形互相遮掩的问题。
在步骤7中,我们采用如下方法
在地形场景中漫游时,如果观察者在中心区域里中间的地形块内移动时,场景模型是不 需要更新的。当观察者从该地形块进入相邻的地形块时,就需要对场景模型进行更新。
粗糙层次是不需要更新的,它所需要做的只是根据视点所在地形块的改变,改变其需要 绘制的区域。
精细层次的更新如图2所示。图2表示了精细层次中中心区域和Rl区域更新时所需处 理的地形块,其中标记有L的地形块由于需要从较低层次进入较高层次,我们需要从外存中 载入该地形块较高层次的DEM数据。标记有R的地形块是从较高层次进入较低层次的地形块, 这些地形块不用重新载入DEM数据,而是可以使用该地形块原有的DEM数据得到更新后所需 的DEM数据。图2.a表示了视点从当前地形块进入与其有相连边的地形块时的情况,在地形 场景中漫游时,绝大部分时候都是这种情况,但视点也有可能进入与当前地形块只有一个顶 点相连的地形块,此时精细层次的更新如图2. b所示。
我们规定屮心区域为第0层,Rl为第1层,以此类推,Rn为第n层(n为大于等于0 的整数),在图3.a情况下,我们更新吋所需加载数据的地形块数量为-
,,、^"r,(/+2;i ,, ,(《+3) 《
z' = 0需要重用更新前数据的地形块数量同需要加载数据的地形块数量一样
<formula>formula see original document page 10</formula>
在图3. b情况下,我们更新时所需要加载数据的地形块数量为
<formula>formula see original document page 10</formula>
需要重用更新前数据的地形块数量同需要加载数据的地形块数量一样
<formula>formula see original document page 10</formula>
由于很好的控制了需要加载数据的地形块的数量,这样能够保证在地形场景的漫游中, 尽量减少1/0这种耗时操作所带来的影响,使得漫游时视觉效果更加流畅。
我们根据嵌套网格的特点,提出一种简单精确的数据预装载策略。图4表示了精细层次 部分区域的数据预调度策略,其中4.a表示中心区域的预装载,红色区域为绘制区域,绿色 区域为预装载区域,两个区域中地形块的精细程度是一样的;图4.b表示了紧邻中心区域的 第一层环的预调度,红色和绿色区域的意义同图4.a—样。通过采用这种数据预装载策略, 我们能够有效的减少在场景模型中漫游时所需的数据实时装载。如图2所示,当场景模型进 行更新时,需要重新载入DEM数据的地形块总是在该层地形区域的外围一个地形块宽度的环 状区域里,也就是图4中绿色区域所示。.我们将绿色区域预装载进内存,在场景模型进行更 新的时候,就不再需要从外存载入数据,进行耗时的i/o操作。
我们将场景模型的绘制和海量数据的调度分别安排在两个线程中工作,尽可能减少DEM 数据和纹理数据的实时装载。
权利要求
1、一种基于双层嵌套网格的大规模地形绘制系统,其特征在于步骤如下该大规模地形绘制系统分为预处理模块和实时绘制模块;步骤1在预处理模块处理过程中,需要分别对精细层次和粗糙层次的数据进行处理;将粗糙层次的分辨率控制在一定的阀值内,进行存储,在实时绘制开始前加载入内存;精细层次分层分块进行存储;在实时绘制模块处理过程中,步骤2首先构建双层模型,然后分别绘制粗糙层次和精细层次,需要对精细层次进行一些处理,步骤6最后,在GPU上对两层地形进行融合;当下一帧绘制开始前,步骤7要对地形进行必要的更新,进入下一帧的绘制。
2、 根据权利要求1所述的一种基于双层嵌套网格的大规模地形绘制系统,其特征在于 所述对精细层次进行一些处理,包括步骤3: T连接的消除;步骤4:视域剔除;步骤5: 几何过渡。
3、 根据权利要求1所述的一种基于双层嵌套网格的大规模地形绘制系统,其特征在于在步骤1中,将精细层次的DEM数据分层分块后,将一定数量的地形块DEM数据组织在一个 文件内,对每一精细程度DEM数据的采样都是其更精细程度数据采样的1/4。
4、 根据权利要求1所述的一种基于双层嵌套网格的大规模地形绘制系统,其特征在于 在步骤2中,将场景模型分为两层精细层次levelFine和粗糙层次levelCoarse;精细层 次由一个中心区域Central Area —定数量的环构成;粗糙层次的分辨率是精细层次中最外 层环分辨率的l/4;这样能够简单的在几何空间内对两层地形模型进行融合;以显示列表的 形式保存粗糙层次,在预处理过程中可以对粗糙层次的精细程度进行控制,并在绘制开始时, 将粗糙层次载入显存。
5、 根据权利要求2所述的一种基于双层嵌套网格的大规模地形绘制系统,其特征在于 在步骤3中,能根据每一个地形块的位置来判断其是否需要改变某条边上的顶点的连通性, 只要对精细层次中中心区域和每个环外边界上的地形块进行处理,而不需要对粗糙层次进行 处理,就能够消除整个场景模型中的T连接。
6、 根据权利要求2所述的一种基于双层嵌套网格的大规模地形绘制系统,其特征在于-在步骤4中,将粗糙层次保存在显示列表中,不对其进行视域剔除处理,而只对精细层次进 行视域剔除处理;只绘制在视椎体内的地形块,对于视域为90的观察者来说,能够将渲染 负载减少到视域剔除前的1/4左右。
7、 根据权利要求2所述的一种基于双层嵌套网格的大规模地形绘制系统,其特征在于 在步骤5中,能够根据视点信息得到地形块的更新信息,只需对更新地形块进行几何过渡,就能很好的处理精细层次内的几何过渡问题,同时在精细层次最外层环外再加上一个地形块 宽度的环形区域,其中地形块分辨率同粗糙层次一致,这样可以对这个环形区域里的地形块 进行处理,解决两层次几何过渡的问题。
8、 根据权利要求1所述的一种基于双层嵌套网格的大规模地形绘制系统,其特征在于-在步骤6中,在着色器中对两层地形进行处理;由于两层地形都是用规则的网格表示,所以 在几何空间对两层地形进行镶嵌;将视点所在的地形块的坐标传入着色器,计算得到两层地 形重合的地方;在两遍绘制中,先绘制精细层次,在着色器中不用对精细层次进行特殊处理, 绘制粗糙层次时,计算得到需要绘制的区域,丢弃不需要绘制区域里的所有片元,从而解决 两层地形互相遮掩的问题。
9、 根据权利要求1所述的一种基于双层嵌套网格的大规模地形绘制系统,其特征在于-在步骤7中,将场景模型的绘制和海量数据的调度分别安排在两个线程中工作,尽可能减 少DEM数据和纹理数据的实时装载;为精细层次的中心区域和每个环状区域提供一个环形的 缓冲区域,对数据进行预调度。
全文摘要
本发明涉及一种基于双层嵌套网格的大规模地形绘制系统。该系统由预处理模块和实时绘制模块组成。其中,预处理模块将绘制时所需要的DEM数据和纹理数据进行离线的预先处理将粗糙层次的分辨率控制在一定的阀值内,进行存储;对精细层次进行分层分块处理,将处理后的地形块数据存储在外存中;实时绘制模块负责大规模地形的实时绘制,该模块又包含场景模型的绘制和场景模型的更新两个子模块。场景模型的绘制子模块的功能包括T连接的消除、视域剔除、几何过渡以及两个层次的融合;场景模型的更新子模块根据视点的变化改变各地形区域的精细程度,并对地形海量数据的预调度进行控制。地形场景的绘制子模块和更新子模块分为两个线程执行,明显的提高大规模地形场景的绘制速度。
文档编号G06T15/10GK101593361SQ20091008790
公开日2009年12月2日 申请日期2009年6月25日 优先权日2009年6月25日
发明者兵 何, 王莉莉, 赵沁平, 郝爱民, 雷 隋 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1