首页 / 专利库 / 资料储存系统 / 高速缓冲存储器 / 顶点缓存 / 一种三维地理信息系统实时绘制多线程分配与控制方法

一种三维地理信息系统实时绘制多线程分配与控制方法

阅读:1018发布:2020-06-23

专利汇可以提供一种三维地理信息系统实时绘制多线程分配与控制方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种三维 地理信息系统 实时绘制多线程分配与控制方法。从绘制流 水 线本身的特征出发,在三维城市模型数据特点的 基础 上,统筹整个实时绘制过程中的代价,将数据加载代价与图元绘制代价统一考虑,进行三维城市的模型数据组织;基于三维城市模型数据及其应用的特点,采用CPU多线程分配加载与绘制任务以及GPU多线程分配基于 顶点 与象素 数据处理 内核 线程;通过实时资源监测来动态调节CPU线程资源与GPU处理线程与缓存分配,以实现CPU与GPU资源的高利用率与绘制的实时和平稳。,下面是一种三维地理信息系统实时绘制多线程分配与控制方法专利的具体信息内容。

1.一种三维地理信息系统实时绘制多线程分配与控制方法,其特征在于,包括如下步骤:
(1)读取三维城市数据文件,从中解析出目标对象,提取出每个目标对象的几何部分和纹理部分,计算每个目标对象包含的几何数据量与纹理数据量;
(2)对每一个目标对象,计算其空间包围盒,并创建场景管理节点对象,将空间包围盒作为场景管理节点对象的几何特征,将几何数据量和纹理数据量作为场景管理节点对象的属性;计算场景管理节点对象的数据加载代价因子和图元绘制代价因子;
(3)获取场景管理节点对象的整体空间范围,构建三维城市模型,使用k-d树空间索引方法由上至下对三维城市模型进行空间剖分,得到k-d树空间索引;其中,叶节点的生成规则为:使每个叶节点的总代价因子小于阈值,叶节点的总代价因子为叶节点包含的场景管理节点对象的总代价因子之和,场景管理节点对象的总代价因子为其数据加载代价因子与图元绘制代价因子之和;
(4)先序遍历k-d树空间索引,将叶节点的数据加载代价因子、图元绘制代价因子和总代价因子分别累加到上一层中间节点,得到中间节点的数据加载代价因子、图元绘制代价因子和总代价因子;将每个叶节点内所有场景管理节点对象的数据作为一个整体生成几何存储数据和纹理存储数据块后,分别写入几何映射文件和纹理映射文件;
(5)将空间索引结构单独生成空间索引文件,加载空间索引文件,获取可视视点的位置并计算可视区域,将可视区域与k-d树空间索引求交,获取当前位置下的可见节点;根据可见的中间节点的数据加载代价因子及存储硬件参数计算其数据加载代价,根据可见的叶节点的图元绘制代价因子及图形绘制硬件参数计算其图元绘制代价;分别根据可见的中间节点的数据加载代价和可见的叶节点的图元绘制代价生成加载列表和绘制列表;
(6)建立CPU线程池,根据实时绘制率的时间要求和可见的中间节点的数据加载代价,计算加载列表中需要设置的加载线程数量,从CPU线程池中分配加载线程进行数据加载;从几何映射文件和纹理映射文件中提取可见的叶节点的几何数据和纹理数据,解析出可见的叶节点的图元数量,根据可见的叶节点的图元绘制代价,建立GPU处理内核线程管理对象,动态分配内核处理线程数量;
(7)实时监测帧内数据加载和图元绘制加载用时t1以及绘制用时t2,在帧内加载绘制用时t1+t2大于帧率时间时,强制中断当前帧内的加载与绘制,确保当前帧率的稳定,并利用相邻帧的结余时间动态调整帧间加载线程和绘制内核线程,最终实现帧间平稳绘制。
2.如权利要求1所述的三维地理信息系统实时绘制多线程分配与控制方法,其特征在于,所述步骤(1)中,读取三维城市数据文件,从中解析出实体对象,根据城市三维建模技术规范对实体对象进行分类,将建筑物、道路、管线和其它设施四类实体对象作为目标对象。
3.如权利要求1或2所述的三维地理信息系统实时绘制多线程分配与控制方法,其特征在于,所述步骤(2)中,场景管理节点对象的数据加载代价因子为:
其中,k1为几何数据加载传输率系数,n为场景管理节点对象的几何数据文件数,Size(filegeometry,i)为第i个几何数据文件的数据量,k2为纹理数据加载传输率系数,l为场景管理节点对象的纹理数据文件数,Size(filetexture,j)为第j个纹理数据文件的数据量。
4.如权利要求1或2所述的三维地理信息系统实时绘制多线程分配与控制方法,其特征在于,所述步骤(2)中,场景管理节点对象的图元绘制代价因子为:
其中,Numvertex为场景管理节点对象的顶点数,α1为顶点数与绘制时间的关系系数,Numtriangle为场景管理节点对象的三形数,α2为三角形数与绘制时间的关系系数,Numpixel为场景管理节点对象的纹理象素,α3为纹理象素与绘制时间的关系系数。
5.如权利要求1或2所述的三维地理信息系统实时绘制多线程分配与控制方法,其特征在于,所述步骤(4)中,几何存储数据块写入几何映射文件的位置以及纹理存储数据块写入纹理映射文件的位置按照k-d树空间索引先序遍历的顺序。
6.如权利要求1或2所述的三维地理信息系统实时绘制多线程分配与控制方法,其特征在于,所述步骤(7)中,相邻帧的结余时间为帧率时间与相邻帧的帧内加载绘制用时之差。

说明书全文

一种三维地理信息系统实时绘制多线程分配与控制方法

技术领域

[0001] 本发明属于地理空间信息系统技术领域,更具体地,涉及一种三维地理信息系统实时绘制多线程分配与控制方法。

背景技术

[0002] 当人们在使用Google Earth,NASA World Wind以及Microsoft Virtual Earth等工具来漫游地球影像时,一种全新的浏览方式震撼了普普通通的人们,使得人们可以足不出户地来认识我们生存的这个世界,可以从电脑屏幕来看看那梦寐以求的地方是什么样子的。然而,随着人类活动的发展,只是从影像上看我们的世界,由于其限定的视、阴影、建筑物等遮挡等因素的限制,渐渐不能满足人们的要求。人们更多地期待日常生活中的各种对象真实再现于虚拟现实,使人有身临其境的感觉。并且要求人们能够与环境进行实时的交互操作。
[0003] 随着计算机技术的发展,人们在数据获取技术上也取得了飞速的进步,数据获取的手段更加丰富,建模技术更加精确和快捷:表现在CAD建模技术,三维激光扫描技术,全自动或半自动数字摄影测量建模,科学试验算法模拟数据生成以及航空、航天手段遥感数据。数据获取范围越来越大,精度越来越高,更新周期也越来越快。数据获取手段发展的一个重要表现是数据的精确度提高,对建模对象的表达更加精细。在以格网进行表达的模型中,顶点越来越密集,多边形数越来越多,纹理的精度也越来越高,这些都使用以表达模型的数据量以爆炸式增长,表达一个场景的数据量达几十个GB甚至TB级。
[0004] 所谓实时绘制(real time rendering),是指系统在限定的时间内完成场景中各对象的位置姿态的计算与图像绘制,使画面更新平滑,随用户视点的改变画面的更新必须达到人眼察觉不到闪烁的程度(画面更新速度至少应达到24/秒);同时能够对用户的输入,如模拟飞行时对飞行的位置、方向的控制,立即做出响应,并同步更新相应的场景及事件,并产生相应的环境和场景,以实现用户与系统的实时交互。因此,实时绘制要实现以下指标:一、使得渲染的速度可以达到24FPS以上;二、维持在这个速率对场景进行渲染与用户交互反应;三、反应的外部事件的时间应在100毫秒内。
[0005] 当前计算机技术硬件发展中,CPU与GPU的发展速度远远超过存储器容量与访问速度提高的速度,同时,随着数据获取技术的进步,模型表达所采用的数据量呈爆炸性增长。模型的数据量是无法全部同时加载到系统的内存中的,场景的复杂度已经远远超过当前硬件的渲染能。提高实时绘制的能力主要的途径可以从硬件与软件两个方面进行。硬件方面:通过提高计算处理的速度,包括CPU的处理速度以及GPU的处理速度,使图像生成绘制时间变短。软件方面:从绘制算法入手,包括减少图形画面的复杂度和提高图形实时生成的能力。软件的方法可以分为两个大类:一是提高绘制管道效率,二是减少场景进入绘制的数据量。
[0006] 大规模三维城市模型实时绘制的瓶颈在于数据量巨大引起的大量I/O操作导致的延迟以及绘制管线中的不平衡。在使用简化与剔除方法的基础上,在保证绘制图像质量的前提下,尽可能减少模型表达的数据量时,数据量仍不能满足完全加载的要求。因此,对数据的组织与加载成为决定能否达到场景完整实时绘制的关键。

发明内容

[0007] 针对现有技术的以上缺陷或改进需求,本发明提供了一种三维地理信息系统实时绘制多线程分配与控制方法,针对大规模三维城市模型中实时漫游绘制时,模型数据的动态调度困难的问题,从绘制过程本身出发,以实时绘制为目的,将数据加载代价、图元绘制代价反映到三维城市场景模型的组织与存储过程中,并以实时监测的代价为依据动态调节处理器多核资源,实现加载过程与绘制过程的平衡。
[0008] 为实现上述目的,本发明提供了一种三维地理信息系统实时绘制多线程分配与控制方法,其特征在于,包括如下步骤:(1)读取三维城市数据文件,从中解析出目标对象,提取出每个目标对象的几何部分和纹理部分,计算每个目标对象包含的几何数据量与纹理数据量;(2)对每一个目标对象,计算其空间包围盒,并创建场景管理节点对象,将空间包围盒作为场景管理节点对象的几何特征,将几何数据量和纹理数据量作为场景管理节点对象的属性;计算场景管理节点对象的数据加载代价因子和图元绘制代价因子;(3)获取场景管理节点对象的整体空间范围,构建三维城市模型,使用k-d树空间索引方法由上至下对三维城市模型进行空间剖分,得到k-d树空间索引;其中,叶节点的生成规则为:使每个叶节点的总代价因子小于阈值;(4)先序遍历k-d树空间索引,将叶节点的数据加载代价因子、图元绘制代价因子和总代价因子分别累加到上一层中间节点,得到中间节点的数据加载代价因子、图元绘制代价因子和总代价因子;将每个叶节点内所有场景管理节点对象的数据作为一个整体生成几何存储数据和纹理存储数据块后,分别写入几何映射文件和纹理映射文件;(5)将空间索引结构单独生成空间索引文件,加载空间索引文件,获取可视视点的位置并计算可视区域,将可视区域与k-d树空间索引求交,获取当前位置下的可见节点;根据可见的中间节点的数据加载代价因子及存储硬件参数计算其数据加载代价,根据可见的叶节点的图元绘制代价因子及图形绘制硬件参数计算其图元绘制代价;分别根据可见的中间节点的数据加载代价和可见的叶节点的图元绘制代价生成加载列表和绘制列表;(6)建立CPU线程池,根据实时绘制帧率的时间要求和可见的中间节点的数据加载代价,计算加载列表中需要设置的加载线程数量,从CPU线程池中分配加载线程进行数据加载;从几何映射文件和纹理映射文件中提取可见的叶节点的几何数据和纹理数据,解析出可见的叶节点的图元数量,根据可见的叶节点的图元绘制代价,建立GPU处理内核线程管理对象,动态分配内核处理线程数量;(7)实时监测帧内数据加载和图元绘制加载用时t1以及绘制用时t2,在帧内加载绘制用时t1+t2大于帧率时间时,强制中断当前帧内的加载与绘制,确保当前帧率的稳定,并利用相邻帧的结余时间动态调整帧间加载线程和绘制内核线程,最终实现帧间平稳绘制。
[0009] 优选地,所述步骤(1)中,读取三维城市数据文件,从中解析出实体对象,根据城市三维建模技术规范对实体对象进行分类,将建筑物、道路、管线和其它设施四类实体对象作为目标对象。
[0010] 优选地,所述步骤(2)中,场景管理节点对象的数据加载代价因子为:
[0011]
[0012] 其中,k1为几何数据加载传输率系数,n为场景管理节点对象的几何数据文件数,Size(filegeometry,i)为第i个几何数据文件的数据量,k2为纹理数据加载传输率系数,l为场景管理节点对象的纹理数据文件数,Size(filetexture,j)为第j个纹理数据文件的数据量。
[0013] 优选地,所述步骤(2)中,场景管理节点对象的图元绘制代价因子为:
[0014]
[0015] 其中,Numvertex为场景管理节点对象的顶点数,α1为顶点数与绘制时间的关系系数,Numtriangle为场景管理节点对象的三角形数,α2为三角形数与绘制时间的关系系数,Numpixel为场景管理节点对象的纹理象素,α3为纹理象素与绘制时间的关系系数。
[0016] 优选地,所述步骤(3)中,叶节点的总代价因子为叶节点包含的场景管理节点对象的总代价因子之和,场景管理节点对象的总代价因子为其数据加载代价因子与图元绘制代价因子之和。
[0017] 优选地,所述步骤(4)中,几何存储数据块写入几何映射文件的位置以及纹理存储数据块写入纹理映射文件的位置按照k-d树空间索引先序遍历的顺序。
[0018] 优选地,所述步骤(7)中,相邻帧的结余时间为帧率时间与相邻帧的帧内加载绘制用时之差。
[0019] 总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:本发明从绘制流线本身的特征出发,在三维城市模型数据特点的基础上,统筹整个实时绘制过程中的代价,将数据加载代价与图元绘制代价统一考虑,进行三维城市模型的数据组织;基于三维城市模型数据及其应用的特点,采用CPU多线程分配加载与绘制任务以及GPU多线程分配基于顶点与象素数据处理内核线程;通过实时资源监测来动态调节CPU线程资源与GPU处理线程与缓存分配,以实现CPU与GPU资源的高利用率与绘制的实时和平稳。附图说明
[0020] 图1是本发明的三维地理信息系统实时绘制多线程分配与控制方法原理示意图;
[0021] 图2是计算场景管理节点对象的数据加载代价因子和图元绘制代价因子的流程图
[0022] 图3是基于代价平衡的k-d树分割流程图;
[0023] 图4是计算中间节点的总代价因子的流程图;
[0024] 图5是几何与纹理数据磁盘映射文件结构图;
[0025] 图6是帧内线程分配与中断机制示意图;
[0026] 图7是基于数据加载代价与图元绘制代价的绘制算法动态调节流程图。

具体实施方式

[0027] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0028] 如图1所示,本发明的三维地理信息系统实时绘制多线程分配与控制方法考虑三维城市模型对象的加载代价和绘制代价,并通过空间化组织,形成节点代价平衡的空间索引树为依据,重新组织数据的存储;实时运行过程中,通过监测系统运行中的加载、绘制以及CPU与显示的利用率,以数据加载代价和图元绘制代价为依据,以线程为单位,动态调节数据加载线程数量以及GPU内核处理数量来协同实时绘制过程中的加载与绘制,实现平稳实时绘制。
[0029] 本发明实施例的三维地理信息系统实时绘制多线程分配与控制方法包括如下步骤:
[0030] (1)读取三维城市数据文件(包括几何数据文件和纹理数据文件),从中解析出实体对象,根据城市三维建模技术规范对实体对象进行分类,将建筑物、道路、管线和其它设施四类实体对象作为目标对象,根据常用的数据格式及其对象描述结构,提取出每个目标对象的几何部分和纹理部分,计算每个目标对象包含的几何数据量与纹理数据量;针对每个数据文件创建临时场景对象节点文件,用于记录每个目标对象的几何数据量与纹理数据量,完成对所有场景的数据文件的读取。
[0031] 在本发明的一个实施例中,使用增量的方法,读取三维城市模型数据,以单个目标对象为单位,统计其几何数据量与纹理数据量,单位为字节,对每个目标对象分别存储其几何数据存储量,纹理数据存储量以及总数据存储量三个值。
[0032] (2)读取临时场景对象节点文件,取出目标对象,对每一个目标对象,计算其空间包围盒,并创建场景管理节点对象,将空间包围盒作为场景管理节点对象的几何特征,将几何数据量和纹理数据量作为场景管理节点对象的属性;利用场景管理节点对象的几何数据文件数、几何数据文件的数据量、纹理数据文件数和纹理数据文件的数据量,依据加载代价函数计算其数据加载代价因子;析取图元数量(即顶点数量、三角形数量和纹理像素数量),依据绘制代价函数计算其图元绘制代价因子;将数据加载代价因子与图元绘制代价因子作为场景管理节点对象的新属性,生成场景管理节点文件,完成对场景管理节点的构建。如图2所示。
[0033] 三维城市模型对象的数据分为几何数据与纹理数据,因此数据加载代价因子表达为几何数据加载代价因子与纹理数据加载代价因子,在一部分模型中,由于可能不存在纹理数据,因而纹理数据的加载代价不需要表达。
[0034]
[0035] 其中, 为场景管理节点对象的数据加载代价因子,k1为几何数据加载传输率系数,n为场景管理节点对象的几何数据文件数,Size(filegeometry,i)为第i个几何数据文件的数据量, 为场景管理节点对象的几何数据加载代价因子,
k2为纹理数据加载传输率系数,l为场景管理节点对象的纹理数据文件数,Size
(filetexture,j)为第j个纹理数据文件的数据量, 为场景管理节点
对象的纹理数据加载代价因子。其中,k1和k2为实测数据,根据系统的状态,磁盘的性能来自适应调整,几何数据加载代价因子与纹理数据加载代价因子根据不同数据类型的变化存在一定差异。数据加载代价最终在运行中表达为秒。
[0036] 绘制代价表达为顶点、三角形与纹理象素之间的关系,实际的绘制时间,只有通过绘制后才能得到,当数据完成绘制时,所开销的时间只能用作参考,用顶点图元、三角形图元和象素图元表达代价值,通过实际系统的运行计算得到具体的值进行绘制代价的评估。
[0037]
[0038] 其中, 为场景管理节点对象的图元绘制代价因子,Numvertex为场景管理节点对象的顶点数,α1为顶点数与绘制时间的关系系数,α1*Numvertex为顶点的绘制代价,Numtriangle为场景管理节点对象的三角形数,α2为三角形数与绘制时间的关系系数,α2*Numtriangle为三角形的绘制代价,Numpixel为场景管理节点对象的纹理象素,α3为纹理象素与绘制时间的关系系数,α3*Numpixel为纹理象素的绘制代价。
[0039] 然而,在绘制过程中,根据绘制状态不同,硬件的处理能力不同,绘制的代价将发生变化,采用顶点、三角形以及纹理象素数量来表达绘制代价,通过实时性能参数值来得到实际代价。
[0040] (3)读取场景管理节点文件,获取场景管理节点对象的整体空间范围,构建三维城市模型,使用k-d树空间索引方法由上至下对三维城市模型进行空间剖分,得到k-d树空间索引;其中,剖分算法叶节点的生成规则修改为使剖分后空间中所包含的场景管理节点对象的数据加载代价因子之和与图元绘制代价因子之和均衡为约束条件,确保每一个空间剖分叶节点的数据加载代价因子与图元绘制代价因子之和均衡,即确保每个叶节点的总代价因子(等于叶节点内的场景管理节点对象的总代价因子之和)小于阈值。如图3所示。
[0041] 场景管理节点对象的总代价因子为场景管理节点对象的数据加载代价因子与图元绘制代价因子之和。
[0042] 进一步包括如下步骤:
[0043] (3-1)顺序读取场景管理节点文件,使用几何空间求交算法,通过并运算计算得到场景管理节点对象的整体空间范围,构成三维城市模型。
[0044] (3-2)使用k-d树空间索引方法由上至下对三维城市模型进行空间剖分,计算剖分后每个节点的总代价因子,当其超过阈值时,继续剖分,直到剖分后每个节点的总代价因子不超过阈值为止,生成代价平衡树。
[0045] 将空间剖分组织结构中每个叶节点内所有场景管理节点对象的数据加载代价因子之和、图元绘制代价因子之和以及代价因子总和存储到对应的叶节点中。
[0046]
[0047] 为叶节点的总代价因子,N为叶节点内的场景管理节点对象数,为第k个场景管理节点对象的总代价因子。其中,每个节点的总代价因子将根据
细节层次对象的变化而变化。
[0048] 在构造空间剖分结构的过程中,必须考虑两个因素:空间节点所占空间的大小和空间节点所包含的几何节点数目。空间过大,在可见性剔除的过程中判断为可见的概率增大;如果几何节点过多,则空间的剖分深度会加深,由于空间的连贯性,可见的概率也会增加,而且空间的大小和空间节点所包含几何节点的数目有一定关系,下面是左右子空间节点的制约关系,在待分割的空间内有以下的关系:
[0049] Lvolume+Rvolume=Fvolume
[0050] LNumObjects+RNumObjects=FNumObjects
[0051] Lvolume为左子树体积,Rvolume为右子树体积,Fvolume为待分割空间的总体积;LNumObjects为分割后左子树的对象数,RNumObjects为分割后右子树的对象的数,FNumObjects为待分割空间对象的总数。
[0052] 构造k-d树的过程是递归的从上到下的剖分过程,建立代价函数来计算每种可能的剖分平面所产生的代价,代价函数定义如下:
[0053]
[0054] m+t=NumObj
[0055] 其中, 为分割后左子树中所有场景管理节点对象的存储量,为分割后右子树中所有场景管理节点对象的存储量,sleft为左子树分割
后的表面积,sright为右子树分割后的表面积,m为左子树中场景管理节点对象的个数,t为右子树中场景管理节点对象的个数,NumObj为待分割空间中场景管理节点对象的总数。
[0056] 上述的公式是用于计算沿单个轴上的,选取代价函数最小的,操作中先计算三个剖分轴:X、Y、Z,分别计算出每个轴向上的最小代价的剖分平面,然后选取三个轴上代价函数最大的剖分平面作为此次剖分的剖分平面。
[0057] (4)先序遍历k-d树空间索引,将叶节点的数据加载代价因子、图元绘制代价因子和总代价因子分别累加到上一层中间节点,得到中间节点的数据加载代价因子、图元绘制代价因子和总代价因子,如图4所示;将每个叶节点内所有场景管理节点对象的数据作为一个整体生成几何存储数据块和纹理存储数据块后,分别写入几何映射文件和纹理映射文件,如图5所示,几何存储数据块写入几何映射文件的位置以及纹理存储数据块写入纹理映射文件的位置按照k-d树空间索引先序遍历的顺序,在空间索引中记录每个叶节点在几何映射文件和纹理映射文件中的存储位置和数据长度。
[0058] 其中,叶节点的数据加载代价因子为其中场景管理节点对象的数据加载代价因子之和,叶节点的图元绘制代价因子为其中场景管理节点对象的图元绘制代价因子之和;中间节点的数据加载代价因子为其对应的叶节点的数据加载代价因子之和,中间节点的图元绘制代价因子为其对应的叶节点的图元绘制代价因子之和,中间节点的总代价因子为其对应的叶节点的总代价因子之和。
[0059] 为了减少数据加载过程中的I/O次数,将每一个叶节点中的几何数据等存储于一个映射文件内,空间剖分组织结构中,需要记录每一个对象的存储索引信息。同时,每个叶节点中的纹理数据根据共用情况,建立向k-d树空间组织中向上跃级,并将节点内不重复的纹理数据映射到一个存储文件中。
[0060] 进一步包括如下步骤:
[0061] (4-1)使用映射文件方式新建几何映射文件和纹理映射文件。
[0062] (4-2)先序遍历k-d树空间索引,将叶节点中的每一个场景管理节点对象的几何数据和纹理数据分别序列化成数据块,依场景管理节点对象在叶节点中的顺序,依次存储于几何映射文件和纹理映射文件中,并记录每一个场景管理节点对象在几何映射文件和纹理映射文件中的存储起始位置和偏移长度,并在空间索引中记录每个叶节点在几何映射文件和纹理映射文件中的存储位置和数据长度。
[0063] (4-3)将叶节点的数据加载代价因子和图元绘制代价因子分别累加到上一层中间节点,使得每一个中间节点的总代价因子表达为其子节点的总代价因子之和。
[0064] 更进一步地,在中间节点中同时记录其叶节点的几何数据和纹理数据在几何映射文件和纹理映射文件中的存储起始位置和偏移长度。
[0065] 纹理依据其关联的场景管理节点对象所处的节点,原则上存储于当前节点的纹理映射文件中,但考虑到纹理的重复性,因此需要将重复的纹理聚合到上一级节点中,每一个层次的节点都将关联一个纹理映射文件以及每一个纹理对象的映射存储地址。
[0066] (5)将空间索引结构单独生成空间索引文件,加载空间索引文件并常驻内存,获取可视视点的位置并计算可视区域,将可视区域与k-d树空间索引求交,获取当前位置下的可见节点(包括中间节点和叶节点);对可见的中间节点按由近及远的顺序排序,并根据可见的中间节点的数据加载代价因子及存储硬件参数计算其数据加载代价;根据可见的叶节点的图元绘制代价因子及图形绘制硬件参数计算其图元绘制代价;根据可见的中间节点的数据加载代价生成加载列表,根据可见的叶节点的图元绘制代价生成绘制列表。
[0067] 进一步包括如下步骤:
[0068] (5-1)初始化绘制环境,获取当前系统的存储硬件参数(包括CPU的内核数、支持线程数量、内存大小、磁盘类型与转速和平均访问延迟时间),据此计算数据加载代价比例系数;获取图形绘制硬件参数,据此计算图元绘制代价比例系数。
[0069] (5-2)加载空间索引文件并常驻内存,获取可视视点的位置并计算可视区域,使用可视区域与k-d树空间索引求交,获取当前位置下的可见节点,对可见的中间节点按由近及远的顺序排序。
[0070] (5-3)对每一个可见的中间节点,计算其数据加载代价为其数据加载代价因子与数据加载代价比例系数之积;对每一个可见的叶节点,计算其图元绘制代价为其图元绘制代价因子与图元绘制代价比例系数之积;生成加载列表和绘制列表。
[0071] (6)如图6所示,建立CPU线程池,根据实时绘制帧率的时间要求和可见的中间节点的数据加载代价,计算加载列表中需要设置的加载线程数量,从CPU线程池中分配加载线程进行数据加载;从几何映射文件和纹理映射文件中提取可见的叶节点的几何数据和纹理数据,解析出可见的叶节点的图元数量(即顶点数量、三角形数量和纹理像素数量),根据可见的叶节点的图元绘制代价,建立GPU处理内核线程管理对象,动态分配内核处理线程数量。
[0072] 进一步包括如下步骤:
[0073] (6-1)建立CPU线程池;
[0074] 采用哈希表结构建立队列,记录创建线程数量。通过使用应用程序接口(API)获取CPU处理资源管理接口,建立哈希表队列中线程与CPU内核的映射关系。在本发明的一个实施例中,在生成内存池的过程中,采用CPU内核数量*2+独立I/O数量。如在一个四核CPU中,3个物理磁盘的环境中,将初始化创建4*2+3=11个线程。
[0075] 根据绘制流水线过程建立任务哈希队列,并根据数据内容特点、存储硬件数量来关联每一个任务所关联的线程数量。每一个任务所关联的线程数量,根据其数据特点,及位于I/O设备数量的关系来分配。
[0076] 例如,三维城市模型中,地形数据包括DEM数据和DOM数据,DEM数据存储于多个磁盘,同样,DOM也存储于多个磁盘中,在进行地形数据加载的过程中,所分配的线程数量为DEM存储的磁盘数量+DOM存储的磁盘数量。操作中每一个加载线程对应一个任务队列和一个数据缓存队列。
[0077] 建立缓存交换队列结构,确保多线程加载并行加载数据通过队列更新到绘制缓存,绘制任务只从绘制队列中取出数据进行绘制,而不依赖于数据加载队列以避免出现因未加载完成而等待的现象。
[0078] (6-2)根据实时绘制帧率的时间要求,计算加载列表中需要设置的加载线程数量,从CPU线程池中分配加载线程进行数据加载;
[0079] (6-3)建立GPU处理内核线程管理对象;
[0080] 当代图形处理单元(GPU)的发展,提供了丰富的应用接口程序来管理GPU的处理资源,基于数据并行的流处理特点,在流水线过程中如何分配顶点处理与象素处理线程成为充分利用与平衡GPU流水线阶段处理的关键。在nVidia图形处理硬件上,使用CUDA统一程序架构接口来驱动硬件资源的分配。绘制代价中表达为模型对象的几何顶点与纹理象素的表达关系。
[0081] 每一个对象的绘制过程,对象的顶点数据量与象素数据量的比值关系来确定线程的分配。
[0082] κ=Numpixel/Numvertex
[0083] threads=κ*Numstreamthreads
[0084] 其中,κ表示对象的顶点与象素图元处理的量比例,Numstreamthreads表示图形处理设备中所支持的流处理管线数量,需要使用图形应用程序接口根据硬件获取,threads表示分配象素处理所用的流水线管线数量。
[0085] (6-4)针对绘制对象的顶点数量、三角形数量和纹理像素数量,由GPU内核管理对象动态分配内核处理线程数量。
[0086] (7)实时监测帧内数据加载和图元绘制加载用时t1以及绘制用时t2,通过帧内代价中断机制(即帧内加载绘制用时t1+t2大于帧率时间时,强制中断当前帧内的加载与绘制)确保当前帧率的稳定,并利用相邻帧的结余时间(即帧率时间与帧内加载绘制用时之差)动态调整帧间加载线程和绘制内核线程,最终实现帧间平稳绘制。
[0087] 本发明利用模型对象的数据加载代价和图元绘制代价,并实测系统的资源利用情况,采用任务并行线程和数据并行线程动态调节整个绘制过程加载与绘制过程以达到平稳、实时绘制的效果。
[0088] 进一步包括如下步骤:
[0089] (7-1)建立CPU与GPU实时监测线程,实时监测帧内数据加载与图元绘制过程加载用时以及绘制用时;
[0090] 通过每一个对象的实际绘制完成情况测试,得到当前系统的绘制参数α1、α2与α3,用于计算实时运行中的图元绘制代价;并查询绘制队列,得到尚未完成绘制的图元的代价以及当前绘制完成的时间节余
[0091] 通过应用程序接口查询CPU的利用率,判断每个内核的执行情况,并将利用率低于50%的内核记入监测队列,通过内核与线程映射函数判断当前内核是否运行线程,当映射线程处理运行时,增加映射线程,并分配其余任务。在出现内核处理不平衡时,则动态调整线程与内核的映射关系,使得每个内核都处于高利用率。具体流程如图7所示。
[0092] 使用CUDA图形处理器应用程序接口中的设备管理API查询显示卡资源利用率和显示卡中缓存区的利用率。建立顶点缓存对象(Vertex Buffer Object,VBO)和片段缓存对象(Fragment Buffer Object,FBO)管理队列,针对不同数据内容的特点来分配空间大小,建立替代策略,直接映射空间数据以减少对显卡缓存的反复分配操作。
[0093] 具体策略,通过统计纹理的大小,建立标准纹理格式大小的FBO缓存块。
[0094] (7-2)应用帧内超时中断机制,以帧率对应时间来定时监控加载与绘制线程执行;
[0095] (7-3)在帧内加载绘制用时小于帧率时间时,完成该帧的加载与绘制后转入下一帧处理;在帧内加载绘制用时大于帧率时间时,强制中断当前帧内的加载与绘制,确保当前帧率的稳定,并利用相邻帧的结余时间(即帧率时间与帧内加载绘制用时之差)重新分配加载线程与绘制内核数量。
[0096] 其中,在帧内加载绘制用时小于帧率时间时,完成该帧的加载与绘制后转入下一帧处理。如图7所示,具体实现步骤如下:
[0097] 步骤Ⅰ:每一帧中,通过可见性判断后所得到的需要绘制的对象,判断其数据加载代价与图元绘制代价和是否小于当前帧绘制时间;大于则执行步骤II,否则执行步骤Ⅴ;
[0098] 步骤Ⅱ:判断模型对象中是否存在多细节层次,若所有三维城市模型对象中不存在细节层次模型时执行步骤Ⅴ,存在时执行步骤Ⅲ;
[0099] 步骤Ⅲ:根据三维城市模型对象总代价由大到小顺序遍历其多细节层次对象,降低细节层次,判断是否满足帧绘制时间,直到选择合适代价的细节层次;
[0100] 步骤Ⅳ:若所有模型中最粗层次细节层次模型代价和仍然大于当前帧绘制时间,则将所有模型使用最小代价细节层次代表;
[0101] 步骤Ⅴ:根据三维城市模型对象数据加载代价与图元绘制代价由小大到顺序,将对象移出绘制对象集合,直到集合内对象的总代价满足帧绘制时间;
[0102] 步骤Ⅵ:若当前可见视点唯一对象数据加载代价与图元绘制代价仍大于帧绘制时间时,则根据由大到小的顺序选择满足帧绘制时间的较小代价模型添加到绘制对象集合;
[0103] 步骤Ⅶ:将满足代价的模型数据对象加入加载队列以及绘制队列,执行加载与绘制。
[0104] 本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈