虚拟现实技术支持下的GIS立体显示系统的设计与实现
2016-12-15李朝新张俊平吴利青
李朝新,张俊平,吴利青
(山西省地图院,山西 太原 030002)
虚拟现实技术支持下的GIS立体显示系统的设计与实现
李朝新,张俊平,吴利青
(山西省地图院,山西 太原 030002)
虚拟现实技术是由计算机产生,通过视、听、触觉等作用,使用户产生身临其境感觉的交互式视景仿真技术,具有多感知性、存在感、交互性和自主性等特征。本文主要阐述了将虚拟现实技术与地理信息技术相结合,建设GIS立体显示系统的总体设计和关键技术等内容。
虚拟现实技术;GIS三维模型;3D立体显示;人机交互
虚拟现实技术是根据现实或想象利用计算机构造一个多维空间的虚拟场景,提供用户关于视觉、听觉、触觉等的感官模拟,让用户身临其境[1],并以用户的视点变化与虚拟场景时时进行交互,实现了对真实世界的模拟[2]。基于虚拟现实技术立体成像算法,优化GIS三维模型立体成像,建成可动态交互的实时3D生成系统,系统不但具备自主漫游、定位等虚拟现实基本功能,还可以实时生成3D效果,更具交互性和实用性。系统可以使用3D电视、投影机等多种显示终端进行展示,实现大场景三维数据的高效可视化;可以采用遥控器、健身自行车等多种控制方式进行控制交互,为用户提供现实性更强的立体感受和视觉上的冲击。
与GIS二维显示相比,本系统能显示深度信息,因而能更全面地认识事物的形状和运动情形,使用户获得身临其境的感受;与GIS三维显示相比,增强了虚拟现实的沉浸感,具有现实性更强的交互方式和交互体验。本文以长治市城南生态苑为建设对象,对引用虚拟现实技术建设GIS立体显示系统作了初步探讨。
一、建设目标
引用虚拟现实技术建设GIS立体显示系统,完成以下建设目标:①采用地形、水系和道路等地理信息数据,与虚拟现实技术结合构建场景模型,实现三维模型与地理信息数据的一体化管理;②基于Unity3D引擎,优化了立体显示算法,实时生成互动立体图像对,实现三维场景同步立体显示;③采用健身自行车运动传感器,通过控制视点位置和视线方向,实现立体场景漫游的实时交互;④采用场景优化和脚本优化两种方式进行系统优化,使系统运行流畅、反应灵敏。
二、系统设计
1. 系统结构
系统总体架构分为3部分:数据层、逻辑层和应用层,如图1所示。
图1 系统总体架构
1) 数据层。包含三维模型与专题数据数据库、DOM影像数据和DEM高程数据。
2) 逻辑层。系统的业务逻辑是通过在Unity3D引擎中编写脚本代码控制实现的。脚本功能分为以下几类:行为控制脚本,用于控制摄像机在三维场景中的运动;UI控制脚本,用于绘制各种UI界面;立体显示算法脚本,用于生成具有视差的左右立体图像对;终端控制模块,能够驱动健身自行车等终端设备。
3) 应用层。为系统实现的功能,包含三维仿真、立体显示及人机交互。
2. 系统功能
GIS立体显示系统建设模块主要包括漫游浏览、特色视点、精品路线、3D立体显示、健身车互动等几个模块,如图2所示。
图2 GIS立体显示系统建设模块
(1) 漫游浏览模块
实现自主式三维虚拟场景漫游浏览功能,如前进、后退、平移、旋转等。系统采用鼠标和触控一体化的设计方式,满足用户采取多种交互方式任意浏览目标区域三维场景的需要。
(2) 特色视点模块
实现三维场景内主要景点的自动定位功能,选择感兴趣的视点,则系统自动定位到此景点。系统后台连接属性数据库,并与三维模型挂接,若需进一步了解详情,单击即可弹出信息框,显示其详细信息。
(3) 精品路线模块
根据实际需求设定了若干条不同观看角度,不同偏重内容的浏览路径,沿着事先规定的路径,选择任一线路,即可模拟沿所选线路进行漫游。
(4) 3D立体显示模块
切换至3D立体显示模式下,系统采用场(幅)分隔法实现人工立体显示。显示终端分为主动快门式和被动偏振光式两种。显示终端为3D电视机时,带上主动快门式眼镜后,即可观看3D立体效果;显示终端为双投影机时,带上偏振光眼镜后,即可观看3D立体效果。
(5) 健身车互动模块
在健身车互动模式下,用户可在自行车上通过车头控制方向,系统根据脚踏的速度快慢控制前进的速度;系统配置了碰撞检测系统,遇到建筑物、树木等会进行判断,不会穿越地物[3],使得自行车能够在正常路面上行进。
三、关键技术
1. 系统平台与开发软件
Unity3D是由Unity Technologies公司开发的三维游戏平台,能够处理大量的三维模型[4],并具有跨平台多系统(iOS、MAC、Windows、Android、Web)支持功能[5],可方便人们通过网页、手机APP、电脑客户端等多种途径浏览本系统,以上功能为系统构建提供技术支撑。在Unity3D中,当前主要使用JavaScript,C#及Boo Script类型的脚本进行二次开发。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言[6]。因此本系统选用应用广泛的C#进行系统的开发设计。
2. 三维场景搭建
三维场景主要通过地形等大的地理要素和三维模型数据来表现[7]。地形采用数字高程模型(DEM)数据,并在其上叠加数字正射影像(DOM)数据。将构建的DEM和配准后的DOM通过Globemapper软件和ArcGIS软件处理为三维模型和纹理贴图数据在Unity3D中使用,以此解决Unity3D对空间数据的不兼容问题。三维模型数据包含建筑、道路、路面、绿化、小品等。将三维模型数据库中的3dsMax模型导出为FBX格式,再导入Unity3D工程文件的Assets目录下使用[8-9]。然后设置环境部分,包括天空、灯光等。最终对场景整体进行阴影烘焙处理和水面效果的渲染处理。
3. 数据载入及属性显示
利用3ds Max建模软件按要素分类分别建立地物模型,创建几何图形文件,建立要素属性值表文件,并对各属性记录赋对应模型索引值,在Unity3D工程文件下建立工程信息树,通过模型索引,链接对应的属性信息。显示模型属性的部分代码如下:
public stringqueryName(string dest)
{ …
List
"SELECT " +"name1 " +"FROM " +"cnstyshuxingbiao " +"where name=′" + dest + "′ " +"ORDER BY " +"name1 ");
return querys[0].name1.ToString() ;
… }
4. 立体显示
系统根据人眼立体视觉原理,利用双目视差实现立体成像。先采用立体显示算法实时生成水平方向在不同视线参数时的左右立体图像对,再利用硬件(立体显示终端)实现左右眼分像,使左眼只观看左图像,右眼只观看右图像,从而使场景展现出立体感[10]。
(1) 立体显示算法
要实现三维场景的立体显示,首先必须得到符合三维特征的立体图像对。方法是先在三维场景中设置左右相机,相当于一双虚拟眼睛,通过这双眼睛来观察设计三维场景,再按照传统的单目三维图形生成方法分别生成左右图像。即计算左右相机的视线向量,取得左右眼的图像,由于左右图像的相关性很强,物体在左右图像上通常只有一个视差d,而其色彩与亮度值相差很小,可以利用这一点实现立体图像对生成的快速算法,如图3所示。
图3
(x,y,z)=(x′,y′,f)L/d
式中,(x′,y′)是左像平面中Pl的平面坐标,因此视差d与z满足
d=(L·f)/z
根据形成人工立体视觉所具备的条件,得到视差
d=x1-xr=(L·f)/z
(1)
即
(2)
式中,L为左右焦点之间的间距;f为焦距;d为两眼的视差。
系统按照以上算法,根据左右相机不同的视线向量,计算生成右眼图的同时,利用式(2)计算左眼图,以生成具有视差的左右立体图像对,如图4所示。
图4
(2) 立体显示终端
立体显示终端主要分主动快门式(3D电视机)和被动偏振光式(双投影机)两种方式。本系统采用3D电视机作为立体显示终端,立体显示方法为:3D电视机具有将左、右眼画面快速交替显示的功能。3D液晶眼镜接收到发射器的同步信号,左、右液晶快门交替开关,开关的频率与屏幕上图像的替换频率相同。在120 Hz的刷新频率下,能够得到较平稳的图像。利用人眼的视觉延迟就可以获得立体视觉。本系统中所开发的立体显示功能的摘要代码如下:
void Update ()
{ …
DoAutoEyeParameters();
if(stereoMode!=StereoModes.Disabled&&rightCamera)
{ …
if (!m_stereo.isStereoEnabled() ‖ m_stereo.convergency!=Stereoskopix.ConvergencyMode.Parallel)
{
m_stereo.DisableStereo();
m_stereo.convergency=
Stereoskopix.ConvergencyMode.Parallel;
m_stereo.EnableStereo(leftCamera, rightCamera, null, null);
}
m_stereo.stereoMode=
Stereoskopix.StereoMode.ActiveStereo;
m_stereo.parallaxDistance=parallaxDistance;
m_stereo.interaxial=eyeDistance;
}
… }
5. 人机交互控制
系统采用遥控器、健身自行车等设备作为人机交互控制方式,实时更改视点的位置和视线的方向,以实现对立体场景漫游的实时交互控制。
(1) 遥控器控制方式
系统逻辑层中的终端控制模块中设置一系列针对键盘操作的指令,将遥控器的控制按钮映射键盘指令,即可实现遥控器对系统的操作。
(2) 健身自行车控制方式
系统建设了专门针对健身自行车的逻辑层控制插件,在系统运行过程中,这一层的模块会自动处理健身自行车发送过来的事件,把健身自行车的操作事件转换成一些定义好的事件转发给Unity3D,Unity3D脚本中定义响应函数中添加事件的处理代码,从而实现健身自行车的接入。本系统中所开发的连接智能健身车功能的代码如下:
void Update()
{ …
float translation=speed;
float rotation=Input.GetAxis("Horizontal2") * rotationSpeed;
if((Input.GetKeyDown(KeyCode.Alpha1)‖Input.GetKeyDown(KeyCode.Keypad1))) speed=5;
…
translation *=Time.deltaTime;
rotation *=Time.deltaTime;
transform.Rotate(0, rotation, 0);
… }
6. 系统优化
由于三维数据量巨大,为使系统具有良好的性能及运行速度,从两方面进行优化:场景优化和脚本优化。场景优化主要包括:合理控制模型面数和塌陷模型、贴图材质优化、灯光优化、视锥体剔除技术和遮挡剔除技术等。脚本优化主要包括精简代码、提升代码的执行效率、减少不必要的循环、尽量使用静态变量代替动态变量、负责交互的脚本仅在需要时执行等。
四、结束语
3D互动GIS立体显示系统集成采用基础地理数据与虚拟现实技术,不但具有空间定位、属性查询等GIS系统优势,而且实现了动态3D场景展示和健身自行车互动,给用户带来身临其境的真实感与现场感,可以应用于规划、房地产、场馆的展览展示、数字健身、建筑设计、教育、广告媒体等行业。提升了地理信息系统的应用服务水平。
[1] 章丽鸿,李琳.虚拟现实技术的发展和展望[J]. 中国科技期刊数据库,2015(39):239.
[2] 李湘德,彭斌.虚拟现实技术发展综述 [J].创新论坛,2004(6):10-14.
[3] 伊力哈木江·巴图尔, 崔龙,张红忠,等.基于Unity3D 的三维数字校园漫游系统 [J].现代计算机,2012(12):91-92.
[4] 路朝龙.Unity权威指南:Unity3D与Unity2D全实例讲解[M].北京:中国青年出版社,2014:194-273.
[5] 成伟,薛林福,张伟.基于Unity3D的三维地质模型网络共享实现[J].吉林大学学报,2014,32(6):632-636.
[6] 甘群文. C# 多线程同步与异步的实现[J].电脑开发与应用,2009(9):35-36.
[7] 王星捷,李春花.基于Unity3D平台的三维虚拟城市研究与应用[J].计算机技术与发展,2014(4):247-250.
[8] 张晖,刘超,李妍,等.基于CityEngine的建筑物三维建模技术研究[J].测绘通报,2014(11):118-122.
[9] CHANG Y. Research on Application of High Precision Terrain Modeling Based on GIS in Virtual Reality[J]. ICECT,2009(2):425-429.
[10] 张剑清,潘励,王树根.摄影测量学[M].2版.武汉:武汉大学出版社,2009:46-50.
DesignandImplementationofGISStereoDisplaySystemBasedonVirtualRealityTechnology
LI Chaoxin,ZHANG Junping,WU Liqing
李朝新,张俊平,吴利青.虚拟现实技术支持下的GIS立体显示系统的设计与实现[J].测绘通报,2016(9):119-122.
10.13474/j.cnki.11-2246.2016.0309.
P208
B
0494-0911(2016)09-0119-04
2016-07-03
李朝新(1971—),男,高级工程师,主要从事测绘工程与地理信息工作。E-mail:13934507348@163.com