(長(zhǎng)安大學(xué) 汽車(chē)學(xué)院,西安 710064)
隨著計(jì)算機(jī)科學(xué)的飛速發(fā)展,虛擬現(xiàn)實(shí)技術(shù)日益成熟。作為虛擬現(xiàn)實(shí)技術(shù)的重要表現(xiàn)形式,視景仿真技術(shù)廣泛應(yīng)用于虛擬駕駛、軍事演練、城市交通仿真等領(lǐng)域[1]。其中,在城市交通仿真領(lǐng)域,視景仿真是城市交通仿真研究的必要前提[2]。城市交通視景仿真以計(jì)算機(jī)技術(shù)為依托,利用系統(tǒng)仿真模型模擬城市交通系統(tǒng)的運(yùn)行狀態(tài),其對(duì)交通流、交通事故等交通現(xiàn)象的模擬[3],為城市道路設(shè)計(jì)、城市規(guī)劃等項(xiàng)目提供較為詳盡的交通參數(shù)和技術(shù)支持。但城市交通系統(tǒng)運(yùn)行復(fù)雜、城市環(huán)境要素多種多樣(包含車(chē)輛、建筑、公交站牌、行人等)[4]。為滿(mǎn)足城市交通仿真效果的真實(shí)性、流暢性,提升視景環(huán)境的沉浸感,場(chǎng)景建模及視景仿真技術(shù)的運(yùn)用,則成為城市交通視景仿真的關(guān)鍵[5]。對(duì)此,相關(guān)文獻(xiàn)運(yùn)用多種方法提升視景仿真效果,其中,文獻(xiàn)[6]利用multigen creator/Vega Prime平臺(tái)完成三維場(chǎng)景建模,并闡述建模一般步驟,但未對(duì)模型優(yōu)化展開(kāi)深入研究;文獻(xiàn)[7]采用multigen creator與3DMAX聯(lián)合建模建立沈陽(yáng)市三維模型,解決模型逼真度問(wèn)題,但未對(duì)模型渲染效率進(jìn)一步探討;文獻(xiàn)[8]利用3DMAX三維建模技術(shù)以及Java編程語(yǔ)言完成了虛擬城市廣場(chǎng)漫游導(dǎo)航系統(tǒng)的搭建,實(shí)現(xiàn)了模型與程序之間有機(jī)結(jié)合,但功能較為單一,系統(tǒng)流暢性有待改進(jìn)。
針對(duì)上述問(wèn)題,本文基于主流三維建模技術(shù)和視景仿真平臺(tái),提出適用于城市交通虛擬環(huán)境構(gòu)建的視景仿真框架,對(duì)視景仿真過(guò)程中的關(guān)鍵技術(shù)進(jìn)行分析研究,并將主要關(guān)鍵技術(shù)應(yīng)用于城市交通視景仿真系統(tǒng)的構(gòu)建。關(guān)鍵技術(shù)的應(yīng)用顯著提升了仿真系統(tǒng)的實(shí)時(shí)渲染及加載響應(yīng)速度,并取得高流暢性、高逼真度的視景仿真效果。
城市交通視景仿真總體框架如圖1所示。視景仿真主要包括城市交通三維模型建立、場(chǎng)景模型優(yōu)化、Vega Prime配置、VC++程序設(shè)計(jì)四部分。為滿(mǎn)足視景仿真實(shí)時(shí)性高、加載響應(yīng)迅速等要求,需將模型建立、模型優(yōu)化、Vega Prime配置、程序調(diào)用四部分有機(jī)結(jié)合,充分發(fā)揮各部分優(yōu)勢(shì)。
圖1 城市交通視景仿真總體框架
視景仿真步驟如下:
1)城市交通環(huán)境三維建模。利用Multigen Creator與3D MAX對(duì)城市交通場(chǎng)景聯(lián)合建模,模型包括路面地形模型、道路環(huán)境模型、動(dòng)態(tài)場(chǎng)景模型三部分,其中動(dòng)態(tài)場(chǎng)景模型用于程序調(diào)用。將場(chǎng)景模型儲(chǔ)存為flt文件。
2)場(chǎng)景模型優(yōu)化。對(duì)場(chǎng)景進(jìn)行改進(jìn),通過(guò)模型節(jié)點(diǎn)優(yōu)化、紋理細(xì)節(jié)優(yōu)化等技術(shù),以提高渲染效率。并將模型flt文件封裝為vsb格式的二進(jìn)制文件,可明顯提升加載效率,縮短模型加載響應(yīng)時(shí)間。
3)Vega Prime配置。利用Vega Prime面向?qū)ο?、功能模塊化、平臺(tái)兼容性好的優(yōu)點(diǎn)[9],完成模型文件(vsb文件)加載,城市交通視景環(huán)境初始配置(視點(diǎn)位置、視點(diǎn)運(yùn)動(dòng)、路徑規(guī)劃等)工作,并生成環(huán)境初始配置文件(acf文件)。
4)VC++程序。編制VC++主程序,并調(diào)用Vega Prime函數(shù)庫(kù)進(jìn)行聯(lián)合開(kāi)發(fā),實(shí)現(xiàn)場(chǎng)景驅(qū)動(dòng)以及視景中運(yùn)動(dòng)節(jié)點(diǎn)(DOF節(jié)點(diǎn)、Switch節(jié)點(diǎn))的控制。
作為視景仿真過(guò)程中的關(guān)鍵要素,三維模型的建立需要具備高效、便捷、可視化程度高等特點(diǎn),選擇合適的視景仿真建模軟件,對(duì)視景仿真系統(tǒng)的搭建十分重要。本文采用3D MAX與Multigen Creator聯(lián)合建模,其建模流程如圖2所示。
圖2 Multigen creator與3D MAX聯(lián)合建模流程圖
城市交通場(chǎng)景中模型元素復(fù)雜多樣,為兼顧場(chǎng)景精細(xì)度與流暢度,本文采用虛擬場(chǎng)景分開(kāi)再合并的方式進(jìn)行建模。聯(lián)合建模流程如下:
1)建立紋理貼圖庫(kù)。采用實(shí)地拍攝、顏色材質(zhì)替換等方法收集貼圖素材,并對(duì)素材進(jìn)行補(bǔ)光、裁剪等圖像處理,豐富紋理貼圖庫(kù);
2)建立三維模型。利用Multigen Creator多邊形建模的優(yōu)勢(shì),進(jìn)行地形、樹(shù)木、道路等模型的搭建,利用3D MAX強(qiáng)大的點(diǎn)、線、面以及幾何體編輯功能建立復(fù)雜模型,如車(chē)輛、房屋等;
3)場(chǎng)景模型整合。3D MAX模型通過(guò)obj文件導(dǎo)入Multigen Creator,由于3D MAX模型三角面較多,需進(jìn)行合并細(xì)小面、減少多邊形面處理[10],整合后的場(chǎng)景貼圖還可轉(zhuǎn)換為rgb格式,豐富紋理庫(kù)。
城市交通環(huán)境要素復(fù)雜,涉及眾多三維實(shí)體,如車(chē)輛、樹(shù)木、路燈、立交橋等,需建立數(shù)量龐大的三維模型,針對(duì)眾多模型,需對(duì)場(chǎng)景合理優(yōu)化以滿(mǎn)足視景仿真實(shí)時(shí)性、流暢性的需求。
2.2.1 子紋理貼圖優(yōu)化
為達(dá)到逼真顯示效果,三維模型建立后常利用紋理映射技術(shù)將二位圖像映射到模型表面[11]。但creator對(duì)紋理貼圖分辨率有所限制:貼圖長(zhǎng)和寬限制為2的冪次方個(gè)像素單位,即圖像分辨率為2n×2n。當(dāng)貼圖分辨率尺寸不滿(mǎn)足2的冪次方像素單位要求時(shí),系統(tǒng)會(huì)自動(dòng)分配更大內(nèi)存來(lái)存儲(chǔ)貼圖,以分辨率大小為180×420為例,其尺寸分配如圖3所示。這樣會(huì)造成內(nèi)存資源浪費(fèi),影響貼圖的加載與渲染效率。
圖3 紋理原始尺寸與內(nèi)存分配尺寸關(guān)系圖
在眾多城市場(chǎng)景要素中,不規(guī)則紋理的存在不可避免,就需對(duì)其進(jìn)行子紋理貼圖優(yōu)化,即將各個(gè)分散的不規(guī)則紋理合并為一個(gè)主紋理,合并原理如圖4所示,其中A、B、C、D、E表示子紋理貼圖或透明圖像留白,以分辨率1024×1024圖像為例,子紋理合并實(shí)例如圖5所示。主紋理映射方法與其他紋理映射方法相同,需重新建立紋理映射關(guān)系。優(yōu)化后主紋理分辨率最大不應(yīng)超過(guò)1024×1024,以縮短模型加載過(guò)程中紋理解壓時(shí)間。
圖4 子紋理合并圖
圖5 合并紋理圖
2.2.2 層級(jí)結(jié)構(gòu)節(jié)點(diǎn)優(yōu)化
Multigen Creator采用層級(jí)結(jié)構(gòu)進(jìn)行三維模型的存儲(chǔ)[12-13],層級(jí)結(jié)構(gòu)如圖6所示,節(jié)點(diǎn)的層級(jí)結(jié)構(gòu)影響視景渲染過(guò)程中節(jié)點(diǎn)的生成與剔除。視景渲染時(shí),會(huì)遍歷所有數(shù)據(jù)庫(kù)節(jié)點(diǎn),并根據(jù)節(jié)點(diǎn)位置是否在可視范圍內(nèi)進(jìn)行節(jié)點(diǎn)的截取計(jì)算,渲染可視范圍內(nèi)節(jié)點(diǎn),并剔除可視范圍之外的節(jié)點(diǎn)。
圖6 Multigen Creator層級(jí)結(jié)構(gòu)圖
城市交通場(chǎng)景復(fù)雜,元素種類(lèi)眾多,建模過(guò)程中,為方便模型統(tǒng)一管理,易于修改、調(diào)用,常采用邏輯結(jié)構(gòu)建立模型數(shù)據(jù)庫(kù),如創(chuàng)建樹(shù)、房屋、車(chē)道、交通燈、公交站等組節(jié)點(diǎn),并將樹(shù)、房屋等體節(jié)點(diǎn)放置在對(duì)應(yīng)組節(jié)點(diǎn)下,節(jié)點(diǎn)信息如圖7所示。
圖7 模型數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)
邏輯結(jié)構(gòu)建立的模型數(shù)據(jù)庫(kù)條理清晰、易于管理,但會(huì)影響模型渲染過(guò)程中節(jié)點(diǎn)的剔除與加載速度。場(chǎng)景制作完成后,需按照空間位置將組節(jié)點(diǎn)重新劃分,本文將整體場(chǎng)景按照空間幾何形狀分為7塊,每塊含有多種城市元素,節(jié)點(diǎn)信息如圖8所示。
圖8 模型數(shù)據(jù)庫(kù)空間結(jié)構(gòu)
2.2.3 模型封裝技術(shù)
城市交通場(chǎng)景元素復(fù)雜,導(dǎo)致原始flt模型文件較大,嚴(yán)重增加場(chǎng)景加載時(shí)間,利用to_vsb.exe工具將flt文件封裝為vsb格式的二進(jìn)制文件,可大大提升模型文件加載效率[14]。VSB(Vega Scene Graphic Binary)是一種不可編輯的場(chǎng)景文件格式,專(zhuān)門(mén)用于Vega Prime模型文件的加載,其具有模型解壓速度快、忽略紋理路徑影響、封裝元素全面等優(yōu)點(diǎn)。但在格式轉(zhuǎn)換時(shí)也應(yīng)注意以下兩點(diǎn):
1)紋理貼圖與vsb文件需放入同一文件夾。文件轉(zhuǎn)換時(shí),轉(zhuǎn)換工具忽略貼圖加載路徑,只將同一文件夾下的flt文件與貼圖文件打包入同一個(gè)vsb文件,如文件夾下無(wú)貼圖文件,則只轉(zhuǎn)換白模型。
2)建立精細(xì)樹(shù)模型,不可進(jìn)行vsb格式轉(zhuǎn)換。精細(xì)樹(shù)模型需以替換場(chǎng)景中普通樹(shù)模型的方式進(jìn)行加載,其通過(guò)尋找flt文件中樹(shù)木模型路徑及名稱(chēng)進(jìn)行精細(xì)樹(shù)替換,而vsb文件不包含樹(shù)木模型路徑信息,丟失的信息會(huì)影響精細(xì)樹(shù)的生成。
2.3.1 Switch節(jié)點(diǎn)驅(qū)動(dòng)
作為城市視景環(huán)境重要標(biāo)志之一,交通燈模型必不可少,本文采用switch節(jié)點(diǎn)技術(shù)進(jìn)行信號(hào)燈模擬仿真,switch節(jié)點(diǎn)技術(shù)可將不同體模型放置在同一節(jié)點(diǎn)下,并通過(guò)函數(shù)調(diào)用控制節(jié)點(diǎn)下模型變換。交通燈模型制作中,將創(chuàng)建完成的紅、綠、黃3個(gè)體節(jié)點(diǎn)放置在同一個(gè)switch節(jié)點(diǎn)下,設(shè)置switch節(jié)點(diǎn),并按順序?qū)?個(gè)顏色體節(jié)點(diǎn)編號(hào)(如表1),以便于通過(guò)時(shí)間間隔控制節(jié)點(diǎn)變換,節(jié)點(diǎn)設(shè)置如圖9所示。
表1 顏色編號(hào)
圖9 switch節(jié)點(diǎn)設(shè)置
圖10 switch節(jié)點(diǎn)控制流程圖
VC++調(diào)用vega API函數(shù)獲取仿真時(shí)間T,通過(guò)遍歷節(jié)點(diǎn)找出特定switch節(jié)點(diǎn),并根據(jù)仿真時(shí)間與不同信號(hào)燈之間的時(shí)間間隔確定switch節(jié)點(diǎn)中的index值,然后通過(guò)判斷車(chē)輛位置實(shí)現(xiàn)車(chē)輛是否闖紅燈判定,節(jié)點(diǎn)控制流程如圖10所示,控制switch節(jié)點(diǎn)關(guān)鍵代碼如下:
vsSwitch *mySwitch; //定義switch節(jié)點(diǎn)
tempNode =find_named("switch");//尋找switch節(jié)點(diǎn)
mySwitch = (vsSwitch *)tempNode;//將switch節(jié)點(diǎn)賦予mySwitch
Time=vpKernel::instance()->getSimulationTime();//獲取仿真時(shí)間
mySwitch->setActiveMask(0);//實(shí)現(xiàn)紅燈渲染
mySwitch->setActiveMask(1);//實(shí)現(xiàn)綠燈渲染
mySwitch->setActiveMask(2);//實(shí)現(xiàn)黃燈渲染
2.3.2 DOF節(jié)點(diǎn)驅(qū)動(dòng)
DOF節(jié)點(diǎn)可控制其所有子節(jié)點(diǎn)按照設(shè)置的自由度移動(dòng)或旋轉(zhuǎn),賦予模型運(yùn)動(dòng)的能力。城市交通場(chǎng)景中,車(chē)輪的旋轉(zhuǎn)與轉(zhuǎn)向、雨刮的搖擺、虛擬儀表盤(pán)的建立等都適合DOF節(jié)點(diǎn)技術(shù)創(chuàng)建。
DOF節(jié)點(diǎn)的創(chuàng)建,需對(duì)目標(biāo)模型創(chuàng)建局部坐標(biāo)系O’x’y’z’,其示意如圖11所示,DOF節(jié)點(diǎn)封裝有2個(gè)仿射變換矩陣T1、T2。T1矩陣用來(lái)描述局部坐標(biāo)系相對(duì)于世界坐標(biāo)系的位置、平移、縮放等變換,T2矩陣則模型物體相對(duì)于局部坐標(biāo)系的位置、平移、縮放等變換。其矩陣可表示為:
圖11 DOF節(jié)點(diǎn)示意圖
圖12 DOF節(jié)點(diǎn)設(shè)置
與switch節(jié)點(diǎn)驅(qū)動(dòng)類(lèi)似,DOF節(jié)點(diǎn)驅(qū)動(dòng)也需對(duì)模型節(jié)點(diǎn)遍歷,并找出特定DOF節(jié)點(diǎn),對(duì)節(jié)點(diǎn)模型設(shè)置運(yùn)動(dòng)狀態(tài),實(shí)現(xiàn)駕駛?cè)伺c車(chē)輛模型間的交互功能??刂艱OF節(jié)點(diǎn)關(guān)鍵代碼如下:
vsDOF *wiperDOF;//定義DOF節(jié)點(diǎn)
wiperDOF = (vsDOF*)m_car_obj->find_named("wiper");//尋找節(jié)點(diǎn)并將其賦予wiperDOF
Time=vpKernel::instance()->getSimulationTime();//獲取仿真時(shí)間
wiperDOF ->setRotateH( 2, true);//驅(qū)動(dòng)DOF節(jié)點(diǎn),并設(shè)置每一幀旋轉(zhuǎn)角度為2°
wiperDOF ->setRotateH( 0, true);// 設(shè)置每一幀旋轉(zhuǎn)角度為0°,DOF節(jié)點(diǎn)旋轉(zhuǎn)停止
應(yīng)用上述視景建模與仿真技術(shù),構(gòu)建城市交通視景仿真系統(tǒng),硬件配置:CPU為Intel i7-8700 3.2 GHz,內(nèi)存16 G,硬盤(pán)2TB,顯卡為GTX 1070;軟件配置:操作系統(tǒng)Windows10,Multigen Creator,3D MAX,Vega Prime,Microsoft Visual C++。
視景驅(qū)動(dòng)效果如圖13~14所示。采用Multigen Creator與3D MAX聯(lián)合建模,將多種元素模型有機(jī)結(jié)合,資源利用合理,可在滿(mǎn)足場(chǎng)景逼真度的同時(shí),兼顧視景仿真的實(shí)時(shí)性。節(jié)點(diǎn)動(dòng)態(tài)驅(qū)動(dòng)技術(shù)的運(yùn)用,使場(chǎng)景要素更加豐富,場(chǎng)景更貼近真實(shí),還原度更高,仿真效果良好。
圖13 房屋視景仿真效果
圖14 交通路口和立交橋視景仿真效果
場(chǎng)景加載與渲染效率方面也有較大提升,模型優(yōu)化技術(shù)應(yīng)用前后實(shí)時(shí)性能對(duì)比如表2所示。從表中得知,簡(jiǎn)單場(chǎng)景下,模型封裝技術(shù)可明顯提升場(chǎng)景加載效率,其加載時(shí)間為6 s,約為未使用封裝技術(shù)場(chǎng)景加載時(shí)間的1/3,模型優(yōu)化技術(shù)可一定程度上提升場(chǎng)景流暢度,其剔除和渲染時(shí)間相較未使用優(yōu)化技術(shù)的場(chǎng)景有約2 ms的縮短;復(fù)雜場(chǎng)景下,優(yōu)化與封裝技術(shù)的優(yōu)勢(shì)進(jìn)一步擴(kuò)大,模型封裝技術(shù)的使用可將場(chǎng)景加載時(shí)間縮短為原來(lái)的1/6,約為21 s,而在采用模型優(yōu)化技術(shù)后,場(chǎng)景平均幀率維持在37幀/s左右,提升約為30%,平均剔除和渲染時(shí)間為8.4 ms和8.2 ms,縮短為原來(lái)的1/2。
表2 關(guān)鍵技術(shù)應(yīng)用前后實(shí)時(shí)性能對(duì)比
本文提出一種基于VC++與Vega Prime聯(lián)合仿真的城市交通視景仿真框架,解決了城市視景仿真中實(shí)時(shí)性差、還原度較低的問(wèn)題,并就其中關(guān)鍵建模技術(shù)、模型優(yōu)化技術(shù)以及節(jié)點(diǎn)動(dòng)態(tài)驅(qū)動(dòng)技術(shù)作重點(diǎn)研究。Multigen Creator與3D MAX聯(lián)合建模技術(shù)滿(mǎn)足場(chǎng)景逼真度的同時(shí),兼顧了仿真實(shí)時(shí)性需求,模型優(yōu)化技術(shù)的使用大大提升了視景加載及渲染效率,節(jié)點(diǎn)動(dòng)態(tài)驅(qū)動(dòng)技術(shù)豐富了場(chǎng)景元素,場(chǎng)景還原度更高。示例效果顯示,優(yōu)化技術(shù)的應(yīng)用使視景加載與渲染效率大幅提升,視景仿真系統(tǒng)提供了逼真的圖形畫(huà)質(zhì),并以較高的城市交通還原度,實(shí)現(xiàn)了高沉浸感的視景仿真效果,為進(jìn)一步的城市交通流模擬訓(xùn)練、駕駛?cè)藨?yīng)激等研究提供基礎(chǔ)。