王 宇,陈先桥,高 嵩
(1.武汉理工大学计算机科学与技术学院,湖北 武汉 430063;2.武汉理工大学智能交通系统研究中心,湖北 武汉 430063)
高速公路视景仿真软件可以帮助设计人员进行线形指标衡量,景观设置调配,环保经济评价等,同时还可以作为项目招标过程中的效果演示及工程完工后的展示[1]。但由于高速公路线长、面积广,使得高速公路地形具有大规模性的特点。如何根据真实的地形数据快速有效地生成大规模地形并进行实时渲染成为高速公路视景仿真的关键。
目前在高速公路地形三维仿真方面,长安大学进行了西汉高速公路秦岭北麓路段人—车—路(环境)联合虚拟仿真系统的研究,该研究完成了基于GIS数据的真实地形生成,但其只选取了西汉高速公路的一段25 km长的路段,不能体现高速公路地形的大规模性[2];黄江波等做了孝襄高速公路部分路段的视景仿真,但该研究并未对孝襄高速全景地形三维仿真提出合理的解决方案[3]。在地形三维渲染方面,目前国内外主要采用连续 LOD(levels of detail)技术,主要包括DUCHAINEAUY提出的基于二叉树结构的ROAM算法[4],LINDSTROM 提出的基于规则格网的连续细节层次实时高度场绘制算法[5],ROTTGER等提出的基于规则格网的几何形状过渡算法[6]。这些算法都是从视点角度采用连续LOD技术实现对地形三维渲染的优化。
针对高速公路一般具有线性、狭长的特性,在宏观上提出了一种按道路线形进行地形划分的方案,将地形的原始勘测数据转换为多个小块地形数据,通过对小块地形数据提取点插值生成格网来生成小块地形。为解决多地形块之间的拼接问题,笔者提出了一种多地形块之间的边缘融合算法。微观上对小块地形渲染采用OGRE引擎内置的基于连续LOD的GeoMipMapping算法,宏观上对多块地形采用动态调度策略来实现高速公路大规模地形的交互式实时漫游。
通常大规模地形涉及到海量的数据,一般不可能将所有的数据一次性全部载入内存,必须根据地形绘制的要求,实时地进行地形数据的动态加载与卸载。同时由于高速公路视景仿真需要对真实地形的勘察数据进行仿真,构建大规模的地形模型非常复杂,而构建小块的地形模型则比较简单,因此必须对原始地形数据进行分块划分。
就高速公路视景仿真而言,从第一人称视角来看,视点是在道路上,观察者关心的是道路沿线的景观,并不关心纵向上距离高速公路很远的场景,因此只需要对高速公路沿线的场景进行仿真,如图1所示。基于该特性,笔者提出基于高速公路线形走势进行地形划分的思想。
图1 地形分块示意图
为了使划分简单易操作且降低地形生成的复杂度,笔者在原始地形数据上按矩形区域对地形进行划分。沿着道路线形对需要仿真的地形区域依次构建邻接矩形区域完成对地形的分块划分。同时在此过程中,为了使建模后的多块地形之间能够较好地衔接,在任意两块地形之间构建一小块重叠区域如图1所示。这样不仅有利于地形的生成,同时也有利于地形模型的渲染及动态调度。
目前,使用最多的地形模型主要有3种,分别是等高线模型、TIN不规则三角网模型和规则格网模型。其中,等高线模型通常需要一种插值方法来计算落在等高线外的其他点的高程,不利于地形的实时渲染;TIN不规则三角网模型虽然能够减少格网模型带来的数据冗余,但其模型结构比较复杂,不利于构建以及LOD的实现[7];格网模型所需存储数据量大,不能精确地表示地形的结构和细部,但格网模型结构简单且利于构建以及 LOD 的实现[8]。
由于格网模型简单且易于实现LOD,目前大多数地形仿真都是使用格网模型。高速公路仿真的重点在于如何高效地渲染地形,不需要非常精细的地形模型,且基于分块划分的矩形区域容易生成格网数据,因此笔者采用格网模型来表示地形。
针对格网模型数据量大的问题,可以通过数据压缩的方法来减少冗余。由于格网模型具有规则的网格,任意两个网格之间大小固定,可以顺序存储每个点的高程值,只需要知道一个顶点的坐标,就可以根据格网的大小偏移计算出其他点的坐标。由于图像具有顺序的存储结构,因而可以使用位图格式来存储格网数据,位图中的每个像素对应格网中的每一点,像素中的值就存储格网的高程值。目前各种位图都有无损压缩算法,因此基于位图的方式来存储格网数据可以降低格网数据所占存储空间,减少数据冗余。
按照道路线形对整个地形进行划分,如果矩形区域太大,则生成的格网数据会很多,从而造成一块地形很大,不利于渲染和加载且数据冗余量大;如果矩形区域太小,格网数据会相对减少,冗余数据也会相对减少,但由于任何两个矩形区域之间有一定的重叠区域,重叠区域块的增加会导致冗余数据量增加,从而造成整体数据冗余量比矩形区域较大时还要多。因此确定一个合适的矩形区域划分的大小至关重要。
对于采用格网模型的地形来说,山区高速公路视景仿真对地形的精度要求不高,目前很多学者在对山区高速公路进行视景仿真时对高速公路地形格网间距选取为10~30 m,笔者选取格网间距为10 m,能够满足高速公路视景仿真对地形精度的要求。
笔者采用OGRE中的地形场景管理模块来渲染地形,该地形场景管理模块对地形格网数据有特殊的要求,一块地形的格网必须是正方形,且正方形边长的数据量必须是2n+1。为了能够更好地对多块地形之间进行边缘融合处理,笔者选取重叠区域的边长为1 km左右,需要100个左右的格网数据,如果将边长的格网大小设置为513,则可用数据量只有400左右,分块太小。因此笔者选取边长为1025的格网,有效格网点数为900个左右,则每块能够容纳的高速公路有效数据为9 km左右,而地形方形区域边长大小约为10 km。因此从原始的地形数据上对地形进行分块划分时每个地形方形区域边长大小约为9~10 km,相邻两个地形块之间设置长度约1 km的重叠区域。采用该方案能够满足对地形渲染的实时性要求,如果再大则地形的原始数据量过大,不利于地形格网数据的生成,同时在渲染时也会消耗大量内存降低渲染效率。
在分块处理的基础上对分块后的小块地形数据进行处理生成地形规则格网数据。一般地形原始数据的格式主要包括GIS数据,CAD数据等,笔者主要针对CAD数据来生成地形,由于CAD数据中DXF文件格式是公开的,因此选用DXF文件的CAD数据来生成地形规则格网数据,其中格网地形生成流程图如图2所示。
图2 格网地形生成流程图
首先将获得的地形原始数据分成小块,然后利用CAD软件将小块地形转换生成DXF格式的地形数据。通过对DXF文件格式分析可知,DXF文件主要包括各种图元信息,文献[9-10]对DXF文件进行了详细的分析。因此只需要提取出DXF文件中含有高程值的离散点数据,分析DXF中的各种图元格式,依次提取出带有高程值的点数据信息即可。
提取出离散点数据后,需要对离散点数据进行插值生成规则格网数据,选用Surfit软件将离散点数据插值生成地形规则格网数据。
原始地形数据经过提取、插值、生成格网数据后所重叠的区域,如图3所示。由于两块区域的格网数据分别通过插值生成,因此该重叠区域必然不会吻合,经过渲染后会在两块地形的重叠区域产生交错、闪烁和层叠,因此必须对该区域进行边缘融合处理。在该格网数据中,由于其边长必须是2n+1,而经过插值生成的格网数据不一定满足要求,故需要填充一些无效数据。在插值生成的格网数据中边界数据相对不够准确,因此在重叠区域中,格网数据p1中bcd区域的数据更加准确,而格网数据p2中abc区域的数据更加准确。为了能够充分利用p2中abc区域的数据和p1中bcd区域的数据,同时又能使处理后的重叠区域数据融入 p1,p2中,在 ab、ac、cd、bd 边界上看不出凸起,笔者采用斜向变步长线性融合算法对p1与p2的重叠区域进行线性融合。
图3 地形边缘融合示意图
图4 斜向变步长线性融合示意图
将图3中abcd区域放大如图4所示,假设格网数据p2在该区域的高程值为p2(),格网数据p1在该区域的高程值为p1()。在该区域中定义一组斜率为-1的直线ij,该直线与矩形区域abcd中的任意两条边相交于i、j两点,如图4中虚线所示。对于其中任意一条直线ij上面的任意一点k,k到i的步长为|yi–yk|,k到 j的步长为|yj– yk|,总步长为|yj–yi|。当k点离 ac或ab边比较近时则k点在格网数据p2中占的权重大,在格网数据p1中占的权重小,采用k点到i,j的距离与ij总距离的比值定义k点在p1和p2中的权重。则k点在p1中的权重为:
k点在p2中的权重为:
根据以上权重定义该区域中任意点k的高程值为:
根据以上分析构建多块地形间的边缘融合算法,伪代码描述如下:
For重叠区域中每一条斜率为-1的直线ij;
For直线 ij上每一点 k(xk,yk);
计算k点在p1中的权重w1=
计算k点在p2中的权重w2=
由于在地形进行渲染时多块地形是分别进行的,因此在任意两块地形之间会存在纹理拼接问题,需要对重叠区域的纹理坐标进行偏移来达到边缘纹理拼接的目的。笔者采用平铺的方式进行地形纹理处理。对于每块地形的局部坐标取左上角为(0,0,z),右下角为(xmax,ymax,z),因此假设每块地形任意点的局部坐标为(x,y,z),纹理贴图大小为n×n,纹理平铺调节因子为k。
采用纹理平铺方式,格网地形p2上任意一点(x,y)对应的纹理坐标为:
假设格网地形p2与p1重叠区域中左上角点a在p2中的局部坐标为(xa,ya),则格网地形p1上任意一点(x,y)对应的纹理坐标为:
其中,k为纹理调节因子,当k增大时纹理平铺次数增加;当k减小时纹理平铺次数减小。采用CG着色语言在片段着色阶段根据以上公式重新计算各点对应的纹理坐标,并根据提供的纹理获取各点对应的纹理值,从而达到地形边缘纹理上的拼接。
在地形渲染上,笔者从两个方面来控制地形的绘制。在微观上,采用OGRE引擎内置的基于连续LOD的GeoMipMapping算法来绘制小块地形;在宏观上,采用动态调度策略来实现对地形块的动态加载与卸载。
从高速公路视景仿真的角度来看,第一人称视角是沿着道路漫游,那么视点只能沿着道路前进或后退。在对地形进行分块时是依道路线形进行的,在任意时刻视点只可能在一块地形上。按照地形分块的连续性特性可知,视点下一时刻所处的位置只可能是在当前地形的上一块、下一块或当前块。当视点处于前进过程中位于当前块的边缘时,如果下一块没有加载,则会出现当前视点前没有任何场景,从而影响仿真效果,因而必须采用预取策略提前加载下一块地形使得场景仿真具有连贯性。同时为了减少内存中资源的驻留量,对于不需要的地形块需要卸载。因此,为了使在原剪裁面范围内始终有地形存在,笔者采用动态调度策略保证在任意时刻有3块地形在内存中,即当前块、上一块和下一块,释放掉其他的无用地形块,动态调度算法伪代码描述如下:
For每一帧;
计算当前视点位置;
如果视点位于当前块覆盖区域则返回;
如果视点位于当前块的下一块,上一块地形存在则释放,更新下一块为当前块,下一块地形存在则加载并返回;
如果视点位于当前块的上一块,下一块地形存在则释放,更新上一块为当前块,上一块地形存在则加载并返回;
End for
实验数据为六武高速地形数据,其中六武高速全长90 km,对原始的六武高速地形CAD数据进行划分,每块地形覆盖约为9 km的道路,将整个六武高速地形划分为10块。然后对每块数据进行处理生成规则格网数据,将生成的规则格网数据进行边缘融合处理,最后将规则格网数据压缩成高位图数据,生成的地形高位图如图5(a)所示。
在Windows平台下,笔者基于OGRE引擎提供的基于连续LOD的GeoMipMapping算法对小块地形进行渲染,同时在宏观上对多块地形采用动态调度策略来实现高速公路大规模地形的实时渲染,其中渲染效果图如图5(b)、(c)、(d)所示。两块地形采用了两种不同的纹理贴图,其中图5(b)为没有进行边缘融合的效果图,可以看到明显的交错、闪烁和层叠效应;图5(c)为模型经过边缘融合的效果图,完全消除了图5(b)中的交错效应。应用边缘纹理拼接技术后两块地形采用相同的纹理渲染后生成的效果图如图5(d)所示,在图5(c)进行模型边缘融合的基础上消除了纹理边缘拼接问题。
图5 地形高位图及渲染效果图
在硬件环境为酷睿双核2.2 GHz,2 G内存,G105M显卡的笔记本上进行测试,一般情况下图形绘制平均帧率为35帧,块与块之间进行动态调度的平均帧率为20帧。由实验结果可以看出,地形场景绘制能基本满足高速公路视景仿真的要求,虽在地形块动态加载卸载的瞬间会有短暂的帧率下降,但也能满足高速公路视景实时漫游的要求。由此可见,采用笔者的地形生成与调度算法,能够高效、快速地生成高速公路周边的大规模地形,有效地解决大规模地形的绘制问题。
笔者针对高速公路视景仿真过程中的大规模地形绘制问题,提出了一种按道路线形对地形进行分块的整体划分方案,同时根据相邻两块地形间的重叠数据提出了一种斜向变步长线性融合算法,较好地解决了相邻地形块间的边缘衔接问题。并结合现有的地形块绘制技术,从宏观上对地形块采用动态调度策略来实现大规模地形的实时渲染。理论上,笔者提出的方法可以实现无限长高速公路周边地形的生成与绘制,并能够在普通PC机上达到较好的效果,完全能够满足高速公路视景仿真过程中对地形渲染的要求。
[1]黄江波,李杰.高速公路视景仿真系统的应用研究[J].公路,2006(4):202-206.
[2]袁望方.山区高速公路人-车-路-环境-运行虚拟仿真系统关键技术研究[D].西安:长安大学图书馆,2009.
[3]黄江波,李杰,刘尧.视景仿真系统在孝襄高速公路中的应用[J].武汉工业学院学报,2006,15(1):68-71.
[4]DUCHAINEAUY M,WOLINSKY M.Roaming terrain:real-time optimally adapting meshes[C]//Visualization'97 Proceedings.CA:IEEE Computer Society Press Los Alamitos,1997:81-88.
[5]LINDSTROM P,KOILER D.Real-time continuous level of detail rendering of height fields[C]//Proceedings of the 23rd Annual Conference on Computer Graphics and Interactive Techniques.New York:ACM,1996:109-l18.
[6]ROTTGER S,HEIDRICH W,SLUSALLEK P,et al.Real-time generation of continuous levels of detail for height fields[C]//Proceedings of the 6th International Conference in Central Europe on Computer Graphics and Visualization.[S.l.]:[s.n.],1998:315-322.
[7]HUANG S J,TSENG D C.Construction of multi-resolution terrain models using hierarchical delaunay triangulated irregular networks[C]//1997 IEEE International Geoscience and Remote Sensing-A Scientific Vision for Sustainable Development.[S.l.]:[s.n.],1997(4):1999-2001.
[8]宁慧,原庆凯.一种基于规则网格的地形简化算法[J].应用科技,2009,34(4):36-39.
[9]SUKIMIN Z,HARON H.Geometric entities information for feature extraction of solid model based on DXF file[J].International Symposium on Information Technology,2008(8):1-5.
[10]梁海涛,马军林,童创明,等.基于DXF模型的数据读取与分析方法[J].空军工程大学学报:自然科学版,2007,8(2):46-48.