飞行仿真系统中三维地形的仿真实现
2021-02-12张绍泽
张绍泽,任 磊
飞行仿真系统中三维地形的仿真实现
张绍泽,任 磊
(中国电子科技集团公司第二十研究所,西安 710068)
三维地形是飞行仿真系统中的重要组成部分,机场跑道作为飞机起飞降落过程中不可或缺的部分,其真实感直接影响着飞行仿真系统中地形的真实感。为了创建包含高真实感机场跑道的三维地形,在Unity下利用FlightGear中的地形数据、机场纹理数据及Google Maps纹理数据,通过动态创建地形网格和材质的方法,结合多线程技术,实现了三维地形的并行创建。实验结果表明,提出的方法可以快速创建包含高真实感机场跑道的三维地形,可用于飞行仿真系统中三维地形的仿真实现。
FlightGear;GoogleMaps;三维地形;机场跑道;Unity
0 引言
飞行仿真系统是现代航空科研、教学、试验等不可缺少的工具,在飞行性能研究、飞行品质评估和飞行训练等方面具有重要的经济价值和军事意义[1]。三维地形作为飞行仿真系统的重要组成部分,其几何形状及纹理的精细程度直接影响着飞行仿真系统的真实感。而飞机的起飞和降落是飞行仿真过程中不可或缺的部分,这些过程主要都是在机场跑道完成的,因此飞行仿真系统的三维地形除了要保证一般地物的高真实感,还需要确保机场跑道的高真实感。
OSGEarth[2]是基于三维引擎(OpenSceneGraph,OSG)[3]开发的三维数字地球引擎,可实现三维地形的仿真。王雷[4]等基于OSGEarth实现了大型三维空战场景的搭建,虽然其搭建的场景包含了大规模的三维地形,但地形中机场跑道和其它地物的精度及真实感不高。FlightGear[5]作为一款开源、跨平台的飞行模拟程序,提供了三维地形的仿真实现,已有多位学者利用其进行飞行仿真系统的开发[6-8]。虽然FlightGear的地形系统包含高精度、高真实感的机场跑道,但是对于地形中的其它地物,其纹理主要是通过图片的重复铺贴来实现,有明显的人工痕迹,导致真实感较低。
为解决以上问题,本文将FlightGear中的地形数据、机场纹理数据和Google Maps的纹理数据相结合,通过动态创建地形网格和材质的方法,利用多线程技术,实现了包含高真实感机场跑道的三维地形的并行创建。
1 BTG文件介绍
FlightGear中的地形数据存储在按经纬度划分的文件夹内,每个文件夹内包含了构成该经纬度范围内地形所需的数据,这些数据使用Binary Terrain Format编码形式以BTG文件格式存储。每个BTG文件对应一个地形块,包含了组成该地形的包围球、顶点列表、法线列表、纹理坐标列表、颜色列表、三角形和材质等信息。其中,顶点的坐标为基于WGS84椭球体的笛卡尔地心坐标,包含经度、纬度和高度;三角形信息包含了构成三角形的顶点索引;材质信息包含了材质名称、使用该材质的三角形起始索引及三角形数量[9]。
2 地形创建
在Unity中,地形主要由地形网格和对应的材质组成。将创建的材质赋给对应的地形网格,经过Unity渲染显示即可实现三维地形的可视化。
为创建具有高真实感机场跑道的三维地形,本文使用FlightGear的地形数据创建高精度的地形网格,使用FlightGear的机场跑道纹理和Google Maps的纹理数据分别创建高真实感的机场跑道材质和其它地物材质。由于FlightGear地形数据中存储的材质相关信息与FlightGear使用的材质相对应,因此对于FlightGear地形数据中除了机场跑道的其它地物材质所对应三角形,其顶点纹理坐标需要重新计算,使其适合由Google Maps纹理创建的材质。
2.1 地形网格创建
Unity中可以使用点的三维坐标、法线坐标、纹理坐标以及构成三角形的顶点索引动态创建网格。BTG文件中除了包含Unity创建网格所需的信息外,还包含材质信息。因此可以充分利用BTG文件包含的信息进行地形网格的创建。具体步骤如下:
(1)根据需求确定需要创建地形的经纬度范围及Google Maps纹理的缩放等级;
(2)加载并解码对应的BTG文件,得到点的三维坐标、法线坐标、纹理坐标、构成三角形的顶点索引以及材质信息;
(3)以BTG文件对应的经纬度创建空物体作为父节点,以BTG文件名创建空物体作为子节点;
(4)根据材质信息,以每种材质名创建空物体作为BTG物体的子节点,如果材质是机场跑道,则执行步骤(5),如果材质是其它地物类型,则执行步骤(6);
(5)根据材质对应顶点的三维坐标、法线坐标、纹理坐标及构成三角形的顶点索引创建网格,然后执行步骤(10);
(6)根据式(1)和式(2)计算材质对应三角形所包含顶点的Google Maps坐标;
(7)对该BTG文件中所有顶点进行遍历,确定所有顶点的经纬度范围,并如式(1)~式(4)所示,确定该BTG文件对应的Google Maps瓦片坐标范围;
该经纬度对应的瓦片坐标为[10]:
(8)根据步骤(7)得到的结果对步骤(6)得到的坐标进行归一化处理,并将其作为顶点的纹理坐标;
(9)根据材质对应顶点的三维坐标、法线坐标、构成三角形的顶点索引及步骤(8)计算得到的纹理坐标创建网格;
(10)为材质物体添加MeshFliter组件,并将创建的网格作为组件的Mesh,完成地形网格创建。
2.2 材质创建
FlightGear地形使用的材质包括机场跑道材质及其它地物材质,材质信息存储在Materials文件夹内的xml文件中,文件包含了材质名称及使用的纹理图片。
对于机场跑道,每个跑道使用的纹理图片是固定的,因此本文根据xml文件中的材质信息,预先在Unity中创建了相应的材质。使用机场跑道材质时直接从预先创建的材质中查找该机场跑道对应的材质。
对其它地物,其对应材质需根据Google Maps纹理动态创建。创建材质时,先根据创建地形网格步骤(7)得到的Google Maps瓦片坐标范围加载对应图片,然后将图片按瓦片坐标排列并拼接,最后使用拼接后的图片创建对应的材质。
2.3 并行加速
在进行飞行仿真时,通常需要加载大范围的三维地形,如果使用单线程创建地形,则需要耗费大量的时间,为了缩短创建地形所需的时间,本文使用Unity的多线程插件Loom对地形创建过程加速。
3 实验及结果
为了验证本文提出方法的有效性,本文进行了仿真实验。以下实验均在Windows7 64位环境下运行,使用的Unity版本为5.6.0f3,电脑配置为:Intel Core i7-4790 3.6 GHz 4核8线程CPU,16 GB内存,NVIDIA GeForce GTX 1070显卡。
首先,本文将FlightGear默认材质创建的地形和本文提出方法创建的地形进行了对比。实验结果如图1所示。由图1可知,FlightGear默认材质创建的地形纹理样式少,而且对于同种材质使用相同的纹理重复铺贴,人工痕迹明显,真实感较低。本文提出的方法将材质替换为Google地图纹理创建的材质后,不同地物类型容易辨别,而且纹理细节丰富,颜色过渡平滑,真实感更强。
图1 FlightGear默认材质创建地形与本文提出方法创建地形对比
其次,对本文提出方法创建的机场跑道进行了渲染显示,并给出了其在本单位开发的飞行仿真系统中的效果,实验结果如图2所示。由图2可知,本文提出方法创建的机场跑道笔直、平坦,纹理分辨率高,跑道上的划线清晰,真实感较高。
图2 本文提出方法创建的机场跑道及其在飞行仿真系统中的效果
接下来,给出了本文提出方法创建的地形在本单位开发的飞行仿真系统中的实验结果,如图3所示。由图3可知,本文提出方法创建的地形细节丰富,纹理清晰,提升了飞行仿真系统的真实感。
图3 本文提出方法创建的地形在飞行仿真系统中的应用
最后,本文对使用单线程方法和多线程方法创建地形所用的时间进行了实验。实验分为多组,每组地形相同,使用两种方法分别进行多次实验,并将所用的平均时间进行了对比,实验结果如表1所示。由表1可知,使用多线程方法与使用单线程方法相比速度最多提升了27.4倍,最少提升了6.3倍。即使是速度提升最少的情况,创建地形时间也由3分多钟降低到半分钟左右,速度提升明显。实验结果表明,使用多线程方法可以有效降低创建地形所用的时间。
表1 单线程与多线程创建地形时间对比
由以上实验可见,本文提出的方法可以利用并行技术快速地创建包含高真实感机场跑道的三维地形。
4 结论
本文基于FlightGear中的地形数据、机场纹理数据和Google Maps纹理数据,利用多线程技术,在Unity下实现了三维地形的并行创建。实验结果表明提出的方法可快速创建包含高真实感机场跑道的三维地形,可用于飞行仿真系统中的地形仿真。
[1] 童中翔,王晓东. 飞行仿真技术的发展与展望[J]. 飞行力学,2002(3):5-8.
[2] OSGEarth – 3D Mapping Engine & Geospatial SDK for OpenSceneGraph. http://osgearth.org/.
[3] OpenSceneGraph. http://www.openscenegraph.org/.
[4] 王雷,丁华. 基于OSGEarth的大型三维空战场景的搭建[J]. 软件,2016,37(1):114-116+ 131.
[5] FlightGear Flight Simulator – sophisticated, professional, open-source. https://www.flightgear.org.
[6] 黄花,徐幼平,邓志武. 基于FlightGear模拟器的实时可视化飞行仿真系统[J]. 系统仿真学报,2007(19):4421-4423.
[7] 蔚海军. 基于FlightGear的直升机飞行模拟系统研究[D]. 大连:大连理工大学,2008.
[8] 刘鹏. 基于FlightGear 的无人直升机飞行仿真技术研究[D]. 南京:南京航空航天大学,2011.
[9] BTG_file_format.https://wiki.flightgear.org/BTG_file_format.
[10] 张绍泽,任磊. Google Maps在Unity中的可视化及交互方法[J]. 现代导航,2019,10(1):34-38.
Realization of 3D Terrain Simulation in Flight Simulation System
ZHANG Shaoze, REN Lei
3D terrain is an important part of flight simulation system. Airport runway is an indispensable part of the flight landing process, and its authenticity directly affects the authenticity of flight simulation system. In order to create 3D terrain with high realistic airport runway, the terrain data in FlightGear, airport texture data and Google Maps texture data are used under Unity. Through the method of dynamic creating terrain grid and material, combined with multithreading technology, the parallel creation of 3D terrain is realized. The experimental results show that the proposed method can quickly create 3D terrain including high realistic airport runway, and can be used to simulate 3D terrain in flight simulation system.
FlightGear; Google Maps; 3D Terrain; Airport Runway; Unity
TP391
A
1674-7976-(2021)-06-434-04
2021-04-26。
张绍泽(1985.06—),黑龙江富锦人,博士,工程师,主要研究方向为三维场景仿真、VR仿真。