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