MultiGen建模技术在视景仿真中的研究与应用
2008-06-24
作者:董战鲲,曹 青
摘 要:根据视景仿真" title="视景仿真">视景仿真对建模的要求和特点,论述了如何利用专业实时三维建模软件MultiGen Creator构建大规模地形和对象模型,以及使用MultiGen Creator提供的OpenFlight API进行辅助建模的方法。
关键词:建模 视景仿真 MultiGen Creator软件 三维地形 OpenFlight API接口
近年来,随着计算机图形学、计算机网络技术、仿真技术以及相关硬件技术的迅速发展,视景仿真及建模技术已经在军事模拟训练、工程建筑、影视娱乐、医疗和教育培训等诸多领域得到了广泛应用。虚拟环境中仿真对象及其场景建模是整个视景仿真系统建立的基础。参与仿真系统的模型不仅需要能够逼真地再现真实场景和对象,而且必须满足实时渲染与交互性的要求,这样才能使参与者在虚拟现实系统中产生沉浸感。因此,针对虚拟环境建模技术的研究对于视景仿真系统的实现具有重要意义。
在虚拟现实环境中,常用的建模技术主要包括几何建模" title="几何建模">几何建模、物理建模、行为建模、模型分割以及音频建模等。其中,几何建模是虚拟环境建模的基础,行为建模、物理建模等则体现了虚拟环境中模型的特征。几何建模处理物体的几何和形状的表示,研究图形数据结构与算法等问题。行为建模、物理建模主要处理物体的运动和行为等内在属性的描述。只有将现实环境中对象的几何外形和行为规则与其物理属性有机结合,才能构造出符合仿真应用要求的三维对象模型。同时,所构建的模型还需满足虚拟建模技术的常用指标———交互显示能力、交互式操纵能力、易于构造能力的要求。
本文根据视景仿真对建模的要求和特点,论述了如何利用专业实时三维建模软件MultiGen Creator构建大规模地形和对象模型,以及使用MultiGen Creator提供的OpenFlight API进行辅助建模的方法。
1 MultiGen Creator简介
MultiGen Creator是美国MULTIGEN-PARADIGM公司推出的专业实时仿真三维建模软件,它较好地解决了实时运行中真实感与实时渲染的关系,是惟一将多边形建模、矢量建模和地形生成集成在一个软件包中的手动建模工具。由于其具备强大便捷的矢量编辑、交互式建模与装配以及地形地貌生成功能,所以已成为视景仿真领域应用最广的建模工具。
MultiGen Creator软件主要由基本建模环境模块、地形建模" title="地形建模">地形建模模块和特殊用途模块组成。其中基本建模环境模块给建模人员提供一个交互的、可视化建模环境,用户可以便捷地进行仿真对象建模。地形建模模块提供了强大的批处理三维地形、地貌生成工具。特殊用途模块主要包括公路、仪表构建模块等。
2 基于MultiGen Creator的三维地形建模
三维地形建模是指将一定范围内适当比例尺的真实地形高程数据、地貌特征数据,根据不同的地形转换算法" title="转换算法">转换算法,结合包含真实地形表面细节的纹理,生成具有一定组织序列、能够近似表示部分地球表面状况的多边形集合。地形建模的整体流程如图1所示。
2.1 三维地形建模过程
2.1.1 规划地形数据库
根据仿真目的和对场景的要求,结合现有实时系统" title="实时系统">实时系统的硬件和软件平台性能,在满足实时性要求的前提下,对应用于仿真系统的整个模型数据库的多边形预估。最简单的多边形估算方法是:实时系统硬件每秒钟处理多边形数量除以帧频。对于所创建的地形模型而言,通用的规则是将多边形预算的1/3用于地形模型,1/3用于地物模型(如房屋、树木等),其余1/3用于场景中的运动物体模型。
2.1.2 地形数据的预处理
目前常用的地形高程数据有美国地质测量局(USGS)的DEM数据、美国图像地图局(NIMA)的DTED数据和一些其他来源的数据。这些格式的地形数据不能直接在MultiGen Creator软件中使用,必须进行处理,转换成Creator的DED专用数据格式。为此MultiGen Creator提供了相应的转换工具,如readusgs、image2ded、float2ded、image2ded以及catdma等。
2.1.3 创建地形参数设置
(1)导入DED格式地形高程数据,在相应的高程比例尺上设置颜色、纹理和材质。这些属性将应用于生成的地形模型。
(2)选择要创建地形的目标区域,建模人员可以通过鼠标或指定经纬度的方式进行确认。同时,根据仿真的应用类型,确定生成地形的LOD细节层次数目。
(3)设置地图投影类型。MultiGen Creator提供了五种地图投影类型:Flat Earth、UTM、Geocentric、Lambert Conic Conformal以及Trapezoidal。用户可以根据仿真要求和即将创建地形的真实地球区域,选择最适合的投影方式以减少投影误差。
2.1.4 地形转换算法选择
对地形模型有不同需要的仿真类型,选择不同的转换算法和参数,生成地形的多边形数量和场景外观也会有很大差异,进而最终影响仿真系统的性能和显示效果。因此必须根据具体情况选择最适合的地形转换算法。MultiGen Creator提供了Polymesh、Delaunay、TCT以及CAT四种三角形化算法将高程数据转换为地形模型。
(1)Polymesh算法
Polymesh转换算法根据设定的高程信息采样率在原始DED文件中进行有规律采样,以获得地形多边形顶点坐标,进而创建矩形网格面的地形模型。一个地形模型的组节点是由X方向乘以Y方向的2×2个地形组节点构成,每四个低级的LOD地形组节点构成更高级的地形组节点,不同的LOD模型组节点包含的地形节点数量保持不变。生成地形的顶点高度根据Z Scale参数对原始的采样高程数据缩放得到。Polymesh算法提供了四种地形三角形化的方法。Best Fit根据三个相邻顶点高程相同则生成一个三角形的规则创建地形,生成的地形模型用于地形与海岸线连接的平坦区域。BottomRight/UpperLeft根据SGI Performer中三角形化规则生成地形三角形模型。BottomLeft/UpperRight则按照普通图形硬件的三角形化规则生成地形三角形模型。QuadsinFlatArea通过四个高程相同顶点形成一个四边形来代替两个三角形的规则创建地形。用户可以根据High LOD Polygon Count参数提示,调整高程采样率,以控制最高级LOD模型多边形数量,从而满足实时系统多边形预算的要求。
(2)Delaunay算法
Delaunay转换算法是基于Delaunay三角网的地形生成算法。与Polymesh算法不同,它对原始数据中的每个高程点都进行处理,从最低分辨率的LOD开始生成地形。较低LOD地形模型的顶点被结合到更高级的LOD中,以保持每一个LOD的顶点与更高级分辨率LOD的顶点相符,使不同LOD地形模型之间平滑过渡。通常情况下,生成同样精度的地形模型,Delaunay算法比Polymesh算法使用多边形的数量少。
如果需要对山脊和山谷检测,则构成山脊和山谷的高程点将被加入到三角化处理中。如要保护海岸线,Creator将生成的地形多边形与海岸线进行相交测试,并将沿海的高程点加入三角化计算中。这一过程重复执行,直到数据中未使用的高程点与相邻高程点的平均高程的差值小于Terrain Accuracy Tolerance的公差,或者地形多边形数量达到最大面与组的限制。
(3)CAT算法
CAT转换算法对Delaunay算法进行了改进。它改变了地形的分块模式,采用相邻LOD间的三维变形(Morphing)技术来平滑过渡层次间的切换,可消除瓷片边界现象。但是只有SGI Performer2.0以上版本才支持此算法。与其他算法不同,CAT算法创建的LOD模型不使用分块地形,LOD间的切换是在面到面级别的替换,它随着视点在地形数据库上的靠近,动态使用较高级LOD的多边形代替低级的LOD中相应的多边形,从而保证地形LOD转换的平滑过渡效果,而不会出现“突跃”现象。
(4)TCT算法
TCT转换算法实际是一种限制性的Delaunay算法。使用TCT算法创建的地形模型只有一个LOD,因此只能用于批处理地形转换。与其他算法不同,它可以将地貌矢量特征数据DFD与地形高程数据一起处理,生成包含地貌特征(如道路、河流以及湖泊等)的完整地形模型。地貌特征不是简单地投影到地形表面,而是成为地表上的一部分。用户可以选择随地形一起生成的地貌特征种类。与其他算法相比,TCT算法所生成地形模型的多边形数量将显著增加。
2.1.5 地形模型的生成与测试发布
设置完成创建地形所需的参数和规则后,生成地形模型的工作就由MultiGen Creator自动完成了。生成地形数据库后,应首先在MultiGen Creator中浏览,仔细检查可能出现的如细长三角形(Edge Slivers)、切换LOD时出现的垂直边界(Wall/Gaps)等异常现象。对于检查通过的地形模型还应在实时系统中加载测试,查看系统运行时帧频是否满足要求、切换LOD时是否平滑过渡以及地形纹理和地貌特征数据是否符合要求等。如果出现问题,应该调整参数,重新生成地形数据库,直至满足系统运行要求。
对于没有大瑕疵的地形模型,最后仍需对部分地形纹理以及地貌模型进行修正调整,经过反复测试,才能投入使用。图2为一块映射地形纹理和地貌数据(公路)的地形模型。
2.2 地形纹理的应用
地形纹理贴图是增强三维地形模型真实感的一个重要途径。对于细节层次较低的模型,甚至可以直接使用纹理代替地形多边形,从而提高地形模型的多边形使用效率。
满足MultiGen Creator要求的地形纹理可由卫星、航拍及其他来源的影像资料经过优化处理得到。建模人员可以在地形高程比例尺指定不同高程颜色的同时,进行相应的纹理设置,包含真实地理坐标信息的地形纹理可以采用同样方式进行映射。另一种方式是使用间接纹理映射,即将地形多边形的颜色、纹理以及材质等属性对应到一个特殊图像文件上,再将图像文件映射到地形模型。图像像素颜色与地形多边形属性之间的对应关系保存在后缀为.indrect的文件中。在地形转换过程中,当地形多边形的顶点与相应的间接纹理控制文件信息匹配时,对应的多边形属性会被自动应用到相应的地形多边形上。
同时,MultiGen Creator提供了多分辨率纹理(mipmap)和索引分块(clip texture)技术,用来解决因大量应用纹理而消耗内存、影响系统性能的问题。多分辨率纹理是指将对应相同地区的地形纹理分成一组不同分辨率的纹理组。在实时运行中,随着视点变化,选用相应分辨率的纹理,减少内存使用。纹理分块技术指将较大的地形纹理进行分块索引,在应用中根据需要将分块纹理根据一定算法调入调出内存,从而实现通过纹理的分块调度来提高系统的运行效率。
2.3 地貌特征的应用
地貌特征主要指存在于真实地形之上的河流、湖泊、森林等自然景观以及公路、桥梁、建筑等人文景观。在地形数据库中添加这些地貌特征,对于增强地形模型的真实性具有重要意义。
目前常见的原始地貌特征数据格式有DFAD、DLG和其他矢量数据。用户可以使用MultiGen Creator提供的工具,根据需要方便地将所需特征转换为MultiGen的DFD格式,在地形建模过程中使用。DFD数据格式使用特征类型码(FID)对地形特征进行分类,每个特征类型码对应一组定义特征表面材质属性的代码(SMC)。两者结合决定特征数据映射到地形模型上时的纹理、材质以及颜色等属性。
将地貌特征数据映射到地形模型上的方法主要分为预先映射和事后映射。预先映射主要指在地形模型生成之前设置需要映射的地貌特征。地形的多边形将围绕地貌特征生成,例如将河流选择为预先映射方式处理,则河流会成为地形多边形的组成部分。这对于地面仿真应用具有更加真实的视觉效果,但是会大量增加地形多边形的数量。事后映射方式指在地形模型生成之后,再投影所需地貌数据。
3 基于MultiGen Creator的三维对象建模
在计算机辅助设计(CAD)、三维动画和其他领域,通常使用大量的曲线曲面以及复杂的纹理构建三维模型。但从视景仿真领域的观点看来,这种基于工程设计或动画的建模思路,由于没有考虑渲染效率,根本不能满足实时系统的要求。使用3DMAX、MAYA等建模工具创建的三维模型,必须进行精简优化,才能在实时系统中使用。虽然建模人员可以使用MultiGen Creator提供的Vsimplify工具对引入模型简化,但仍然需要大量繁琐的手工工作,例如构建适当的LOD、面缺失等问题。因此,多数情况下更多使用MultiGen Creator重新建模。
与MultiGen Creator所提供的三维地形建模中强大的批处理功能相比,在三维实体建模方面MultiGen Creator略显简单,看起来不如3DMAX等建模软件便捷。但建模目的不同,建模思路也不尽相同。MultiGen Creator主要针对实时系统设计,通过高效的层次数据结构、LOD技术以及纹理技术等方面的设计优化,在协调处理模型真实感与实时渲染之间具有其他建模软件无法比拟的优势。
使用MultiGen Creator进行对象建模,应在首先满足实时渲染的基础上,尽可能地提高模型的逼真度。建模人员综合运用好MultiGen Creator提供的建模功能,同样可以构建具有高度真实感的实体模型。
(1)逻辑化层次结构。MultiGen Creator采用的openflight格式是一种高效的逻辑化层次数据结构。因此,建模人员必须针对对象模型的特点,采用模块化设计方法,合理细分层次节点。这种做法不仅有助于模型的编辑、LOD设置、外部引用以及数据库的重组和优化,同时也为提高实时系统效率构建了良好的基础。
(2)LOD技术。LOD是一组代表同一物体不同分辨率的模型组。实时系统在处理模型时,会根据设定的LOD距离切换不同细节层次的模型,从而有效地提高系统多边形利用效率。因此,在建模过程中合理地设置LOD层次显得尤为重要。通常的做法是首先构建细节层次最高的模型,然后通过自动(Vsimplify工具)和手工(如构建包围盒)结合的方式,自高而低地构造不同细节层次模型。
(3)纹理映射技术。使用纹理贴图代替物体建模过程中可模拟或难以模拟的细节,可以有效地提高模型的逼真度和渲染速度。例如使用透明纹理模拟门窗和栏杆,可以有效地降低模型的复杂度。而利用各向同性构建树木、标牌等的BillBoard技术,创建的模型仅是单个平面。纹理图片的来源大多是拍摄实物对象的三维正投影照片,经修正处理得到。需要注意的是,纹理大小应是2的幂次,否则在Vega驱动时无法正常显示。
在MultiGen Creator环境下也可以进行构建和连接物体的运动建模。Creator提供了DOF技术,DOF节点可以控制其子节点按照设置的自由度范围进行移动和转动,使物体表现出合乎逻辑的运动方式。声音节点也可以在物体建模的过程中加入,从而丰富视听内容,增强视景仿真的综合效果。
4 OpenFlight API辅助建模
OpenFlightAPI是MultiGen Creator提供的用于操作Creator和OpenFlight(flt)格式文件的编程接口,它由一系列C语言的头文件和相应函数库组成。OpenFlight API提供读、写和建立flt格式文件的功能,用户也可以利用它自定义数据格式及创建插件。在辅助建模方面,使用OpenFlight API可以帮助建模人员以编程的形式方便、准确地完成手工难以完成的建模任务,例如规定弧度的弯曲物体等一些真实尺寸要求较高情况。使用编程方式读取数据创建控制线、放样面,再结合手工处理,可以极大地加速建模过程。甚至对于地形模型,也可以使用OpenFlight API进行编程处理。
下面是利用OpenFlight API创建flt文件的部分伪代码。利用从CAD中导出的数据,在flt文件中创建放样面,再结合手工处理放样(Loft),生成精确的机翼模型。图3为部分放样和完全放样的模型图。
#include ″mgapiall.h″//必须包括此头文件
mgrec *dbroot,*AerofoilNode,*AFPart1,*pNode,*vNode;
mgInit(&argc,argv);//初始化OpenFlight API runtime
if(!(dbroot=mgNewDb(″XXX.flt″))) {//创建数据库
mgExit();
}
//创建一组具有层次关系的数据库节点
AerofoilNode=mgNewRec(fltGroup);
mgAttach(dbroot,AerofoilNode);
AFPart1=mgNewRec(fltGroup);
mgAttach(AerofoilNode,AFPart1);
for(index1<NUMPOLY创建多边形数量)
{ //创建多边形节点
polynode=mgNewRec(fltPolygon);
mgAppend(dbroot,polynode);
for(index2<NUMVEX该多边形顶点数量)
{//创建Vertex节点
vNode=mgNewRec(fltVertex);
mgAppend(prec,vNode);
mgSetCoord3d(vrec,fltCoord3d,x,y,z);
}
……
mgWriteDb(dbroot);//关闭数据库
mgCloseDb(dbroot);
mgExit();
……
视景仿真已经成为现代仿真技术的一个新的研究领域,在军事模拟训练、影视娱乐等诸多领域得到了广泛应用。虚拟环境中仿真对象及其场景建模是整个视景仿真系统建立的基础。如何有效地协调实时运行中真实感与实时渲染的关系,是虚拟环境建模的重点。本文就如何使用MultiGen Creator创建高效的三维地形、对象模型进行了讨论,同时介绍了利用MultiGen的Openflight API进行编程辅助建模的方法。希望能对业界的同行提供一定的借鉴。
参考文献
1 王 乘,周均清,李立军.Creator可视化仿真建模技术[M].武汉:华中科技大学出版社,2005
2 甚 蔚,夏立文.虚拟现实技术[M].北京:北京希望电子出版社,2002
3 MultiGenUser′s Guide[M].Multigen-Paradigm Inc,U.S.A,2002
4 万 刚.虚拟地景仿真中地物的几何建模技术[J].系统仿真学报,2001;13(增刊)
5 李 颖,薛海斌,朱伯立等.OpenGL技术应用实例精粹[M].北京:国防工业出版社,2001,45~70
6 曾芬芳.虚拟现实技术[M].上海:上海交通大学出版社,1997