专利名称:一种适用于网络传输的城市三维模型数据组织方法
技术领域:
本发明涉及地理空间信息系统技术领域,特别是涉及一种城市三维模型数据组织方法。
背景技术:
城市是个复杂的巨大系统,三维数字城市通过建立能够全方位地、直观地给人们提供有关城市的各种具有真实感的场景信息,构建出一个立体化、逼真化的三维虚拟城市环境,为城市管理者面对复杂的城市,提供更有力的决策手段。随着空间信息获取技术和三维建模技术的快速发展,表达地上、地表、地下等数据内容的城市三维模型数据的获取精度与建模速度不断提高,数据建模范围不断扩大,精细度与复杂性不断增加,导致其数据量急剧膨胀,呈现了大规模的特性。同时,用户对三维场景可视化实时性、真实感的需求不断增强,与有限的计算机处理能力和网络带宽之间的矛盾日益突出,大规模城市三维模型数据实时可视化的性能瓶颈日益凸显。在过去的十几年中,计算与图形处理硬件取得了极大的发展,然而这一巨大的进步并没有解决城市精细三维模型和场景绘制的性能问题。在大规模用户并发控制和网络数据传输方面,还有待于进一步提高空间数据调度与传输的效率,尤其是在大规模三维精细模型可视化与多类型终端自适应可视化方面,还需要发展新的方法。目前海量地形数据和正射影像纹理数据可视化的效率已经可以满足用户的需求,但是显示大规模城市三维精细模型时的效率还很低。现有的大规模城市三维模型数据的可视化效率很低,难以满足用户需求。一方面是因为城市三维模型数据的数据量极大,且数据结构复杂,不像地形数据和影像数据可以通过金字塔分层分块的方式就可以高效调度与可视化;另一方面是因为城市三维模型数据的可视化涉及到大量的数据传输,数据组织方式的不足导致网络传输效率的低下,从而导致网络传输的速度跟不上三维实时可视化的需求,难以达到满意的三维实时可视化效果。
发明内容
本发明提供了一种适用于网络传输的城市三维模型数据组织方法,旨在解决现有技术中大规模城市三维模型数据的可视化效率低,难以满足用户需求的问题。本发明采用如下技术方案:—种适用于网络传输的城市三维模型数据组织方法,包括:S1、对城市三维模型数据进行多细节层次简化预处理;S2、针对整个城市范围海量场景,建立多层次三维场景组织结构;S3、对用于网络传输的城市三维模型数据进行序列化与重建;S4、基于可见性计算与LOD计算进行城市三维模型数据动态调度。优选地,所述步骤SI具体为:对城市三维模型的原始模型进行逐步简化,由精致到粗糙生成4级替代模型LI L4。优选地,所述对城市三维模型的原始模型进行逐步简化,由精致到粗糙生成4级替代模型LI L4的步骤具体包括:S11、城市三维模型数据的每个节点对象作为LI级最精细原始数据;S12、得到节点对象的原始三维几何数据及其关联的原始纹理数据;S13、对LI级模型原始纹理数据进行多级压缩,生成L2-L4级简化模型关联的纹理数据;S14、对LI级模型的原始三维几何数据采用塌陷法进行自动简化,与生成的相应级别纹理数据关联后,生成L2级和L3级简化模型的节点对象;S15、利用图像缓存生成的Impostor节点,生成L4级模型的图像缓存节点对象;S16、创建4级替代模型LI L4的LOD节点对象,对4级替代模型LI L4进行LOD参数配置。优选地,所述步骤S2具体包括:S21、采用层次包围盒处理场景树,实现场景的包围体层次结构;S22、采用K-D树空间剖分算法,对经过层次包围盒处理的场景树进行场景树空间层次剖分,建立K-D树空间索引。优选地,所述步骤S3具体包括:S31、在服务器端把城市三维模型数据信息序列化为字节流的形式,所述城市三维模型数据包括三维场景树和空间索引;S32、在客户端解析收到的字节流,并重新构建出城市三维模型数据。优选地,在所述步骤S31中,对三维场景树进行序列化时,对于场景树中的实际存储数据的叶节点,只记录所述叶节点的ID,不实际读取所述叶节点的数据。优选地,在所述步骤S32中,解析收到的字节流时,记录下每一个解析出的节点的唯一 ID与指针,并把所述ID和指针保存在〈Key,Value)的Map索引结构中。优选地,在所述步骤S4中,当LOD节点的某个细节层次长期不参与场景绘制时,将所述LOD节点卸载,否则,加载所述LOD节点。本发明通过海量城市三维模型数据的空间索引结构的构建,以及城市三维模型数据的自动多细节层次简化,对网络环境下的城市三维模型数据进行优化组织,提高了网络环境下城市三维模型数据的动态调度效率,提高了城市三维模型数据实时可视化的效率。
图1为本发明实施例一种适用于网络传输的城市三维模型数据组织方法流程图;图2为本发明实施例中城市三维模型数据多细节层次简化方法的流程图;图3为本发明实施例中三维场景组织结构图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。本发明实施例提供了一种适用于网络传输的城市三维模型数据组织方法,如图1所示,该方法包括下述步骤:步骤S1:对城市三维模型数据进行多细节层次简化预处理。本步骤中,采用LOD (level of detail,细节层次)技术进行多细节层次简化。预先计算几何体的一组替代模型,运行时选择合适的LOD级别进行渲染,在不影响渲染质量的同时,减少需要渲染的面片数。LOD技术的核心思想是在适当的时候,用简化的模型替代原始模型,进行渲染。在实际应用时,层次模型的生成是首要问题,根据特定的生成算法,可以对原始模型进行逐步简化,生成一组由精确到粗糙的替代模型。本实施例中,对城市三维模型的原始模型进行逐步简化,由精致到粗糙生成4级替代模型LI L4,如图2所示,其具体步骤如下:S11、城市三维模型数据的每个节点对象作为LI级最精细原始数据;S12、得到节点对象的原始三维几何数据及其关联的原始纹理数据;S13、对LI级模型原始纹理数据进行多级压缩,生成L2-L4级简化模型关联的纹理数据;S14、对LI级模型的原始三维几何数据采用塌陷法进行自动简化,与生成的相应级别纹理数据关联后,生成L2级和L3级简化模型的节点对象;S15、利用图像缓存生成的Impostor节点,生成L4级模型的图像缓存节点对象;S16、创建4级替代模型LI L4的LOD节点对象,对4级替代模型LI L4进行LOD参数配置。节点对象单元的纹理依据2:1的长宽比例生成3张简化纹理存储至外存,对应L2 L4 三个等级的简化模型。通过调用 CUDA (Compute Unified Device Architecture,统一计算设备架构)库实现了 GPGPU (General Purpose GPU,通用计算图形处理器)将纹理压缩为DTX3格式。不同尺度的外存模型根据需要依次调用,效率比一次性调入mipmap文件要高。至此,城市三维模型数据节点对象多细节层次自动简化完成。步骤S2:针对整个城市范围海量场景,建立多层次三维场景组织结构。场景树结构和空间结构层次剖分共同组成了三维场景数据,其中空间结构层次剖分是从场景树结构中建立起来的。空间结构层次剖分组织方式上采用了层次包围盒(Bounding Volume Tree, BVT)和空间 K-D 树结构;BVT 采用的是 OBB-Tree 结构,空间 K-D树结构是从经过BVT处理过的场景树中建立起来的。具体地,在本实施例中,通过如下步骤建立多层次三维场景组织结构:步骤S21、采用层次包围盒处理场景树,实现场景的包围体层次结构。采用层次包围盒来实现三维场景图形的管理,综合采用包围球和包围盒两种形式来实现场景的包围体层次结构。采用有向无环图结构保存信息。一个场景图包括一个根节点、多级内部的枝节节点,以及多个末端的叶子节点。根节点和枝节节点负责构建图的层次,以及完成某些特定的功能;而叶子节点则保存了某一个或多个可绘制对象的信息。每个节点都维护一个自身的包围体,以此类推,构成一系列分明的层次。这种层次包围盒图,可以加速正确表达场景图形的信息组成,也可以加速场景对象的裁减、相交测试、碰撞检测等一系列操作。该结构使得每个节点可以有多个父节点。当同一个几何对象需要被多次引用,由多个父节点指向同一个子节点,与每个父节点都指向一个新的子节点的树状结构相t匕,节点总数减少,内存占用率和场景遍历步数降低,而渲染的最终结果可以保持不变。整个场景模型全部由节点组成,节点与节点之间通过关系连接起来,构成了一种图的结构。为了使得节点在客户端与服务器之间保持一致性,每一个节点必须在客户端与服务器之间有一个唯一的标识,即三维场景中的每一个节点都分配一个唯一 ID。步骤S22、采用K-D树空间剖分算法,对经过层次包围盒处理的场景树进行场景树空间层次剖分,建立K-D树空间索引。本发明实施例的场景树空间层次剖分采用K-D树空间剖分算法。在可见性判断的过程中,需要遍历空间结构,由于节点在空间分布并不是均匀的,所以如果按照均匀的方式进行空间剖分的话,遍历过程中的可见性剔除效果就会很差,因此采用非均值剖分的方式构建K-D树。在构造非均值剖分K-D树的过程中必须考虑两个因素:空间节点所占空间的大小和空间节点所包含的几何节点数目。空间过大,在可见性剔除的过程中判断为可见的概率增大;如果几何节点过多,则空间的剖分深度会加深,由于空间的连贯性可见的概率也会增加,而且空间的大小和空间节点所包含几何节点的数目有一定的关系,下式是左右子空间节点的制约关系:L.volume+R.volume=const volume(I)L.numObjects+R.numObjects=const number(2)构造K-D树的过程是递归的从上到下的剖分过程,建立代价函数来计算每一种可能的剖分平面所产生的代价函数,代价函数定义如下:L.surfaceArea*L.numObjects+R.surfaceArea*R.numObjects (3)其中L、R分别是左右子树,surfaceArea为左右子树的表面积,而numOb jects则是左右子树的集合物体的个数。如前面所述,`本实施例用左右子树的体积代替表面积来计算代价,公式如下所示:L.volume*L.numOb jects+R.volume*R.numObjects(4)由于左右子树的底面积相等,故可以用左右子树的沿平行于垂直剖分平面的直线的边来代替体积的求取。上面的公式是用来计算沿单个轴上的代价,选取代价函数最小的。但是,空间中存在三个剖分轴:x、Y、z,分别计算出每个轴向上的最小代价的剖分平面,然后选取三个轴上代价函数最大的剖分平面作为此次剖分的剖分平面。选取三个轴上最大的代价函数的原因在于,由于一个空间中节点数据是一定的,而且不管从哪个方向上剖分,空间节点中包含的几何节点数是近似的,而体积的计算可以用左右子树的沿平行于垂直剖分平面的直线的边的长度来代替,那么,在三个轴向上分别选取了最小的代价值,选取最大的代价函数近似于选取父空间节点中包围盒最长的边进行剖分,这种剖分结构也是符合实际情况的,例如在城市场景中(主要分布在X-Y平面上)会优先选取垂直于X轴或Y轴的剖分平面进行空间剖分,但是如果剖分到一定子空间节点后,由于城市场景中有较高的建筑物,则会选取沿垂直Z轴的剖分平面进行剖分。具体的,最终三维场景模型的组织结构如图3所示,三维场景根节点(Root)下面分为场景树(scencegraph)与空间索引结构(K-D tree patial index)。其中场景树下面首先分类为:可视场景树(Visible scencegraph)和非可视场景树(Unvisiblescencegraph),这些分类的下面按照空间信息的属性,将其分为不同的层,可视场景树分为建筑层(Building Layer)、交通层(Traffic layer)、管线层(Pipeline Layer)、地质体层(vegetation Layer)等;非可视场景树分为工程层(Project Layer)、相机路径层(CameraLayer)等。场景树与空间索引结构之间通过关联节点(Relation)连接起来。步骤S3:对用于网络传输的城市三维模型数据进行序列化与重建。为了便于城市三维模型数据的共享与传输,在存储和网络传输时,需要在服务器端把城市三维模型数据信息序列化为字节流的形式,然后在客户端(也即接收端)解析收到的字节流,并重新构建出城市三维模型数据,这里主要包括三维场景树和空间索引的序列化与重建。在城市三维模型数据的三维场景初始化时,首先要获取整个三维场景的K-D树空间剖分索引结构,基于K-D树空间剖分索引结构进行三维场景的动态调度。因此需要将整个K-D树空间索引数据压缩并序列化成可传输的字节流传输到客户端,在客户端接收后进行K-D树空间索引结构的重建,常驻内存缓存中。本实施例中,通过如下步骤进行序列化与重建:步骤S31、在服务器端把城市三维模型数据信息序列化为字节流的形式,该城市三维模型数据包括三维场景树和空间索引;本步骤中,三维场景树的序列化,即为从场景树的根节点开始遍历整棵场景树,按照层次顺序把场景树中的每一个节点都序列化。为了方便场景树的保存,减少网络传输的时间,对于场景树中的实际存储数据的叶节点,不需要实际读取其数据,而只需要记录其唯一 ID,根据后面三维可见性和LOD的计算动态调度节点数据。将三维场景树进行压缩,然后序列化成可以快速网络传输的字节流。步骤S32、在客户端解析收到的字节流,并重新构建出城市三维模型数据。三维场景树序列化之后的压缩的字节流,可以很容易地解析出场景中的每一个节点。在解析的过程中,需要记录下每一个解析出的节点的唯一 ID与指针,并把它们保存在一个〈Key,Value)的Map索引结构中进行管理。通过查找这个Map索引结构,就可以获得节点唯一 ID所对应的指针值。步骤S4:基于可见性计算与LOD计算进行城市三维模型数据动态调度。对于大规模的场景,当将大量的城市三维模型数据读入内存时,必然会造成计算机系统的巨大负担,并且可能会导致内存不足。此时就需要一种动态调度的机制。在三维实时可视化过程中需要进行可见性计算与LOD计算,按需动态调度城市三维模型数据。可见性计算就是计算随着三维场景视点的变化,哪些模型的节点由不可见变成可见,以及哪些模型的节点由可见变成不可见等,对于有不可见即将可见的对象节点需要将数据读入内存进行绘制。LOD计算就是随着三维场景视点的变化,哪些模型节点的LOD级别需要从粗糙变成精细,哪些模型节点的LOD级别需要从精细变成粗糙,需要生成LOD级别切换的动态调度任务进行处理。同时,对于可以实现动态调度的节点,当他的某些子节点对场景绘制长期没有参与时,可以将子节点自动卸载,释放内存空间;反之,也可以即时加载某些不在内存中的子节点,即动态地对其场景子树进行调度控制。同理,LOD节点的某个细节层次如果长期不参与场景绘制,则将其卸载,否则将其加载。在实现上设计智能指针作为所有节点的基类,有效防止了内存释放不完全导致的泄露。综上所述,本发明从适用于城市三维模型数据网络传输的角度出发,对海量城市三维模型数据进行优化组织,首先对城市三维模型数据进行多细节层次的自动简化预处理,建立基于层次包围盒与空间K-D树的海量城市三维模型的三维场景组织结构,并从三维场景树与空间索引的序列化与重建上提高网络传输的效率,最后基于可见性计算与LOD计算进行城市三维模型数据动态调度。本发明提高了网络环境下城市三维模型数据的动态调度效率,提高了城市三维模型数据实时可视化的效率。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种适用于网络传输的城市三维模型数据组织方法,其特征在于,包括: 51、对城市三维模型数据进行多细节层次简化预处理; 52、针对整个城市范围海量场景,建立多层次三维场景组织结构; 53、对用于网络传输的城市三维模型数据进行序列化与重建; 54、基于可见性计算与LOD计算进行城市三维模型数据动态调度。
2.根据权利要求1所述的方法,其特征在于,所述步骤SI具体为: 对城市三维模型的原始模型进行逐步简化,由精致到粗糙生成4级替代模型LI L4。
3.根据权利要求2所述的方法,其特征在于,所述对城市三维模型的原始模型进行逐步简化,由精致到粗糙生成4级替代模型LI L4的步骤具体包括: 511、城市三维模型数据的每个节点对象作为LI级最精细原始数据; 512、得到节点对象的原始三维几何数据及其关联的原始纹理数据; 513、对LI级模型原始纹理数据进行多级压缩,生成L2-L4级简化模型关联的纹理数据; 514、对LI级模型的原始三维几何数据采用塌陷法进行自动简化,与生成的相应级别纹理数据关联后,生成L2级和L3级简化模型的节点对象; 515、利用图像缓存生成的Impostor节点,生成L4级模型的图像缓存节点对象; 516、创建4级替代模型LI L4的LOD节点对象,对4级替代模型LI L4进行LOD参数配置。
4.根据权利要求1所述的方法,其特征在于,所述步骤S2具体包括: 521、采用层次包围盒处理场景树,实现场景的包围体层次结构; 522、采用K-D树空间剖分算法,对经过层次包围盒处理的场景树进行场景树空间层次剖分,建立K-D树空间索引。
5.根据权利要求1所述的方法,其特征在于,所述步骤S3具体包括: 531、在服务器端把城市三维模型数据信息序列化为字节流的形式,所述城市三维模型数据包括三维场景树和空间索引; 532、在客户端解析收到的字节流,并重新构建出城市三维模型数据。
6.根据权利要求5所述的方法,其特征在于,在所述步骤S31中,对三维场景树进行序列化时,对于场景树中的实际存储数据的叶节点,只记录所述叶节点的ID,不实际读取所述叶节点的数据。
7.根据权利要求5所述的方法,其特征在于,在所述步骤S32中,解析收到的字节流时,记录下每一个解析出的节点的唯一 ID与指针,并把所述ID和指针保存在〈Key, Value〉的Map索引结构中。
8.根据权利要求1所述的方法,其特征在于,在所述步骤S4中,当LOD节点的某个细节层次长期不参与场景绘制时,将所述LOD节点卸载,否则,加载所述LOD节点。
全文摘要
本发明涉及地理空间信息系统技术领域,提供了一种城市三维模型数据组织方法,步骤包括对城市三维模型数据进行多细节层次简化预处理;针对整个城市范围海量场景,建立多层次三维场景组织结构;对用于网络传输的城市三维模型数据进行序列化与重建;基于可见性计算与LOD计算进行城市三维模型数据动态调度。本发明通过海量城市三维模型数据的空间索引结构的构建,以及城市三维模型数据的自动多细节层次简化,对网络环境下的城市三维模型数据进行优化组织,提高了网络环境下城市三维模型数据的动态调度效率,提高了城市三维模型数据实时可视化的效率。
文档编号G06F17/30GK103093499SQ20121057606
公开日2013年5月8日 申请日期2012年12月26日 优先权日2012年12月26日
发明者李晓明, 吕智涵, 胡金星, 张宝运, 李微微, 康艳丽 申请人:深圳先进技术研究院