張振偉 劉黨輝 蘇永芝 張沖
中國人民解放軍裝備學(xué)院,北京 101416
Vega Prime是美國MultiGen-Paradigm公司開發(fā)的支持面向?qū)ο蠹夹g(shù)的實(shí)時(shí)仿真渲染驅(qū)動(dòng)引擎[1],它基于Vega Scene Graph(VSG,MPI公司先進(jìn)的跨平臺(tái)場景圖形API,底層OpenGL),同時(shí)包括LynX Prime GUI(用戶圖形界面)工具,讓用戶既可以用圖形化的工具進(jìn)行快速配置,又可以用底層場景圖形API來進(jìn)行應(yīng)用特定功能的創(chuàng)建。Vega Prime還設(shè)計(jì)了多種功能增強(qiáng)模塊,很容易滿足特殊模擬要求,更進(jìn)一步提升了應(yīng)用開發(fā)的效率和適用性,使其在虛擬視景仿真中得到廣泛應(yīng)用。
本文結(jié)合基于Vega Prime的視景仿真系統(tǒng)開發(fā)框架和場景顯示框架,針對(duì)仿真系統(tǒng)中運(yùn)動(dòng)物體在場景內(nèi)實(shí)時(shí)渲染的真實(shí)感需求,研究了運(yùn)動(dòng)真實(shí)感的關(guān)鍵技術(shù),包括DOF技術(shù)、動(dòng)畫紋理技術(shù)和粒子系統(tǒng),并將文章研究的相關(guān)技術(shù)應(yīng)用到了實(shí)踐。
利用Vega Prime開發(fā)視景仿真一般有三種模式:一是使用Vega Prime的LynX Prime圖形用戶界面配置仿真系統(tǒng),它只適用于簡單的、對(duì)交互性要求不高的小系統(tǒng);二是完全運(yùn)用Vega Prime提供的API函數(shù)進(jìn)行程序開發(fā),可研發(fā)出復(fù)雜的、對(duì)交互性要求高的系統(tǒng),但編程復(fù)雜;三是綜合前兩種模式進(jìn)行系統(tǒng)的開發(fā),首先通過LynX Prime建立場景配置文件(ACF文件),再將文件中配置的屬性與底層API調(diào)用結(jié)合起來,這種模式將易用的工具和高級(jí)仿真功能有效地結(jié)合起來,幫助用戶高效地、準(zhǔn)確地開發(fā)實(shí)時(shí)三維應(yīng)用,是最常用的設(shè)計(jì)模式。
基于Vega Prime的視景仿真主要包括三部分:三維仿真模型建立、LynX Prime圖形界面設(shè)計(jì)和視景仿真程序設(shè)計(jì)[2]。三維仿真模型主要包括Multigen Creator建立的視景模型庫和Creator Terrain Studio生成的大場景地形模型庫;LynX Prime圖形界面設(shè)計(jì)主要包括基本環(huán)境(如仿真時(shí)間、能見度和經(jīng)緯度等)、模型初始位置、常用特效(如云、霧、雨雪、火等)和大場景應(yīng)用等內(nèi)容;視景仿真程序設(shè)計(jì)完成整個(gè)仿真過程,為用戶提供實(shí)時(shí)流暢的視景仿真結(jié)果。本視景仿真設(shè)計(jì)采用上文敘述的第三種模式,程序設(shè)計(jì)的主要內(nèi)容包括實(shí)時(shí)驅(qū)動(dòng)算法實(shí)現(xiàn)、實(shí)時(shí)仿真數(shù)據(jù)處理、層次細(xì)節(jié)(LOD)、物體運(yùn)動(dòng)和視點(diǎn)控制等內(nèi)容。
系統(tǒng)初始化完成之后,Vega Prime調(diào)用define( )函數(shù)加載配置的相應(yīng)ACF文件,對(duì)系統(tǒng)進(jìn)行初始配置,然后對(duì)系統(tǒng)和各個(gè)模塊按照仿真的需求進(jìn)行配置,建立處理消息的響應(yīng)函數(shù),如鍵盤輸入響應(yīng)、鼠標(biāo)響應(yīng)、OpenGL作圖通道回調(diào)函數(shù)等,之后進(jìn)入場景繪制主循環(huán)按照配置的功能進(jìn)行渲染,渲染完成后退出循環(huán),結(jié)束程序[3]。場景顯示框架如圖1所示。
圖1 Vega Prime場景顯示框架
在Vega Prime的場景繪制過程中[4],每一幀都是以beginFrame( )函數(shù)開始的,應(yīng)用程序服務(wù)管理模塊(vsServiceMgr)向其他服務(wù)模塊(vsService,包括vpIsectorService、vsPipeline等模塊)發(fā)送幀開始消息,各服務(wù)模塊收到消息后進(jìn)行仿真時(shí)間存儲(chǔ)、釋放占用的線程等,繼而服務(wù)管理模塊再發(fā)送場景圖同步消息,如果某一服務(wù)是需要對(duì)場景圖進(jìn)行復(fù)制的(如vsPipeline管理的CULL,DRAW服務(wù)),該服務(wù)所復(fù)制的場景圖將于主場景圖進(jìn)行同步。然后服務(wù)管理器再發(fā)送非關(guān)鍵延遲處理消息,服務(wù)器就可以對(duì)基于APP主線程繪制的內(nèi)容進(jìn)行并行操作了。此時(shí)執(zhí)行相應(yīng)的場景繪制和顯示的操作命令;最后以endFrame( )結(jié)束該幀,結(jié)束本次服務(wù),系統(tǒng)進(jìn)入下一個(gè)幀循環(huán)。
物體的運(yùn)動(dòng)行為主要包括兩個(gè)方面,一是物體及物體內(nèi)部零部件運(yùn)動(dòng)屬性的改變,如汽車速度的變化及汽車轉(zhuǎn)彎時(shí)車輪旋轉(zhuǎn)狀態(tài)的變化等;二是運(yùn)動(dòng)物體與其他物體發(fā)生碰撞后外形以及狀態(tài)的改變(即碰撞響應(yīng)),如汽車撞到建筑物后車身變形甚至發(fā)生爆炸。
基于Vega Prime開發(fā)的視景仿真系統(tǒng)展現(xiàn)物體的運(yùn)動(dòng)行為主要應(yīng)用以下幾種技術(shù):DOF、紋理動(dòng)畫和粒子系統(tǒng),合稱為運(yùn)動(dòng)真實(shí)感仿真技術(shù)。
基于Vega Prime視景仿真場景由大量三維模型(FLT模型)組成,包括靜止實(shí)體和運(yùn)動(dòng)實(shí)體,如山坡、樹木、房屋等靜態(tài)模型,又如車輛、機(jī)械部件等運(yùn)動(dòng)模型。對(duì)靜止實(shí)體的描述只需設(shè)定它在仿真系統(tǒng)中的位姿,即位置(x,y,z)、姿態(tài)(h,p,r)和伸縮量(scaleX,scaleY, scaleZ)即可;而運(yùn)動(dòng)實(shí)體則較為復(fù)雜,這類模型在場景中一般包含子節(jié)點(diǎn)的相對(duì)運(yùn)動(dòng),如運(yùn)動(dòng)中的車輛,其車輪相對(duì)車的質(zhì)心有一個(gè)相對(duì)運(yùn)動(dòng)。對(duì)于此類模型中子節(jié)點(diǎn)的相對(duì)運(yùn)動(dòng),如果也使用Vega Prime提供的基于單個(gè)模型的運(yùn)動(dòng)模式(Motion Mode)或是路徑導(dǎo)航(Path Navigator),在程序中實(shí)現(xiàn)節(jié)點(diǎn)模型的運(yùn)動(dòng)控制是很難的。這種情況下,最好的解決辦法就是使用DOF技術(shù)。
DOF定義的是FLT模型中節(jié)點(diǎn)相對(duì)其父節(jié)點(diǎn)的相對(duì)運(yùn)動(dòng)。使用DOF技術(shù)首先要針對(duì)選定的DOF節(jié)點(diǎn)定義局部坐標(biāo)系,然后設(shè)置在局部坐標(biāo)系下節(jié)點(diǎn)內(nèi)物體的基本運(yùn)動(dòng)參數(shù),共有九種基本運(yùn)動(dòng):沿X、Y、Z軸的位移;繞X、Y、Z軸的旋轉(zhuǎn)和沿X、Y、Z軸的縮放。理論上來說,通過這九種基本運(yùn)動(dòng)的組合可以實(shí)現(xiàn)任意復(fù)雜的運(yùn)動(dòng)形式,但一般DOF只用于設(shè)定簡單常見的物理運(yùn)動(dòng),如直線勻速、繞某軸旋轉(zhuǎn)等。
Creator建立FLT模型時(shí)可以很方便的建立DOF節(jié)點(diǎn)(DOF Node),但基于Vega Prime開發(fā)的視景仿真系統(tǒng)無法直接對(duì)模型中的DOF節(jié)點(diǎn)進(jìn)行渲染。所以,DOF技術(shù)應(yīng)用于某個(gè)模型的子節(jié)點(diǎn)時(shí),需要結(jié)合Vega Prime的API函數(shù)。首先通過vpObject::find(“object”)[4]綁定運(yùn)動(dòng)模型,object是在LynX Prime中加載的含有所需DOF節(jié)點(diǎn)的運(yùn)動(dòng)模型;然后利用find_named(“DOFnode”)函數(shù)對(duì)"o b j e c t"模型中的節(jié)點(diǎn)進(jìn)行遍歷查找;一旦查找到我們需要的“DOFnode”后,即可通過setTranslate,setRotate和setScale設(shè)定DOF節(jié)點(diǎn)運(yùn)動(dòng)屬性,即九種基本運(yùn)動(dòng)及其組合,并利用setConstraint函數(shù)限制節(jié)點(diǎn)的運(yùn)動(dòng)范圍,從而實(shí)現(xiàn)節(jié)點(diǎn)的相對(duì)運(yùn)動(dòng)。使用流程如圖2所示。
圖2 DOF使用流程
對(duì)于運(yùn)動(dòng)精細(xì)度要求較高的運(yùn)動(dòng)模型,應(yīng)用DOF技術(shù)并不能滿足虛擬仿真沉浸感的需求,如隨風(fēng)飄動(dòng)的紅旗、流動(dòng)的河水以及車輛行駛時(shí)胎紋的變化等場景。此時(shí),紋理動(dòng)畫(Texture Animation)技術(shù)可以較好地解決這些問題。
紋理動(dòng)畫技術(shù)是將復(fù)雜的物體運(yùn)動(dòng)用紋理代替,用一系列物體運(yùn)動(dòng)紋理呈現(xiàn)難以用運(yùn)動(dòng)模型描述的粒子或是粒子群的運(yùn)動(dòng),主要有兩種實(shí)現(xiàn)方法:
一是利用建模技術(shù),在FLT模型中將物體的運(yùn)動(dòng)轉(zhuǎn)化為在指定面片上播放紋理。此方法的關(guān)鍵是紋理圖片的獲取。使用時(shí),根據(jù)動(dòng)畫紋理圖片的數(shù)量復(fù)制選中的面片節(jié)點(diǎn)(Face Node),依次進(jìn)入這些面片的屬性頁,分別把紋理按照事件發(fā)生的順序映射到面片上,如圖3所示。
二是自定義渲染策略。在需要展現(xiàn)運(yùn)動(dòng)細(xì)節(jié)的模型上定義渲染幾何體,并根據(jù)渲染策略完成運(yùn)動(dòng)效果的渲染。本文中模擬轉(zhuǎn)運(yùn)卡車行駛時(shí)胎紋變化使用的就是這種方法。
此方法同樣基于對(duì)Vega Prime 幀循環(huán)的控制,需要首先通過vpObject::find(“object”)綁定運(yùn)動(dòng)模型,然后對(duì)模型中滿足渲染特性的節(jié)點(diǎn)遍歷搜索,針對(duì)搜索
圖3 紋理映射
到的每一個(gè)幾何體應(yīng)用渲染策略。這樣應(yīng)用于模型幾何體上的紋理根據(jù)實(shí)際運(yùn)動(dòng)被二次渲染,可以得到逼真的動(dòng)態(tài)效果。綁定渲染策略的方法如下:
其中,cit是滿足運(yùn)動(dòng)特性的節(jié)點(diǎn),geometry是經(jīng)搜索得到的符合要求的渲染幾何體,m_strategy是針對(duì)汽車運(yùn)動(dòng)模型設(shè)計(jì)的渲染策略。
通過成千上萬個(gè)不規(guī)則的、隨機(jī)分布的、每時(shí)每刻在不斷地運(yùn)動(dòng)和改變形態(tài)的粒子的集合,表現(xiàn)景物的整體形態(tài)和特征以及動(dòng)態(tài)變化,可以模擬云、霧、雨、雪、雷電等自然現(xiàn)象和煙、火焰、爆炸等特殊場景[5]。Vega Prime以粒子系統(tǒng)為原型來模擬不規(guī)則幾何形狀的特殊形體,是一種很重要的展現(xiàn)運(yùn)動(dòng)真實(shí)感的技術(shù)。在仿真中實(shí)現(xiàn)粒子的特殊效果主要控制粒子以下五個(gè)方面;粒子產(chǎn)生、粒子屬性、粒子運(yùn)動(dòng)、粒子消亡和粒子渲染。其中,粒子運(yùn)動(dòng)變化多樣,也最難于控制,它用于描述粒子在其生命周期內(nèi)的變化規(guī)律,包括粒子時(shí)間特性和粒子速度特性兩部分。
粒子時(shí)間特性包括粒子大小隨時(shí)間的變化和粒子顏色隨時(shí)間的變化,它們用于控制粒子自身屬性變化。
粒子速度特性包括粒子大小隨速度的變化、粒子速度和方向、隨機(jī)風(fēng)的速度與方向、球形粒子速度和隨機(jī)粒子速度。這些特性都是時(shí)間的函數(shù)[6],實(shí)際上表現(xiàn)了粒子速度與時(shí)間的關(guān)系,即粒子所受力的作用。粒子速度用于表現(xiàn)物體承受的主動(dòng)力,如動(dòng)力、牽引力等;風(fēng)主要表現(xiàn)所受主要外力的作用,并不僅局限于風(fēng)力,還可以是重力、摩擦力等;球形粒子速度表現(xiàn)粒子沿半徑方向向外擴(kuò)張力或向內(nèi)收縮力;隨機(jī)粒子速度表現(xiàn)隨機(jī)外力的作用。
針對(duì)航天發(fā)射活動(dòng)中可能出現(xiàn)的推進(jìn)劑泄漏事故,模擬泄露產(chǎn)生煙霧,并隨風(fēng)飄遠(yuǎn)的效果。仿真煙霧行為,其基礎(chǔ)是研究與煙霧行為相關(guān)的因素。
第一個(gè)因素是煙霧泄露的噴射力。當(dāng)煙霧以一定泄露速度進(jìn)入空氣時(shí),由于煙霧與空氣的摩擦,煙霧受到空氣的剪切力作用而產(chǎn)生旋轉(zhuǎn)變形,使得煙霧與空氣迅速混合。第二個(gè)因素是空氣浮力。煙霧粒子受到浮力作用向上運(yùn)動(dòng),且溫度高的部分受浮力大,上升速度快。第三個(gè)因素是風(fēng)的作用。煙霧進(jìn)入空氣一段時(shí)間后,風(fēng)力是煙霧粒子受到的主要作用力,當(dāng)煙霧受到風(fēng)的吹動(dòng)時(shí),煙霧在水平方向以接近風(fēng)速的速度移動(dòng)。第四個(gè)因素是溫度。溫度越高,煙霧粒子的熱運(yùn)動(dòng)越劇烈,煙霧顏色就越深。
航天發(fā)射任務(wù)具有高風(fēng)險(xiǎn)、高費(fèi)用、不可逆等特點(diǎn)[7]。因此,嚴(yán)密地培訓(xùn)航天發(fā)射任務(wù)組織指揮人員顯得越發(fā)重要。利用虛擬仿真技術(shù)建立仿真訓(xùn)練系統(tǒng),不僅可以模擬實(shí)際發(fā)射任務(wù)的組織指揮和操作,還可以模擬典型事件進(jìn)行對(duì)抗訓(xùn)練,提高訓(xùn)練效果。
基于Windows XP操作系統(tǒng)和VisualC++.Net2003開發(fā)環(huán)境,采用Vega Prime設(shè)計(jì)開發(fā)航天發(fā)射仿真訓(xùn)練系統(tǒng),模擬航天發(fā)射場發(fā)射活動(dòng)和一些典型事件及其相應(yīng)的組織指揮任務(wù),主要包括火箭箭體的轉(zhuǎn)運(yùn)、吊裝、火箭發(fā)射、推進(jìn)劑泄露事故、緊急關(guān)機(jī)事故和廠房起火事故等仿真場景。
模擬火箭箭體轉(zhuǎn)運(yùn)。運(yùn)用DOF技術(shù),對(duì)吊車的吊桿和吊鉤分別設(shè)定局部坐標(biāo)系,通過吊桿的轉(zhuǎn)動(dòng)和伸縮,吊鉤的伸縮,將火箭箭體從火車車廂吊轉(zhuǎn)到卡車上(見圖5)。模擬推進(jìn)器泄露事故。綜合考慮影響煙霧行為的四種因素,泄露煙霧在產(chǎn)生初期顏色較深,空氣浮力占主導(dǎo)地位,向上運(yùn)動(dòng)的趨勢(shì)更加明顯,飄散一段時(shí)間后主要受風(fēng)力影響,同時(shí)運(yùn)動(dòng)隨機(jī)性加強(qiáng),表現(xiàn)為向更遠(yuǎn)處趨向水平飄散,仿真效果見圖5。
圖4 火箭箭體吊轉(zhuǎn)模擬
圖5 推進(jìn)劑泄露煙霧模擬
隨著虛擬仿真技術(shù)的不斷發(fā)展,視景仿真系統(tǒng)對(duì)虛擬模型的視覺效果和運(yùn)動(dòng)真實(shí)性的要求越來越高,本文結(jié)合基于Vega Prime的視景仿真系統(tǒng)開發(fā)框架和場景顯示框架,研究了展現(xiàn)物體運(yùn)動(dòng)真實(shí)感的關(guān)鍵技術(shù),包括DOF技術(shù)、動(dòng)畫紋理技術(shù)和粒子系統(tǒng),這些技術(shù)對(duì)提高視景仿真系統(tǒng)物體運(yùn)動(dòng)真實(shí)感具有通用性和實(shí)用性,有一定的參考價(jià)值。
[1]Multigen-Paradigm lnc. Vega prime programmer’s guide (version 2.0)[M]. Dallas: Multigen Paradigm lnc, 2005
[2]褚彥均, 唐碩. 基于Vega Prime的通用視景仿真系統(tǒng)研究[J].計(jì)算機(jī)工程與設(shè)計(jì), 2009, 30(17):4104-4107
[3]周劍勇, 王躍峰. 系統(tǒng)仿真技術(shù)及其應(yīng)用學(xué)術(shù)會(huì)議論文集[C].太原:[出版者不詳],2008
[4]Multigen-Paradigm lnc. Vega Prime Reference Guide (version 2.0)[M].Dallas: Multigen Paradigm lnc, 2005
[5]翟兆建, 蔡志勇, 趙紅軍. 基于Vega Prime的滅火飛機(jī)投水特效模擬[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2012,4, 29(4):260-262
[6]郭齊勝, 董志明. 戰(zhàn)場環(huán)境仿真[M]. 北京: 國防工業(yè)出版社,2005
[7]劉培杰. 航天發(fā)射訓(xùn)練系統(tǒng)建模技術(shù)應(yīng)用研究[D]. 北京: 裝備學(xué)院, 2011