CN103164440B - 面向虚拟现实的空间数据引擎方法 - Google Patents
面向虚拟现实的空间数据引擎方法 Download PDFInfo
- Publication number
- CN103164440B CN103164440B CN201110416374.8A CN201110416374A CN103164440B CN 103164440 B CN103164440 B CN 103164440B CN 201110416374 A CN201110416374 A CN 201110416374A CN 103164440 B CN103164440 B CN 103164440B
- Authority
- CN
- China
- Prior art keywords
- data
- memory
- video memory
- grid
- spatial
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Processing Or Creating Images (AREA)
Abstract
本发明涉及一种计算机领域的虚拟现实技术,尤其涉及到一种虚拟现实技术的空间数据引擎。面向虚拟现实的空间数据引擎方法,包括以下步骤:(1)在空间数据库中建立数据索引,存储三维模型数据;(2)基于out-of-core的海量空间数据实时并发访问高吞吐量传输方法;(3)外存-内存-显存自适应调度算法。本发明实现了对多格式、多数据源空间数据的整合与一致性访问方法,基于外存的数据组织方式有效解决了内存及显存空间有限海量空间数据无法全部载入内存的问题,并且能够提供稳定快速、高吞吐量的海量数据查询与传输通路,对内存与显存进行有效的监控与管理,实现效率与效果的最佳平衡。
Description
技术领域
本发明涉及一种计算机领域的虚拟现实技术,尤其涉及到一种虚拟现实技术的空间数据引擎。
背景技术
1995年ESRI推出了SDE1.0,使得空间数据和表格数据可以同时存储在商业的关系型数据库管理系统中,首次提出了空间数据引擎(spatialdataengine)的概念形成了第一代空间数据引擎原型。随后,由Skyline公司推出的空间数据引擎系统SFS(StreamingFeatureServer)能够读取多种空间数据源,可通过网络高效传输各种复杂的特征层数据(矢量数据)。
空间数据(SpatialData)是数据的一种特殊类型,它是指凡是带有空间坐标的数据。现在,空间数据已广泛应用于社会各行业、各部门,如城市规划、交通、水利、航空航天等。随着科学和社会的发展,人们已经越来越认识到空间数据对于社会经济的发展、人们生活水平提高的重要性,这也加快了人们获取和应用空间数据的步伐。
空间数据内容主要包括:三维模型数据、数字高程模型数据、地形影像数据,其中数字高程数据、地形影像数据的组织、调度、渲染研究已经比较成熟。传统的空间数据库,如OracleSpatial等往往对栅格、矢量数据有较好的支持,而不能很好的支持三维模型数据。
虚拟现实仿真中涉及大量的精细三维模型可视化,需要保存大量的相关数据,城市或区域级的三维场景数据总量可能达到几十G甚至上百G,从而超过了系统的内存、显存储器配置,如此庞大的数据量和现有的硬件条件产生了很大矛盾,海量空间数据无法全部容于内存、显存之中,这就需要在场景绘制过程中动态地在外存、内存、显存之间进行数据交换。虚拟现实系统对渲染的实时性有很高的要求,内外存交换的效率高低直接影响到场景的视觉效果,对三维模型数据的组织与调度比其他类型的仿真系统有着更高的要求,采用当前的商业空间数据库或空间索引技术尚不能满足工程应用的需求。
发明内容
本发明的技术效果能够克服上述缺陷,提供一种面向虚拟现实的空间数据引擎方法,其实现了基于外存的空间数据引擎,提供对空间数据的高效存储与访问服务。
为实现上述目的,本发明采用如下技术方案:其包括以下步骤:
(1)在空间数据库中建立数据索引,存储三维模型数据;
(2)基于out-of-core的海量空间数据实时并发访问高吞吐量传输方法;
(3)外存-内存-显存自适应调度算法。
虚拟现实场景中实时计算的空间范围和内容都是有限的,因此在可视化处理时,对于可见范围以外的空间数据并不需要调入内存并加以计算,而是可以根据当前视点的变化,将所需要的空间数据动态地调入内存。本发明对空间数据进行分层组织、存取、调度,建立高效的数据索引;利用多线程及IOCP机制,实时调度三维模型数据;采用缓存(Cache)机制实现空间数据的高速传输和高效的可扩放性;利用内存池及LRU缓存算法,结合空间数据特点,建立三维空间数据缓冲区,提高缓存请求命中率;实现了基于外存的空间数据引擎,提供对空间数据的高效存储与访问服务。
空间数据库包括外存、内存、显存数据。
所述步骤(1)中包括三维模型数据网格索引组织,步骤如下:
(a)对三维模型进行多分辨率预处理,利用Progressivemeshes算法或手动建模的方法建立多级LOD模型,其它类型数据保持源格式;
(b)确定单个网格的大小区间[m,M],其中m通常可等于该层空间数据包围盒半径的均值,而M由系统的内存量确定;建立网格对模型的索引,单个网格区域内包含或有相交的模型,都将被该网格索引;
(c)场景漫游过程中,以视点为中心的9个网格为最精细的LOD数据,外面一层为次级LOD,再向外一层为更次级LOD,如此规则分布下去需要载入到内存的数据量均值,高级LOD与低级LOD有一个网格的重叠区域;
(d)在保证不超出内存及显存的前提下,取数据冗余最小的网格大小,进行网络索引,用于组织,调度外存到内存间模型数据。
三维模型数据支持常规的数字高程模型数据、影像数据、矢量数据。
所述步骤(2)中,采用异步I/O读取机制,并用IOCP实现了一个基于外存的空间数据调度设计,使用线程池处理异步I/O请求,依据视点的位置动态装卸载空间数据。
所述步骤(3)中,将显存内部在视点周围建立网格索引,用以控制载入显存的模型数据,该网格索引不依赖于内存中的索引结构;引入显存监视器技术,在运行过程中实时查看当前显存的状态,显存内的网格索引驱动内存数据到显存的读取及卸载,在视点移动时,显存内的网格索引跟着视点发生变化,到达一定阈值时,向内存缓冲区发出数据读取、载出请求,进行异步数据读取和载出。
本发明的有益效果在于:面向虚拟现实的空间数据引擎(简称VR-SDE),实现了对多格式、多数据源空间数据的整合与一致性访问方法,基于外存的数据组织方式有效解决了内存及显存空间有限海量空间数据无法全部载入内存的问题,并且能够提供稳定快速、高吞吐量的海量数据查询与传输通路,对内存与显存进行有效的监控与管理,实现效率与效果的最佳平衡。
附图说明
图1为本发明的空间数据服务模型;
图2为本发明的网格索引结构;
图3为本发明的内存及显存内的网格索引模式;
图4为本发明的空间数据异步调度机制;
图5为本发明的显存及虚拟内存使用测试;
图6为本发明的数据吞吐量测试;
图7为本发明的将网格划分情况显示出的场景效果;
图8为本发明的系统的最终运行效果。
具体实施方式
本发明的面向虚拟现实的空间数据引擎方法,包括以下步骤:
(1)在空间数据库中建立数据索引,存储三维模型数据;
(2)基于out-of-core的海量空间数据实时并发访问高吞吐量传输方法;
(3)外存-内存-显存自适应调度算法。
1.空间数据服务模型
海量空间数据的组织与调度涉及到外存、内存、显存中数据的组织与管理。数据流的服务模型可以简单的用图1来表达。外存中存放了整个空间数据库的数据文件:三维模型数据、纹理数据、矢量数据等,在内存中建立缓冲区,包含了视点周围一定区域的空间数据,而显存中加载着正在渲染的空间数据。
数据服务过程可分为载入过程与载出过程两部分。在载入过程中根据应用需求发出数据的读取请求,然后将数据异步读入到内存缓冲区中,载入之后根据需求进行分发,有的数据将被载入到显存中进行渲染,其他的非显示数据,比如一些控制信息则被保存在内存中。数据的载出过程分成几步完成,不需要当前显示的数据可以从显存中载出,正在应用的空间数据在确定卸载之前首先被卸载到缓存当中,然后从缓存中卸载出内存。
2.三维模型数据网格索引组织
为了能高效率的将数据载入载出,以适应虚拟现实场景实时浏览的需求,本发明采用分层的网格索引结构来组织数据。网格索引机制思路简单,容易理解和实现,稳定性高。但是网格索引是一种多对多的索引,一个几何对象可能跨越多个网格,而一个网格往往也包含多个几何对象,多对多的关系会导致冗余。但考虑虚拟现实场景中,场景更新效率要求不高,并且当前外存储器的存储容量已经不是瓶颈问题,部分数据冗余是可以接受的。主要的问题在于场景漫游过程中,如何将数据快速检索与载入。显然,网格索引具有天然的定位特性与无交叉性,所以本发明选择网格索引来提高数据的检索效率。
虚拟现实三维模型目前在不同领域的应用繁杂而多样,通过对实际应用的模型进行研究,最常用的可视化数据模型是基于边界表示的面片模型。本发明综合考虑数据的存取效率和三维可视化显示的效率,在组织场景时,如图2所示,首先将场景进行分层组织,根据各自的形状及数据分布的特点采用合适的网格分布结构,将面向对象的可视化数据模型分为:绿化植被类模型、道路类模型、地形地貌类模型、建筑物类模型等。在调度及渲染过程中,可根据需求实施分层策略。索引文件与实体数据文件进行分离,只包含模型数据的头文件信息,用于实现快速检索与数据提取。
网格结构虽然简单,但考虑到虚拟现实数据的LOD(Levelofdetail)特性,并且需要顾及内存、显存的存储容量及自适应性,使得网格索引的构建过程有一定的复杂性,具体组织过程如下:
(a)对三维模型进行多分辨率预处理,利用Progressivemeshes算法或手动建模的方法建立多级LOD模型,其他类型数据保持源格式;
(b)确定单个网格的大小区间[m,M],其中m通常可等于该层空间数据包围盒半径的均值,而M由系统的内存量确定,即保证网格最大、最小负载模式下载入的场景数据量不能超出系统内存;
(c)依据给定网格值,对场景网格化,建立网格对模型的索引。单个网格区域内包含或有相交的模型,都将被该网格索引;
(d)对当前的网格值进行测试,主要测试数据冗余与最小负载模式内存消耗量。其中数据冗余是由网格索引多对多的特性造成的,不可避免,但数据冗余越小,数据的提取效率越高。最小内存消耗量即在场景漫游过程中,以视点为中心的9个网格为最精细的LOD数据,外面一层为次级LOD,再向外一层为更次级LOD,如此规则分布下去需要载入到内存的数据量均值,考虑调度过程中的一些设置,高级LOD与低级LOD需要有一个网格的重叠区域;
(e)在内存网格的基础上,确定显存内模型的网格索引的区间范围如图3所示,由此确定显存最小模式下的使用量,判断是否超出显存范围;
(f)将网格值增加一定间隔,转到步骤c;
(g)根据测试数据,在保证不超出内存及显存的前提下,取数据冗余最小的网格大小,进行网络索引,用于组织,调度外存到内存间模型数据。
3.基于out-of-core的海量空间数据实时并发访问高吞吐量传输技术
本发明采用异步I/O读取机制,并用IOCP实现了一个基于外存的空间数据调度设计,使用线程池处理异步I/O请求,依据视点的位置动态装卸载空间数据,实现了海量空间数据的无延迟装卸载。
调度机制如图4所示。在每帧循环中,主线程对场景进行视锥裁剪、渲染、I/O服务请求接收与发送,其他辅助线程基于IOCP机制对数据进行异步调度。其中“IOServer”是IOCP机制的核心模块,将IOCP的工作流程进行封装,包括IOCP的初始化、IOCP多线程的端口查询及IOCP销毁等。I/O队列是主线程与IOServer中辅助线程唯一发生耦合关系的地方。在输入队列中,主线程负责往队列发送I/O请求包,而IOServer中的辅助线程负责从队列中提取并处理这些请求包;在输出队列中,IOServer辅助线程将处理后的结果输出到输出队列中,主线程提取并处理输出队列中的输出结果。
在虚拟现实场景的漫游过程中,浏览者希望离视点近的空间数据先载入,离视点远的空间数据可以延迟载入,这就需要在往输入队列发送数据请求时,尽量体现数据与视点的位置关系。如果将每帧裁剪出来的节点按照远近关系进行排序,将大大加大算法的时间复杂度,降低整个程序的效率。
本发明不进行节点的精确排序,但为每个LOD等级设置一个I/O请求队列。即根据节点的LOD等级直接放到对应的I/O队列中,这样可依据LOD自己的距离特征将节点模型数据进行分类存放。各队列根据LOD值自小而大的顺序往IOServer中发送请求,虽然IOServer是多线程异步读取,读取的结果将不按照发送队列的顺序输出,但这种设计可以实现离视点近的数据先载入,离视点远的数据后载入,进一步满足用户的应用需求。
采用队列存放I/O请求而不是立即处理,另外一个目的是剔除过期的I/O请求包,即在处理请求包之前,需要判断该请求包是否仍然有效。如果离视点超过一定阈值,我们认为该请求包已经过期,不再进行处理。采用该种方法可以缓解在快速漫游过程中,数据必须按照漫游路线进行顺序读取,从而导致数据载入的响应速度慢的问题。
在设计过程中,本发明考虑到了进程的虚拟地址空间问题,因为内存与显存共用虚拟地址空间。在64位操作系统中,理论上进程最大可使用的内存地址空间为264字节(16384G,目前window7x64最大支持128G内存),不需要考虑这个问题。但在32位系统中,进程的寻址空间不会超过4G,在内存与显存都用到极限之前,很可能会出现寻址空间用尽,从而导致内存申请失败的情况。本发明在进行数据的调度过程中,当操作系统为32位时,使用地址窗口扩展(AddressWindowingExtension,AWE)技术,即保证了数据传输高效的速度,又防止了在运行过程中内存、显存、虚拟地址空间用尽的情形出现。
4.外存-内存-显存自适应调度算法
因为计算机显存空间也是有限的,确定了外存与内存的调度之后,需要确定数据在内存显存之间的调度。首先在显存已满与未满的情况下做研究数据传输、渲染时间与数据在显存中状态的关系。
机器配置为Intelcore(TM)22.4GHzCPU,2GBRAM,nVIDIAGeForce9600GT。经过多次反复实验,实验统计结果如表1所示:
表1显存状态与渲染时间关系
如果显存已满,数据载入时间会表现的无规律性,并且调度时间会成几十倍增加。由此可见,随着显卡技术的发展,虚拟现实场景绘制过程中,显卡的计算效率已经不再是瓶颈,而显存容量却仍然制约着软件的发展。要保证虚拟场景绘制过程的流畅,就必须保证显存未完全被占满,因此,本发明除了进行外存数据到内存的调度外,还进行了内存数据到显存的调度。
将显存内部在视点周围建立网格索引,用以控制载入显存的模型数据,该网格索引不依赖于内存中的索引结构,但只能在图3所示的最大模式与最小模式间调整。很明显,显存中数据量越大,视点周围的模型显示精度越高,场景效果越好。本发明引入显存监视器技术,在运行过程中实时查看当前显存的状态,最大化的利用显存空间。显存内的网格索引驱动数据的读取及卸载,在视点移动时,显存内的网格索引跟着视点发生变化,到达一定阈值时,向内存缓冲区发出数据请求,然后由内存缓冲器向IOServer发送内存数据读取请求,进行异步数据读取。
性能结果测试
采用发明的空间数据引擎VRSDE,在硬件配置为:Intelcore(TM)22.4GHzCPU,2GBRAM,图形卡为nVIDIAGeForce9600GT,显存1G的机器上进行反复试验。空间数据大小约3.4GB,空间数据密度高,且具有三维模型数据、数字高程数据、矢量数据等多种类型,相互重叠严重,对系统的性能要求非常高。
表2网格大小与内存使用量
采用不同的网格进行组织,测试结果如上表所示,最终采用了300*300的网格进行组织。在显卡内采用200*200的网格索引进行组织,漫游过程中显存监视器及虚拟内存监视器的运转情况如图5所示。
数据的吞吐量测试,均值在90MB/S,峰值160MB/S,使用以上数据组织调度方法与未使用情况下进行对比测试,结果如图6所示。
将数据网格在虚拟现实场景中绘制出,如图7所示。
最终运行效果如图8所示。
Claims (2)
1.一种面向虚拟现实的空间数据引擎方法,其特征在于,包括以下步骤:
(1)在空间数据库中建立数据索引,存储三维模型数据,三维模型数据网格索引组织的步骤如下:
(a)对三维模型进行多分辨率预处理,利用Progressivemeshes算法的方法建立多级LOD模型,其它类型数据保持源格式;
(b)确定单个网格的大小区间[m,M],其中m等于空间数据包围盒半径的均值,而M由系统的内存量确定;建立网格对模型的索引,单个网格区域内包含或有相交的模型,都将被该网格索引;
(c)场景漫游过程中,以视点为中心的9个网格为最精细的LOD数据,外面一层为次级LOD,再向外一层为更次级LOD,如此规则分布下去需要载入到内存的数据量均值,高级LOD与低级LOD有一个网格的重叠区域;
(d)在保证不超出内存及显存的前提下,取数据冗余最小的网格大小,进行网络索引,用于组织,调度外存到内存间模型数据;
(2)基于out-of-core的海量空间数据实时并发访问高吞吐量传输方法;
(3)外存-内存-显存自适应调度算法,将显存内部在视点周围建立网格索引,用以控制载入显存的模型数据,该网格索引不依赖于内存中的索引结构;引入显存监视器技术,在运行过程中实时查看当前显存的状态,将载入显存的模型数据量控制在最大模式与最小模式之间,显存内的网格索引驱动内存数据到显存的读取及卸载,在视点移动时,显存内的网格索引跟着视点发生变化,到达一定阈值时,向内存缓冲区发出数据读取、载出请求,进行异步数据读取和载出。
2.根据权利要求1所述的面向虚拟现实的空间数据引擎方法,其特征在于,三维模型数据支持常规的数字高程模型数据、影像数据、矢量数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110416374.8A CN103164440B (zh) | 2011-12-14 | 2011-12-14 | 面向虚拟现实的空间数据引擎方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110416374.8A CN103164440B (zh) | 2011-12-14 | 2011-12-14 | 面向虚拟现实的空间数据引擎方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103164440A CN103164440A (zh) | 2013-06-19 |
CN103164440B true CN103164440B (zh) | 2016-05-11 |
Family
ID=48587534
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110416374.8A Active CN103164440B (zh) | 2011-12-14 | 2011-12-14 | 面向虚拟现实的空间数据引擎方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103164440B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104376050B (zh) * | 2014-10-31 | 2017-11-24 | 浙江科澜信息技术有限公司 | 一种在三维场景动态调度并显示海量矢量数据的方法 |
CN105653043A (zh) * | 2016-03-08 | 2016-06-08 | 广州市三川田文化科技股份有限公司 | 一种管理指挥系统 |
CN105844689A (zh) * | 2016-03-29 | 2016-08-10 | 浪潮(苏州)金融技术服务有限公司 | 一种使用维度空间技术进行多维数据同步管理的方法 |
CN109074678B (zh) * | 2016-12-30 | 2021-02-05 | 华为技术有限公司 | 一种信息的处理方法及装置 |
ES2977411T3 (es) * | 2017-08-29 | 2024-08-23 | Repsol Sa | Método implementado por ordenador para manipular un modelo numérico de un dominio en 3D |
CN115047825B (zh) * | 2022-03-21 | 2024-07-09 | 中国海洋大学 | 一种数控加工铣削实时显示的方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101082934A (zh) * | 2007-06-19 | 2007-12-05 | 北京师范大学 | 网络环境下超大规模空间数据的三维可视化方法 |
CN101702245A (zh) * | 2009-11-03 | 2010-05-05 | 北京大学 | 一种可扩展通用三维地景仿真系统 |
-
2011
- 2011-12-14 CN CN201110416374.8A patent/CN103164440B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101082934A (zh) * | 2007-06-19 | 2007-12-05 | 北京师范大学 | 网络环境下超大规模空间数据的三维可视化方法 |
CN101702245A (zh) * | 2009-11-03 | 2010-05-05 | 北京大学 | 一种可扩展通用三维地景仿真系统 |
Non-Patent Citations (2)
Title |
---|
面向城市仿真的VRGIS 平台设计与实现;陈戈,等。;《系统仿真学报》;20090131;第21卷(第2期);457-460、464 * |
马纯永.城域景观VRGIS一体化仿真平台研究与实现.《中国博士学位论文全文数据库信息科技辑》.2011,(第6期),摘要、第3章. * |
Also Published As
Publication number | Publication date |
---|---|
CN103164440A (zh) | 2013-06-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103164440B (zh) | 面向虚拟现实的空间数据引擎方法 | |
CN110738721B (zh) | 基于视频几何分析的三维场景渲染加速方法及系统 | |
CN105701851B (zh) | 一种基于地理信息的三维渲染引擎系统 | |
CN101441779B (zh) | 一种海量数字化地形的快速动态绘制方法 | |
CN106600523B (zh) | 一种三维模型数据的瓦片式快速加载方法 | |
CN103942825B (zh) | 光线跟踪系统架构和方法 | |
CN108520557A (zh) | 一种图形图像融合的海量建筑绘制方法 | |
CN103093499B (zh) | 一种适用于网络传输的城市三维模型数据组织方法 | |
CN100468461C (zh) | 逼真三维地形几何模型的实时绘制方法 | |
CN103593817B (zh) | 用于使用并行管道的图形处理的方法和设备 | |
CN101702245B (zh) | 一种可扩展通用三维地景仿真系统 | |
CN105263050A (zh) | 基于云平台的移动终端实时渲染系统及其方法 | |
CN106446351A (zh) | 一种面向实时绘制的大规模场景组织与调度技术及仿真系统 | |
CN105261066B (zh) | 一种三维地理信息系统实时绘制多线程分配与控制方法 | |
CN110309458B (zh) | 基于WebGL的BIM模型显示及渲染方法 | |
CN105956165B (zh) | 一种三维模型数据的瓦片式大文件存储组织方法 | |
JP2014089773A (ja) | レイトレース・レンダリングのための並列化された交差テストおよびシェーディングのアーキテクチャ | |
CN103810669A (zh) | 在统一l2高速缓存中高速缓存经适应性定制大小的高速缓存像素块 | |
CN112509118B (zh) | 一种可预加载节点和自适应填充的大规模点云可视化方法 | |
CN115272637B (zh) | 面向大区域的三维虚拟生态环境可视化集成和优化系统 | |
CN101261743A (zh) | 一种基于规则网格的大规模地形漫游模拟方法 | |
CN103942306A (zh) | 三维城市模型自适应调度方法 | |
CN110378992A (zh) | 面向大场景模型web端动态渲染LOD处理方法 | |
US11804001B2 (en) | Ray tracing system architectures and methods | |
CN106934058A (zh) | 矢量数据读取方法及系统、矢量数据可视化方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |