張紹澤,任 磊
飛行仿真系統(tǒng)中三維地形的仿真實(shí)現(xiàn)
張紹澤,任 磊
(中國(guó)電子科技集團(tuán)公司第二十研究所,西安 710068)
三維地形是飛行仿真系統(tǒng)中的重要組成部分,機(jī)場(chǎng)跑道作為飛機(jī)起飛降落過程中不可或缺的部分,其真實(shí)感直接影響著飛行仿真系統(tǒng)中地形的真實(shí)感。為了創(chuàng)建包含高真實(shí)感機(jī)場(chǎng)跑道的三維地形,在Unity下利用FlightGear中的地形數(shù)據(jù)、機(jī)場(chǎng)紋理數(shù)據(jù)及Google Maps紋理數(shù)據(jù),通過動(dòng)態(tài)創(chuàng)建地形網(wǎng)格和材質(zhì)的方法,結(jié)合多線程技術(shù),實(shí)現(xiàn)了三維地形的并行創(chuàng)建。實(shí)驗(yàn)結(jié)果表明,提出的方法可以快速創(chuàng)建包含高真實(shí)感機(jī)場(chǎng)跑道的三維地形,可用于飛行仿真系統(tǒng)中三維地形的仿真實(shí)現(xiàn)。
FlightGear;GoogleMaps;三維地形;機(jī)場(chǎng)跑道;Unity
飛行仿真系統(tǒng)是現(xiàn)代航空科研、教學(xué)、試驗(yàn)等不可缺少的工具,在飛行性能研究、飛行品質(zhì)評(píng)估和飛行訓(xùn)練等方面具有重要的經(jīng)濟(jì)價(jià)值和軍事意義[1]。三維地形作為飛行仿真系統(tǒng)的重要組成部分,其幾何形狀及紋理的精細(xì)程度直接影響著飛行仿真系統(tǒng)的真實(shí)感。而飛機(jī)的起飛和降落是飛行仿真過程中不可或缺的部分,這些過程主要都是在機(jī)場(chǎng)跑道完成的,因此飛行仿真系統(tǒng)的三維地形除了要保證一般地物的高真實(shí)感,還需要確保機(jī)場(chǎng)跑道的高真實(shí)感。
OSGEarth[2]是基于三維引擎(OpenSceneGraph,OSG)[3]開發(fā)的三維數(shù)字地球引擎,可實(shí)現(xiàn)三維地形的仿真。王雷[4]等基于OSGEarth實(shí)現(xiàn)了大型三維空戰(zhàn)場(chǎng)景的搭建,雖然其搭建的場(chǎng)景包含了大規(guī)模的三維地形,但地形中機(jī)場(chǎng)跑道和其它地物的精度及真實(shí)感不高。FlightGear[5]作為一款開源、跨平臺(tái)的飛行模擬程序,提供了三維地形的仿真實(shí)現(xiàn),已有多位學(xué)者利用其進(jìn)行飛行仿真系統(tǒng)的開發(fā)[6-8]。雖然FlightGear的地形系統(tǒng)包含高精度、高真實(shí)感的機(jī)場(chǎng)跑道,但是對(duì)于地形中的其它地物,其紋理主要是通過圖片的重復(fù)鋪貼來實(shí)現(xiàn),有明顯的人工痕跡,導(dǎo)致真實(shí)感較低。
為解決以上問題,本文將FlightGear中的地形數(shù)據(jù)、機(jī)場(chǎng)紋理數(shù)據(jù)和Google Maps的紋理數(shù)據(jù)相結(jié)合,通過動(dòng)態(tài)創(chuàng)建地形網(wǎng)格和材質(zhì)的方法,利用多線程技術(shù),實(shí)現(xiàn)了包含高真實(shí)感機(jī)場(chǎng)跑道的三維地形的并行創(chuàng)建。
FlightGear中的地形數(shù)據(jù)存儲(chǔ)在按經(jīng)緯度劃分的文件夾內(nèi),每個(gè)文件夾內(nèi)包含了構(gòu)成該經(jīng)緯度范圍內(nèi)地形所需的數(shù)據(jù),這些數(shù)據(jù)使用Binary Terrain Format編碼形式以BTG文件格式存儲(chǔ)。每個(gè)BTG文件對(duì)應(yīng)一個(gè)地形塊,包含了組成該地形的包圍球、頂點(diǎn)列表、法線列表、紋理坐標(biāo)列表、顏色列表、三角形和材質(zhì)等信息。其中,頂點(diǎn)的坐標(biāo)為基于WGS84橢球體的笛卡爾地心坐標(biāo),包含經(jīng)度、緯度和高度;三角形信息包含了構(gòu)成三角形的頂點(diǎn)索引;材質(zhì)信息包含了材質(zhì)名稱、使用該材質(zhì)的三角形起始索引及三角形數(shù)量[9]。
在Unity中,地形主要由地形網(wǎng)格和對(duì)應(yīng)的材質(zhì)組成。將創(chuàng)建的材質(zhì)賦給對(duì)應(yīng)的地形網(wǎng)格,經(jīng)過Unity渲染顯示即可實(shí)現(xiàn)三維地形的可視化。
為創(chuàng)建具有高真實(shí)感機(jī)場(chǎng)跑道的三維地形,本文使用FlightGear的地形數(shù)據(jù)創(chuàng)建高精度的地形網(wǎng)格,使用FlightGear的機(jī)場(chǎng)跑道紋理和Google Maps的紋理數(shù)據(jù)分別創(chuàng)建高真實(shí)感的機(jī)場(chǎng)跑道材質(zhì)和其它地物材質(zhì)。由于FlightGear地形數(shù)據(jù)中存儲(chǔ)的材質(zhì)相關(guān)信息與FlightGear使用的材質(zhì)相對(duì)應(yīng),因此對(duì)于FlightGear地形數(shù)據(jù)中除了機(jī)場(chǎng)跑道的其它地物材質(zhì)所對(duì)應(yīng)三角形,其頂點(diǎn)紋理坐標(biāo)需要重新計(jì)算,使其適合由Google Maps紋理創(chuàng)建的材質(zhì)。
Unity中可以使用點(diǎn)的三維坐標(biāo)、法線坐標(biāo)、紋理坐標(biāo)以及構(gòu)成三角形的頂點(diǎn)索引動(dòng)態(tài)創(chuàng)建網(wǎng)格。BTG文件中除了包含Unity創(chuàng)建網(wǎng)格所需的信息外,還包含材質(zhì)信息。因此可以充分利用BTG文件包含的信息進(jìn)行地形網(wǎng)格的創(chuàng)建。具體步驟如下:
(1)根據(jù)需求確定需要?jiǎng)?chuàng)建地形的經(jīng)緯度范圍及Google Maps紋理的縮放等級(jí);
(2)加載并解碼對(duì)應(yīng)的BTG文件,得到點(diǎn)的三維坐標(biāo)、法線坐標(biāo)、紋理坐標(biāo)、構(gòu)成三角形的頂點(diǎn)索引以及材質(zhì)信息;
(3)以BTG文件對(duì)應(yīng)的經(jīng)緯度創(chuàng)建空物體作為父節(jié)點(diǎn),以BTG文件名創(chuàng)建空物體作為子節(jié)點(diǎn);
(4)根據(jù)材質(zhì)信息,以每種材質(zhì)名創(chuàng)建空物體作為BTG物體的子節(jié)點(diǎn),如果材質(zhì)是機(jī)場(chǎng)跑道,則執(zhí)行步驟(5),如果材質(zhì)是其它地物類型,則執(zhí)行步驟(6);
(5)根據(jù)材質(zhì)對(duì)應(yīng)頂點(diǎn)的三維坐標(biāo)、法線坐標(biāo)、紋理坐標(biāo)及構(gòu)成三角形的頂點(diǎn)索引創(chuàng)建網(wǎng)格,然后執(zhí)行步驟(10);
(6)根據(jù)式(1)和式(2)計(jì)算材質(zhì)對(duì)應(yīng)三角形所包含頂點(diǎn)的Google Maps坐標(biāo);
(7)對(duì)該BTG文件中所有頂點(diǎn)進(jìn)行遍歷,確定所有頂點(diǎn)的經(jīng)緯度范圍,并如式(1)~式(4)所示,確定該BTG文件對(duì)應(yīng)的Google Maps瓦片坐標(biāo)范圍;
該經(jīng)緯度對(duì)應(yīng)的瓦片坐標(biāo)為[10]:
(8)根據(jù)步驟(7)得到的結(jié)果對(duì)步驟(6)得到的坐標(biāo)進(jìn)行歸一化處理,并將其作為頂點(diǎn)的紋理坐標(biāo);
(9)根據(jù)材質(zhì)對(duì)應(yīng)頂點(diǎn)的三維坐標(biāo)、法線坐標(biāo)、構(gòu)成三角形的頂點(diǎn)索引及步驟(8)計(jì)算得到的紋理坐標(biāo)創(chuàng)建網(wǎng)格;
(10)為材質(zhì)物體添加MeshFliter組件,并將創(chuàng)建的網(wǎng)格作為組件的Mesh,完成地形網(wǎng)格創(chuàng)建。
FlightGear地形使用的材質(zhì)包括機(jī)場(chǎng)跑道材質(zhì)及其它地物材質(zhì),材質(zhì)信息存儲(chǔ)在Materials文件夾內(nèi)的xml文件中,文件包含了材質(zhì)名稱及使用的紋理圖片。
對(duì)于機(jī)場(chǎng)跑道,每個(gè)跑道使用的紋理圖片是固定的,因此本文根據(jù)xml文件中的材質(zhì)信息,預(yù)先在Unity中創(chuàng)建了相應(yīng)的材質(zhì)。使用機(jī)場(chǎng)跑道材質(zhì)時(shí)直接從預(yù)先創(chuàng)建的材質(zhì)中查找該機(jī)場(chǎng)跑道對(duì)應(yīng)的材質(zhì)。
對(duì)其它地物,其對(duì)應(yīng)材質(zhì)需根據(jù)Google Maps紋理動(dòng)態(tài)創(chuàng)建。創(chuàng)建材質(zhì)時(shí),先根據(jù)創(chuàng)建地形網(wǎng)格步驟(7)得到的Google Maps瓦片坐標(biāo)范圍加載對(duì)應(yīng)圖片,然后將圖片按瓦片坐標(biāo)排列并拼接,最后使用拼接后的圖片創(chuàng)建對(duì)應(yīng)的材質(zhì)。
在進(jìn)行飛行仿真時(shí),通常需要加載大范圍的三維地形,如果使用單線程創(chuàng)建地形,則需要耗費(fèi)大量的時(shí)間,為了縮短創(chuàng)建地形所需的時(shí)間,本文使用Unity的多線程插件Loom對(duì)地形創(chuàng)建過程加速。
為了驗(yàn)證本文提出方法的有效性,本文進(jìn)行了仿真實(shí)驗(yàn)。以下實(shí)驗(yàn)均在Windows7 64位環(huán)境下運(yùn)行,使用的Unity版本為5.6.0f3,電腦配置為:Intel Core i7-4790 3.6 GHz 4核8線程CPU,16 GB內(nèi)存,NVIDIA GeForce GTX 1070顯卡。
首先,本文將FlightGear默認(rèn)材質(zhì)創(chuàng)建的地形和本文提出方法創(chuàng)建的地形進(jìn)行了對(duì)比。實(shí)驗(yàn)結(jié)果如圖1所示。由圖1可知,F(xiàn)lightGear默認(rèn)材質(zhì)創(chuàng)建的地形紋理樣式少,而且對(duì)于同種材質(zhì)使用相同的紋理重復(fù)鋪貼,人工痕跡明顯,真實(shí)感較低。本文提出的方法將材質(zhì)替換為Google地圖紋理創(chuàng)建的材質(zhì)后,不同地物類型容易辨別,而且紋理細(xì)節(jié)豐富,顏色過渡平滑,真實(shí)感更強(qiáng)。
圖1 FlightGear默認(rèn)材質(zhì)創(chuàng)建地形與本文提出方法創(chuàng)建地形對(duì)比
其次,對(duì)本文提出方法創(chuàng)建的機(jī)場(chǎng)跑道進(jìn)行了渲染顯示,并給出了其在本單位開發(fā)的飛行仿真系統(tǒng)中的效果,實(shí)驗(yàn)結(jié)果如圖2所示。由圖2可知,本文提出方法創(chuàng)建的機(jī)場(chǎng)跑道筆直、平坦,紋理分辨率高,跑道上的劃線清晰,真實(shí)感較高。
圖2 本文提出方法創(chuàng)建的機(jī)場(chǎng)跑道及其在飛行仿真系統(tǒng)中的效果
接下來,給出了本文提出方法創(chuàng)建的地形在本單位開發(fā)的飛行仿真系統(tǒng)中的實(shí)驗(yàn)結(jié)果,如圖3所示。由圖3可知,本文提出方法創(chuàng)建的地形細(xì)節(jié)豐富,紋理清晰,提升了飛行仿真系統(tǒng)的真實(shí)感。
圖3 本文提出方法創(chuàng)建的地形在飛行仿真系統(tǒng)中的應(yīng)用
最后,本文對(duì)使用單線程方法和多線程方法創(chuàng)建地形所用的時(shí)間進(jìn)行了實(shí)驗(yàn)。實(shí)驗(yàn)分為多組,每組地形相同,使用兩種方法分別進(jìn)行多次實(shí)驗(yàn),并將所用的平均時(shí)間進(jìn)行了對(duì)比,實(shí)驗(yàn)結(jié)果如表1所示。由表1可知,使用多線程方法與使用單線程方法相比速度最多提升了27.4倍,最少提升了6.3倍。即使是速度提升最少的情況,創(chuàng)建地形時(shí)間也由3分多鐘降低到半分鐘左右,速度提升明顯。實(shí)驗(yàn)結(jié)果表明,使用多線程方法可以有效降低創(chuàng)建地形所用的時(shí)間。
表1 單線程與多線程創(chuàng)建地形時(shí)間對(duì)比
由以上實(shí)驗(yàn)可見,本文提出的方法可以利用并行技術(shù)快速地創(chuàng)建包含高真實(shí)感機(jī)場(chǎng)跑道的三維地形。
本文基于FlightGear中的地形數(shù)據(jù)、機(jī)場(chǎng)紋理數(shù)據(jù)和Google Maps紋理數(shù)據(jù),利用多線程技術(shù),在Unity下實(shí)現(xiàn)了三維地形的并行創(chuàng)建。實(shí)驗(yàn)結(jié)果表明提出的方法可快速創(chuàng)建包含高真實(shí)感機(jī)場(chǎng)跑道的三維地形,可用于飛行仿真系統(tǒng)中的地形仿真。
[1] 童中翔,王曉東. 飛行仿真技術(shù)的發(fā)展與展望[J]. 飛行力學(xué),2002(3):5-8.
[2] OSGEarth – 3D Mapping Engine & Geospatial SDK for OpenSceneGraph. http://osgearth.org/.
[3] OpenSceneGraph. http://www.openscenegraph.org/.
[4] 王雷,丁華. 基于OSGEarth的大型三維空戰(zhàn)場(chǎng)景的搭建[J]. 軟件,2016,37(1):114-116+ 131.
[5] FlightGear Flight Simulator – sophisticated, professional, open-source. https://www.flightgear.org.
[6] 黃花,徐幼平,鄧志武. 基于FlightGear模擬器的實(shí)時(shí)可視化飛行仿真系統(tǒng)[J]. 系統(tǒng)仿真學(xué)報(bào),2007(19):4421-4423.
[7] 蔚海軍. 基于FlightGear的直升機(jī)飛行模擬系統(tǒng)研究[D]. 大連:大連理工大學(xué),2008.
[8] 劉鵬. 基于FlightGear 的無(wú)人直升機(jī)飛行仿真技術(shù)研究[D]. 南京:南京航空航天大學(xué),2011.
[9] BTG_file_format.https://wiki.flightgear.org/BTG_file_format.
[10] 張紹澤,任磊. Google Maps在Unity中的可視化及交互方法[J]. 現(xiàn)代導(dǎo)航,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—),黑龍江富錦人,博士,工程師,主要研究方向?yàn)槿S場(chǎng)景仿真、VR仿真。