APP下载

移动环境下三维场景的实时渲染技术研究

2011-08-06丁晶秦亮军

城市勘测 2011年6期
关键词:视景分块绘制

丁晶,秦亮军

(广州市城市规划勘测设计研究院,广东广州 510060)

1 引言

移动三维地图作为一种新的地图应用模式,可被简单定义为是在各种移动终端上,使用三维可视化技术,充分考虑人性化的空间信息的表达方式,为用户提供有效的、直观的移动信息服务的地图[1]。目前,移动三维地图已成为地理信息服务的重要方面。

但是现有的大多数移动地图还只支持二维图元,或采用平面接合或多面贴图的技术生成模型,反映抽象的平面位置信息,真正实现3D技术的系统比较少见[2]。实现移动三维地图的关键就是移动环境下三维场景的实时显示,即必须以一定的刷新频率实现场景画面的连续性,通常为20帧/秒~30帧/秒,至少不能低于10帧/秒,这个在桌面系统里已经解决的问题是三维地图转移到移动环境中面临的难题。

从现有的研究情况看,主要从三个环节寻求解决办法:一是数据从外存储器到内存阶段,通过数据的有效组织、细节层次预处理、视景体剔除、内存的合理调度等缩短读数据的时间;二是通过使用传输速率高的无线接入IP网络的方式提高数据传输速度,减少用户等待时间;三是数据在内存中的绘制阶段,通过多边形简化、多分辨率模型等技术缩短绘制时间。实现城市三维地图在移动设备上的实时显示时必须要综合考虑以上几个方面。只有三个环节都得到有效改进并且相互协调,才能突破移动环境硬件资源的限制,满足应用的需要[3]。由于第二环节主要靠硬件技术的突破,因此本文主要从第一、三环节入手,考虑数据组织和实时渲染算法来提高移动三维地图的实时显示速度。

2 移动环境下三维数据的组织

构建三维场景所涉及的数据主要有:大量的地形数据、二维矢量图形、三维模型数据、属性数据、纹理数据等。这些数据量一般是二维地图数据量的几十倍甚至是上百倍[4]。对于桌面环境的城市三维地图而言,目前已经有非常合理科学的海量数据组织、存储和管理方案,例如金字塔模型和LOD技术[5]。本文接下来针对移动环境中的数据组织展开讨论,其中LOD模型是实时可视化的关键,数据分层是地理信息显示、查询、分析的前提,数据分块是在数据分层的基础上将场景分割成多个子场景,这样在场景中漫游时,当前显示区域的总数据量不会很大,以保证实时浏览的连续流畅。

2.1 LOD建模

LOD模型是指根据不同的显示对同一个物体采用不同精度的几何描述,物体的细节层次越高,则数据量越大,描述得越精细;细节层次越低,则数据量越小,描述得越粗糙。LOD模型在几何结构上大致可以分离散LOD、连续LOD和多分辨率LOD。在进行场景建模时,由于地物景观丰富,采用连续LOD不太现实,我们选择建立多级LOD模型。但是,如果LOD层次太多会导致频繁地读取不同细节层次模型数据,影响实时绘制的流畅性;LOD层次太少会导致不同等级切换有明显的突变现象。目前,多级LOD建模并没有统一标准,它和应用需求精度、可视化场景的大小以及地物的复杂程度及聚集程度等密切相关,因此多级模型的视觉连续性成为建模时需要考虑的一个重要因素。

三维模型的LOD实质上可以理解为城市三维地图的分辨率,进而类似于传统二维表示的地图比例尺的概念。因此,对城市三维模型而言,确定LOD建模需要满足的原则,对三维场景的感知和目标识别具有重要意义,简单来说可以考虑如下的LOD建模原则:

(1)LOD模型的统一性:三维模型主要是由几何体和纹理来描述的,而几何与纹理具有不同的特点来满足特定应用的不同方面要求。所以,任一尺度下的LOD模型,必须明确模型当中几何与纹理的不同特点。

(2)特征的可识别性:城市三维地图的应用中导航是非常重要的一个方面,在LOD建模时使用的几何结构和纹理要能表现模型的特征,便于用户进行区域判别[6]。

(3)LOD模型的连续性:LOD模型的定义本质上是一个连续的序列,在序列当中不同LOD模型之间应该具有一定的相关性,从而保证场景漫游时不产生明显的间跳感。

在明确LOD建模原则之后,就需要选择合适的建模方式。目前城市三维场景建模一般有立即模式和保留模式两种,以立即模式和手工编码建立所有的模型对象会导致开发速度很慢并且复杂;而保留模式允许设计者通过使用建模软件来设计并建立三维场景,然后在应用程序中直接加载模型数据,这样可以提高建模速度和场景渲染速度,本文采用后一种建模方式。

2.2 数据分层

在进行数据存储和组织、图形与属性数据采集等之前必须确定城市三维场景所涉及的所有数据的分层规则,所有工作以此为依据逐步展开。

在现实世界中,属于同一要素类型的地物归为一个图层。一般来说,三维场景中的地物大致可分为地块、建筑物、树木、路灯、交通标志、其他点状要素等几层,每个地物层中包括若干个模型类,一个模型类下面有多个实体。这样,三维场景的模型文件具有大量重复性的特征,如树木、路灯、交通标志等在场景中的大量重复,在读取和传输的时候只需一次,在显示的时候只绘制一次,后面的模型直接利用已读取好的模型类。每个模型类包含一个模型文件,每个模型的中心均已归零。通过实体的中心坐标、旋转方向、缩放比例在场景中进行定位,各个实体各有差异。植被、路灯、港口机械、建筑等重复出现无特定地点的模型称为普通模型,对于独一无二的标志性建筑等,该实体类下面仅仅只有一个实体模型。由于三维场景中模型量很大,在程序中读取和编辑这些模型将非常繁琐,其命名规则就尤其重要,这里统一采用“层编码+编号”的规则。

2.3 数据分块

小规模场景在漫游过程中可以作为一块来处理,当场景数据规模增大时,这种做法显然就不太合适了,需要对场景数据作分块处理。对大范围区域进行分块不仅是因为设备内存空间有限,容纳不了大规模的数据,而且有利于进行基于分块的视景体裁剪、模型数据的分块实时读取、纹理的处理和并行绘制。

分块的大小对于最后三维场景的绘制速度影响很大。分块越大,扫描就越粗糙,包括的顶点也就越多;反之,分块越小,扫描越精细,得到的裁剪后的顶点数也就越接近于在视景体内的实际顶点数[7]。但是,对块裁剪计算量大,数据块太琐碎,不利于数据组织和管理。由于要绘制顶点的数目和数据块裁剪计算、加载时间直接影响实时漫游效果,所以选择适当的分块大小就要取一个折中的解决方案,使得既能利用扫描裁剪的高效率,又能获得一个相对最少的顶点数。各数据块是场景绘制的最小单元,考虑视点相关的各块分辨率和透视投影规律,数据块如果过大,相邻不同分辨率模型数据显示会有跳跃感,影响显示效果。

为某一个图层中的全部模型进行数据块划分及建立索引的过程为:

(1)将该层的全部模型数据加入到一个数据块中,计算该数据块的矩形范围框;

(2)设置数据块划分的粒度大小,可以用数据块中的对象个数或对象占用存储空间的大小为阈值;

(3)判断数据块中的对象是否在阈值之内,如果满足,以该数据块的范围框作为对象的空间索引;如果不是,以对象的中心位置将该数据块按四叉树继续划分成4块。

(4)对于四叉树的每一块,以块内所有对象的包围框重新计算数据块的范围框,并重复步骤(3),直到所有分块中的对象均满足步骤(2)中的阈值条件。

3 场景绘制加速技术

基于上面的数据组织,三维场景的实时可视化实际上是根据视点参数和应用需求来确定哪个层次的哪级模型的一个或多个子场景作为当前的可视场景进行绘制。为了加速三维物体模型的绘制速度以期达到实时显示的要求,可以通过有效地剔除不必要显示的对象,降低图形渲染流水线的负荷,从而提高三维场景可视化的速度,常用的加速方法有视景体裁减。

3.1 视景体裁剪基本原理

视景体剔除也被称为视景体裁剪。考虑到人类视角大小的限制,当观察一个场景时,在人眼视角范围外的物体是看不见的;换句话说,如果能在场景绘制之前,即使将看不到的场景部分剔除而不加以显示也不会对正确的显示结果造成任何影响。因此视景体剔除技术是通过判断物体或场景的边界是否与视景体存在交集来实现把位于视景体之外的物体或场景排除在绘制过程之外的。在程序实现的过程中,视景体剔除流程往往和场景的数据组织方式相关。

城市三维可视化实际上就是物体从三维空间变换到二维平面的过程,一般要经过视点变换、模型变换、投影变换和视口变换4个步骤。在计算机图形学中,不同的投影方式定义了不同的视景体。视景体有两个作用,首先,视景体决定了一个物体是如何映射到屏幕上的;其次,视景体定义了哪些物体被裁剪到最终的图像之外。在三维显示中,有透视投影和正射投影两种投影模式。不管是透视投影还是正射投影,其视景体都有6个裁剪面,分别是左、右、近、远、上、下裁剪面。视景体裁剪就是利用这6个裁剪平面来判断物体和视景体之间的关系,在视景体外的物体或物体的一部分将会被剔除掉而不显示。

在城市三维地图的实时显示过程中,由于视点参数(如视点位置、视区中心位置、观察方向等)都在不断变化,场景裁切也在不断进行,当视点参数变化一次,场景裁切也要进行一次,因此场景裁切的效率会直接影响这个绘制过程的速度。这样的裁剪方式效率非常低,因为在显示时要对每一个点或物体都进行测试,来确定哪些点或物体在视景体内,这显然是不切实际的。

3.2 裁剪流程

在实际裁剪过程中,前面分层分块的三维数据组织方式可以有效地提高场景裁剪速度,实现场景的快速实时显示。因为数据分层有利于提取用户感兴趣的数据,过滤掉无用的图层;而通过数据分块机制,在裁剪预处理阶段就可以直接剔除位于裁剪区以外的数据块,同时将位于裁剪区内的数据块作为部分裁剪结果返回,然后只需对那些与裁剪区相交的数据进行模型的裁剪处理。

根据上述过程,我们分别针对图层——数据块——模型逐级过滤、裁剪,由粗到细得到各种裁剪结果图层、数据块、模型等中间数据。将这些数据按照模型——数据块——图层的顺序进行重构,就可以得到位于裁剪区内的三维场景。基于数据分层分块组织的大范围城市三维场景的裁剪总体流程如图1所示。

图1 裁剪流程

从图1的流程图中可以看出,要提高视景体裁剪速度,关键是要提高判断数据块与裁剪区的关系以及裁剪区内各个数据块的模型与裁剪区的关系的计算效率。前者由于数据块为矩形,其与裁剪区的关系可以简化为两个矩形位置关系的算法,而后者可以通过使用模型的坐标位置代替模型,将由多个三角面构成的复杂模型的物体裁剪简化为点的裁剪。

这里,对该方法的绘制性能情况进行了测试,为了消除网络传输等其他因素的影响,先将模型数据存储在移动设备里,为了试验的方便,只是简单地将数据划分为4×4的16块,每个数据块中有5个建筑物模型实体,采用上述裁剪方法,显示时的帧速率为14.6帧/秒,效果较好。

4 系统实现实验

实验中所使用的开发平台为Visual Studio 2005,开发包是 Windows Mobile 5.0 Pocket Phone SDK,并使用Photoshop制作和处理纹理贴图,然后在3D Studio Max中建模。

在VC++中用OpenGL ES读取和现实3DS文件的主要步骤如下:

(1)建立与3ds文件格式相应的数据结构;

(2)将读入的3ds文件数据放到上述建立的数据结构中;

(3)将上述数据结构转换为便于OpenGL ES绘制的数据结构;

(4)用OpenGL ES提供的绘制函数完成最终图形的显示。

相关的数据结构定义如下:

接着继续读入三角面、顶点、读入材质及颜色等。文件读取完成后就是绘制模型了,用OpenGLES绘制图形与OpenGL类似,在此不详细叙述。

由于实验性质,在对某街区进行建模后,将模型文件集成到移动设备仿真器中进行显示,其中模型数据总量为23.6 M,实现了交互式漫游和以固定视角及视高自动向前漫游两种模式,漫游过程中LOD模型之间切换较自然,无明显跳跃感,基本能保证实时交互浏览的连续流畅。

5 结论

在目前的地理信息系统和移动位置服务的实际应用中,信息的表现形式仍然是以二维平面地图为主,这里所研究的三维地图在移动设备上的实时显示是现在地图应用领域中比较有新意的研究方向。本文结合四叉树组织的数据结构,采用了通过减少视景体裁减平面和改进判断方法进行优化后的视景体裁减算法,加快了显示速度。

但是本文对数据组织和视景体裁减的讨论都是在一种理想状态下进行的实验,模型简单可控,忽略了很多现实的影响因素。因此,进一步的研究应该充分考虑现实因素,使系统具有实用性。

[1]刘琨.基于智能客户端的三维移动GIS的设计与实现[D].武汉:华中科技大学,2006

[2]Luca Chittaro.Visualizing Information on Mobile Devices,IEEE Computer Society Computer,Vol 39 ,P:40 ~45,March 2006

[3]REICHENBACHER T.Adaptive concepts for a mobile cartography[A].Journal of Geographical Sciences,2001,11(suppl.):43 ~ 53

[4]孙敏,马蔼乃,陈军.三维城市模型的研究现状评述[J].遥感学报,2000,6(2):155 ~161

[5]岳利群,夏青,柳佳佳等.全球海量地形数据组织管理方法的研究[J].测绘科学,2009,34(3):121~123

[6]黄铎.三维城市模型的数据内容[D].武汉:武汉大学,2004

[7]Miran Monsmondor,Hrvoje Komericki,Igor S.Pandzic.3D Visualization on Mobile Devices,Telecommunication Systems,Vol 32,P:181 ~191,July 2006

猜你喜欢

视景分块绘制
钢结构工程分块滑移安装施工方法探讨
虚拟现实技术在游戏设计中的应用及研究
分块矩阵在线性代数中的应用
超萌小鹿课程表
放学后
反三角分块矩阵Drazin逆新的表示
基于多分辨率半边的分块LOD模型无缝表达
全回转拖轮运动建模与视景仿真
在转变中绘制新蓝图
基于Vortex与Vega Prime的车辆模拟器动力学与视景仿真