- 相关推荐
基于Web3D的异构数据存储及通信研究
【摘 要】针对目前虚拟现实中三维模型和二维属性关联程度低、加载速度慢的情况,本文以湖南省地质博物馆为例,采用Unity3D作为开发平台,研究了异构数据存储的存储方式及通信途径,制定了数据库存储和文件存储相结合的数据存储方案,并对Unity3D在Web环境下的数据通信过程进行了研究。采用异步、分层次加载的方式对异构数据进行加载,满足了参观者的参观心理,在保证数据一致性的前提下,提高了数据的加载速度。
【关键词】异构数据;存储;通信;Web3D;虚拟博物馆
引言
Web3D,即网络三维技术,指在虚拟现实的基础上,将现实世界中的物体通过互联网进行虚拟的三维立体展示并提供交互操作的一种虚拟现实技术[1]。目前,Web3D技术得到互联网领域的广泛关注,并已在博物馆的虚拟展示方面得到应用,Google与世界多家博物馆合作的Google“艺术计划”、南京市博物馆、上海市博物馆、敦煌洞窟壁画博物馆等使用Web3D,均已实现博物馆的远程三维浏览及互动,但是目前虚拟博物馆基本上采用图片或全景图进行展示。采用图片进行展示,实现方式简单,但三维展示功能普遍较弱,全景图虽然在该方面有所提高,能很好的现实虚拟效果,但是仍存在三维模型与二维属性信息关联程度低的缺陷,参观者不能获得场景及展品的信息,不能对展、藏品进行全方位展示,更谈不上对展、藏品的信息化管理。
对展馆和展品进行虚拟展示,不仅要在网络中传输结构化的属性数据,还需要传输大量的沉重的图片、模型、音视频等非结构化数据,这些数据,特别是非结构化数据的传输速度受互联网网络带宽和传输速度的限制,加载速度慢。为了满足网络环境下参观者对于加载流畅度的要求,提高三维模型和二维属性的关联程度,实现异构数据的一致性存储,对虚拟博物馆进行数据存储和通信方式的研究变得尤为重要。
Unity3D是一个成熟的跨平台、层次级的虚拟现实开发引擎,支持JavaScript、C#、Python等多种脚本语言,兼容各种操作系统,可发布成网页的方式,用户不用下载客户端即可体验。本文以湖南省地质博物馆为例,采用Unity3D作为开发平台,根据地质博物馆展/藏品的特点及之间的相互关系,设计了虚拟博物馆的数据存储方式,并对网络环境中虚拟博物馆的数据通信过程进行研究。
图1 系统架构示意图
1 系统架构
在网络环境下,为了保证系统的响应速度和数据安全,系统采用B/S三层架构,图1展示了系统的主要构成,分为表示层、业务层及数据层[2]。
1.1 表示层
表示层采用Unity3D的NGUI插件进行开发,是虚拟博物馆与参观者进行交互的界面。表示层通过http协议将交互产生的数据发送到业务层,并对业务层反馈的数据进行可视化显示。
在表示层中,虚拟浏览导航模块可根据用户选择的浏览方式为用户提供不同的参观线路,实现用户在虚拟展馆中的参观移动。展品展示模块实现展品在虚拟博物馆中的加载及图片、音频、视频、三维模型等全方位展示。查询功能模块实现用户对展馆及展、藏品的分类查询查询和在虚拟博物馆中的定位。
1.2 业务层
业务层采用Unity3D编写脚本,根据表示层用户的交互请求,向数据层请求数据。
导航辅助模块提供虚拟展馆中参观的节点信息,并根据用户的位置提供参观线路。资源管理模块对客户端的请求对数据控制模块反馈的数据进行管理。数据控制模块按照导航辅助模块和资源管理模块的需求向数据层请求数据。
1.3 数据层
数据层存储虚拟博物馆的展馆及展、藏品的所有信息,包括属性信息、位置信息、模型、音频、视频、图片等。
2 数据存储
为了对系统中存储的异构数据进行统一管理,保持数据一致性,同时,保证数据的加载速度,系统采用数据库存储和文件存储相结合的方式存储异构数据,即在文件系统中存储文件,同时在数据库中存储文件的路径和文件相应的BLOB字段。系统在进行读取操作时,可直接读取文件系统中的文件,在更新数据时,则将数据库和文件系统的数据同时进行更新。
2.1 基于心理设计存储层次
2.1.1 数据库存储
由于参观者参观博物馆时首先进入博物馆主场馆,然后按照展馆逐个参观,并重点观看自己感兴趣的展品,考虑到参观者的参观心理及参观习惯,系统按照湖南省地质博物馆中展馆及展品等实体的陈列关系,将博物馆按层次分为展馆主体、展厅、展柜、展品四部分,采用分步加载的方式对各层次数据进行加载,不仅能够满足参观者的视觉需求,而且减少了单次加载的数据量,从而减少参观者等待数据加载的时间。
根据博物馆中实体的层次划分,系统共设计19张表,存储各层次主体的基本信息、音频、视频、三维模型的信息,各表之间以外键关联,既能保持各表的关联,同时保持了各自的独立性,便于日后按照需求进行扩充。
以展品为例,根据系统需求,共包含展品基本信息表(EXITEM_BASEINFO)、展品图片信息表(EXITEM_PICINFO)、展品模型信息表(EXITEM_MODELINFO)、展品视频信息表(EXITEM_VIDEOINFO)、展品音频信息表(EXITEM_AUDIOINFO)、展品类型信息表(EXITEM_TYPEINFO),在此,主要对展品基本信息表和展品模型信息表进行说明。
表1 展品基本信息表
展品基本信息表中ITEM_ID为主键,EXHALL_ID等为外键,将展品基本信息表和展厅基本信息表进行关联,系统能够根据展品ID查询到其所在展厅、展柜及收藏者信息等,可以从多角度、全方位地对展品进行展示,同时,将这些信息分表存储,减小了单表的数据量,可提高查询速度,避免数据库更新异常等问题。
表2 模型基本信息表
模型基本信息表中主键为MODEL_ID,外键为EXITEM_ID,将模型基本信息表和展品基本信息表关联,系统可根据EXITEM_ID获取到展品的三维模型。展品模型按照二进制流[7](EXITEM_MODEL字段)和文件路径(FILEPATH字段)两种方式进行存储,既方便和文件系统的数据进行关联,实现数据的统一管理,而且二进制流在文件系统异常时可根据路径用于文件的恢复,在有数据冗余的情况下,可提高系统中数据的安全性能。
2.1.2 文件存储
由于直接加载文件比从数据库中读取数据加载速度快,系统除在数据库中存储模型的二进制流数据,还在文件系统中存储模型文件。文件在系统中的存储层次与数据库中各主体的层次划分一致,系统依照数据库中存储的文件的网络路径对文件进行读写。
2.2 一致性保持
由于系统中的异构数据在数据库系统和文件系统中分别进行存储,需要对其进行一致性维护。
数据一致性指关联数据之间的关系是否完整和正确,一方面指物理上的一致,即同一个事实的数据应该相同,如数据库中存储的几个表都涉及到同一个数据项,这些数据应该保持相同的值,另一方面,数据一致性指逻辑上的一致,即不同数据之间业务逻辑的一致。本系统主要对数据的物理一致性保持进行维护。
由于数据库中存储异构数据主要的作用是数据备份,主要数据源是文件系统中的数据,两者之间有较为明显的主从关系,系统采用基于主从的事务控制方法来维护数据的一致性。
系统中异构数据的更新操作以事务的方式提交给系统,事务先对文件系统的文件进行更新操作,若操作成功则对其在数据库中进行备份,若备份失败则进行事务的回滚。以数据更新为例,其流程如图2:
图2 数据更新流程图
有些异常情况,如突然断电、数据库发生迁移、误删文件等会造成数据的不一致,这种情况依靠事务控制机制无法处理的。因此,系统针对这些异常情况产生的数据不一致进行了分类并对其进行一致性维护。
(1)误删文件或数据库迁移造成文件系统中文件缺失。若系统依照路径查找文件失败,则按照数据库中存储的文件路径和BLOB数据对文件系统的数据进行恢复。
(2)突然断电导致数据库中文件路径或BLOB数据未更新。若文件路径更新完毕,则依照存储的文件路径查找该文件,并以BLOB的格式存储在数据库中。若文件路径也未更新,则根据文件所对应实体(如展品或展馆)以及文件类型(音频或视频),根据文件系统存储的层级结构查找该文件并进行备份。
3 数据通信
由于该系统基于Unity进行开发,参观者要想使用浏览器对虚拟博物馆进行参观,首先需要安装Unity WebPlayer插件。但是由于安全沙盒的限制,Unity WebPalyer不能直接与数据库连接并且从数据库中读取数据。因此,本系统采用图3的方式实现客户端与数据库的通信。首先,客户端获取参观者在页面的请求,并将请求和数据通过http协议发送给服务端,服务端的php通过url获取用户的请求和数据,执行脚本进行数据库操作,最后,将结果数据组织为Json格式反馈给客户端,Unity WebPlayer读取并解析网页中的JSON数据,将其进行可视化并在客户端进行展示。
图3 客户端与数据库通信方式
本文以展品信息查询为例,展示Web环境下Unity的通信过程。从系统的整体结构(图1)可知,要执行展品信息的查询,首先触发客户端的查询功能模块,然后查询功能模块对查询请求进行分类处理,并提交给资源管理模块,资源管理模块对现有资源进行查询,如果没有则进一步向数据控制模块请求数据,下文将主要讲述数据控制模块从数据库中获取数据后将数据反馈给表示层进行显示的过程。
3.1 数据控制模块
数据控制模块主要根据不同的查询需求请求数据。要实现对展品信息的查询,数据控制模块根据表示层的请求,不仅需要从数据层获取展品的名称、编号、位置、鉴定特性等基本的属性信息,为了对展品进行多方面的展示,还需获取图片、音频、视频、模型等文件。 对于数据库中存储的文本信息,系统采用php脚本连接数据库并读取数据。由于JSON具有数据量小、易解析的特点,系统选用其作为数据控制模块和数据层的交换格式。系统将php脚本读取的属性数据按照JSON的格式要求进行组织并反馈给资源管理模块(如图4)。
图4 展品属性数据(JSON格式)
对于图片、模型等文件的获取,系统将其路径作为属性数据的一部分反馈给资源管理模块,客户端可直接从服务器端对发布的文件进行读取,而不受Unity WebPlayer对数据库的通信限制。
3.2 资源管理模块
资源管理模块接收表示层的查询请求,并对数据控制模块的数据进行管理。根据表示层的查询请求,资源管理模块首先判定请求的数据是否包含在场景的预置文件或者缓存中,有则直接反馈到表示层进行显示,如果没有,则向数据控制模块发送数据请求,并接收数据控制模块反馈的数据,当数据接收完毕,则反馈给表示层,对其进行进一步解析和显示。主要代码如下:
if(!Resourses.Load(model)){
WWW www = WWW.LoadFromCacheOrDownload(address,version);
}
3.3 展品展示模块
由于展品的属性数据量小,而图片的数据量大,因此,资源管理模块接收到数据控制模块反馈的JSON数据之后,则通知展品展示模块首先对属性数据进行显示。由于JSON格式的数据在客户端容易解析,系统使用LitJSON先将JSON数据转换成对象,通过访问对象的属性值直接获取属性数据并在NGUI界面上显示(如图5)。
对于图片、模型等信息,系统则根据经过JSON处理后得到的路径直接向服务端请求文件。采用属性信息和图片信息分开分布加载,不仅能够满足Web环境下的通信要求,而且属性数据的优先加载使用户体验得到提升。尽管采用了属性信息和图片信息分布加载的方式,但是由于图片、三维模型等文件和属性数据存在数量级的差异,系统采用异步加载的方式对模型进行加载。系统进行异步加载的主要代码如下:
yield return bundle;
yield return Instantiate(bundle.assetBundle.mainAsset);
bundle.assetBundle.Unload(false);
图5 展品查询结果
4 结语
依照参观者的参观习惯对博物馆的实体进行层次存储,不仅保证了数据的一致性,而且可有效减少单次加载数据量和加载时间。在Web环境下采用JSON格式进行数据交互,减少了传输的数据量,同时,采用分层次、异步加载的方式进行加载,使模型的加载能够在后台进行,减少了用户等待时间,极大地提升了用户的参观体验。由于地质博物馆的模型更为复杂和精细,数据量大,需要消耗更大的网络带宽和加载时间,因此,下一步的主要工作是对三维模型的数据量进行精简。
【参考文献】
[1]黄健.面向通用性的Web3D虚拟展览馆的设计与实现[D].成都:电子科技大学,2012:34-47.
[2]任国栋,陈林华,陶学锋,方先行.基于Unity3D的虚拟博物馆信息可视化系统[J].计算机系统应用,2013,22(9):86-90.
[3]韩桂明.基于Unity3d房间仿真的关键技术研究[J].理论与算法,2014(8):41-43.
[4]张延,余红英,戚艺雪,万吉.基于Unity3D_3DMAX的导弹视景仿真系统[J].科技视界,2014(9):151-152.
[5]张典华,陈一民,李磊.基于Unity3D的多平台三维空战游戏的开发[J].计算机技术与发展,2014,24(1):192-195.
[6]张利利,李仁义,李晓京,马进,惠铎铎.Unity3D与数据库通信方法的研究[J].计算机技术与发展,2014,24(3):229-232.
[7]胡逢恺,赵刚,程旭.基于SQL Server数据库的三维模型存取研究与实现[J].四川理工学院学报,2010,23(2):212-215.
[8]朱惠娟.基于Unity3D的虚拟漫游系统[J].计算机系统应用,2012,20(10):36-39.
【基于Web3D的异构数据存储及通信研究】相关文章:
基于SDO的异构服务数据模型研究03-28
对数据通信技术的研究03-19
基于GPS的船舶数据模拟系统的研究03-07
基于OFDM的UWB无线通信系统的研究03-07
一种基于铁电存储器的双机串行通信技术03-18
基于爱好的电子商务数据挖掘技术的研究12-08
基于盲源分离的无线视频通信研究与仿真03-07
基于闪存的星载大容量存储器的研究和实现03-18