羅月童, 朱學(xué)武, 黃 文, 李彥霄, 沙 宇
(合肥工業(yè)大學(xué) 計(jì)算機(jī)與信息學(xué)院,安徽 合肥 230009)
在現(xiàn)實(shí)生活中,火災(zāi)時(shí)有發(fā)生,為了增強(qiáng)人們的防火意識(shí),需要加強(qiáng)消防意識(shí)的普及工作。在現(xiàn)實(shí)中進(jìn)行防火演習(xí)時(shí)通常是在一片空曠的環(huán)境下生一堆火,然后用各種不同的滅火器針對(duì)不同的火源進(jìn)行滅火示范和練習(xí)。這種傳統(tǒng)的防火演習(xí)不但會(huì)造成環(huán)境污染、資源浪費(fèi),而且如果使用不當(dāng)還會(huì)造成不必要的傷害。
為了解決這種真實(shí)消防演練的弊端,同時(shí)又要達(dá)到消防訓(xùn)練的目的,虛擬滅火已成為熱點(diǎn)話題?,F(xiàn)在已有很多人員及機(jī)構(gòu)從事相關(guān)研究,比如中國電子科技集團(tuán)第三十八研究所的模擬消防演練系統(tǒng)、北京超互動(dòng)科技有限公司的模擬報(bào)警演練系統(tǒng)等,這些系統(tǒng)解決了現(xiàn)實(shí)中消防培訓(xùn)所帶來的弊端,一定程度上達(dá)到了消防訓(xùn)練的目的,但是此類系統(tǒng)都是基于二維場景設(shè)計(jì),使用者在使用過程中沒有很好的沉浸感。為了讓使用者有更強(qiáng)烈的沉浸感。最大限度地模擬消防訓(xùn)練氛圍,本文介紹了一種基于三維立體技術(shù)的虛擬滅火系統(tǒng)。
虛擬滅火系統(tǒng)采用了以計(jì)算機(jī)技術(shù)為核心的現(xiàn)代高科技,能夠生成逼真的視覺、聽覺一體化的特定虛擬場景,再使用被動(dòng)立體投影的方式將虛擬場景構(gòu)建成三維效果,接著通過交互的方式與構(gòu)建出的虛擬場景進(jìn)行交互,讓使用者產(chǎn)生身臨其境的感覺。
依據(jù)虛擬滅火系統(tǒng)的功能需求做出功能設(shè)計(jì)規(guī)劃,如圖1所示。系統(tǒng)以多個(gè)三維場景模型為基礎(chǔ),逐步添加火焰生成、滅火交互、3D渲染以及立體等模塊,共同構(gòu)成虛擬滅火系統(tǒng)。
圖1 功能設(shè)計(jì)規(guī)劃
虛擬現(xiàn)實(shí)[1]是一種基于模型的活動(dòng),在虛擬訓(xùn)練、漫游等領(lǐng)域廣泛應(yīng)用[2],它包括建立模型、對(duì)模型進(jìn)行試驗(yàn)、對(duì)試驗(yàn)所產(chǎn)生的模型行為進(jìn)行分析處理。所以三維場景幾何模型是三維虛擬滅火系統(tǒng)的構(gòu)建基礎(chǔ),三維場景搭建是系統(tǒng)的基本要求,也是其他核心功能模塊的基礎(chǔ)。
2.1.1 三維場景建模
為了給用戶提供良好的體驗(yàn)使其感覺身臨其境,在進(jìn)行三維場景建模[3]時(shí)就要求能夠?qū)鼍氨普娴仫@示出來,這就在技術(shù)上提出了很高的要求。為了能夠達(dá)到這一效果,必須在場景模型搭建過程中考慮場景中每個(gè)物體的幾何特性、物體之間的空間位置關(guān)系,以及每個(gè)物體特有的材質(zhì)、紋理、顏色和光照效果。對(duì)于物體的幾何特性,可以通過給每個(gè)物體抽象出一個(gè)包圍盒,在通過給包圍盒設(shè)置長、寬、高來間接地設(shè)置物體的幾何特性。在現(xiàn)實(shí)生活中,每個(gè)物體都處于不同的空間位置,物體與物體之間都有著空間位置關(guān)系,所以在進(jìn)行虛擬場景搭建時(shí),保持相對(duì)位置是營造高真實(shí)感場景的重要環(huán)節(jié)。在3DMAX中,可以通過軟件中的三視圖窗口進(jìn)行觀察和改動(dòng),確保場景中的每一個(gè)物體都在它應(yīng)該存在的地方,達(dá)到場景布局合理真實(shí)的目的,給使用者以真實(shí)的感覺。生活中每一個(gè)物體都有其特有的屬性,比如一個(gè)物體是什么材質(zhì)的、表面是什么樣子的、是不是透明的以及反不反光等,根據(jù)這些屬性能夠很容易地辨別出不同的物體。在場景搭建過程中,必須給每個(gè)物體設(shè)置材質(zhì)、紋理等屬性,以便獲得真實(shí)感。以上這些都能夠在3DMAX中實(shí)現(xiàn),在完成場景建模之后,保存并導(dǎo)出模型的mesh文件。
2.1.2 三維場景渲染
傳統(tǒng)3D應(yīng)用的開發(fā)是通過調(diào)用API傳送幾何體信息,再通過API調(diào)用來通知GPU進(jìn)行渲染工作[3],之后的每一幀畫面都要進(jìn)行類似的工作??梢钥闯?,這種渲染方式十分繁瑣復(fù)雜,將大量時(shí)間用在了幾何體的操作之中,不利于整體效率的提升。因此,可以采用OGRE渲染引擎進(jìn)行場景的渲染工作。
面向?qū)ο蟮膱D形渲染引擎[4](Object-oriented Graphics Rendering Engine,OGRE)三維渲染引擎模型中,使用了場景樹管理整個(gè)場景的內(nèi)容。OGRE對(duì)底層基本圖形的API操作進(jìn)行了封裝,所以不需要對(duì)繁瑣的圖形進(jìn)行操作,只需要通過場景圖接口維護(hù)場景結(jié)構(gòu),節(jié)省了很多時(shí)間。在OGRE中采用了“場景隊(duì)列”的方式對(duì)場景中的不同部分進(jìn)行渲染排序。
所謂場景隊(duì)列就是設(shè)置多個(gè)有序隊(duì)列,每個(gè)隊(duì)列都有一個(gè)優(yōu)先級(jí),OGRE在渲染時(shí)按照優(yōu)先級(jí)大小進(jìn)行渲染。三維模型導(dǎo)入[5]OGRE程序后,OGRE就會(huì)按照自身的渲染流程對(duì)三維模型進(jìn)行渲染。為了保證渲染效果和渲染速度,在3DSMAX中采用了烘焙技術(shù),就是把需要顯示出來的光照等視覺信息事先烘焙成貼圖,然后在進(jìn)行場景渲染時(shí)直接把烘焙后的貼圖再貼回到場景實(shí)體模型上,這樣在渲染時(shí)就不要計(jì)算顏色信息,加快了渲染的速度。
除了眼睛,眉毛的變化也是重要的面部表情之一。眉毛的變化能傳達(dá)出更多的情感,如生氣、驚恐、焦急、狂喜等。例如,聲音變得低沉的同時(shí),皺一下眉頭,這樣就表達(dá)出痛苦的意思;聲音高昂的同時(shí)眉毛上挑,就表達(dá)出興奮。演員可以在臺(tái)下對(duì)著鏡子來提升自己面部表情的表現(xiàn)能力。
經(jīng)過對(duì)場景模型的處理和烘焙,得到三維場景的mesh模型文件,本系統(tǒng)使用OgreMAXS-cene插件讀取mesh模型。
OgreMAXScene插件能夠讀取scene文件,而scene文件包含了諸多mesh文件名和mesh文件的位置信息、旋轉(zhuǎn)量信息、縮放信息等,讀取scene文件之后,場景中的所有對(duì)象都具有初始位置等信息。
讀取scene文件的核心代碼如下:
m- MAXScene->Load(filename,window,Ogre-MAX::OgreMAXScene::NO-OPTIONS,m-SceneManager);
其中,m-MAXScene為讀取scene文件的對(duì)象;filename為scene文件名;window為渲染窗口對(duì)象。
這種方法實(shí)現(xiàn)代碼簡單,可以大量導(dǎo)入場景,適合于場景中包含大量對(duì)象或者場景需要批量導(dǎo)入的情況,所以三維虛擬滅火系統(tǒng)選擇使用OgreMAXScene插件批量讀取mesh模型。為了更好地達(dá)到模擬生活生產(chǎn)的場景,本系統(tǒng)搭建了家庭電器起火、社區(qū)垃圾箱起火、工廠設(shè)備起火、廚房爐灶起火、生產(chǎn)區(qū)起火等多種不同的三維場景用于模擬訓(xùn)練。
為了讓使用者在模擬滅火過程中能有更真實(shí)的體驗(yàn),系統(tǒng)對(duì)滅火器噴霧效果進(jìn)行模擬,通過噴霧和火焰之間的交互反應(yīng),更真實(shí)地模擬出滅火過程。
2.2.1 火焰模擬方法對(duì)比
對(duì)于火焰等不規(guī)則模糊的自然景物模擬,目前主要分為3種,即基于紋理技術(shù)的方法、數(shù)學(xué)物理方法和粒子系統(tǒng)的方法。使用基于N-S方程和紋理映射的火焰模擬方法來實(shí)現(xiàn)火焰模擬,簡化了外力項(xiàng)的計(jì)算并使用紋理映射技術(shù)渲染火焰,提高了計(jì)算速度,可以實(shí)現(xiàn)實(shí)時(shí)的火焰動(dòng)畫效果。但是目前只是在二維層面上模擬火焰[5]。
相對(duì)于數(shù)學(xué)物理方法和紋理映射的方法,粒子系統(tǒng)總體具有相同的表現(xiàn)規(guī)律,個(gè)體卻隨即表現(xiàn)出不同特征的大量顯示元素構(gòu)成的集合[6],在模擬火焰噴霧等場景時(shí),根據(jù)模擬場景的特點(diǎn),設(shè)置好粒子的屬性,并對(duì)眾多的粒子進(jìn)行維護(hù)和顯示,這在三維場景中都能夠得到實(shí)現(xiàn),所以本系統(tǒng)中的三維火焰與滅火器噴霧均采用粒子系統(tǒng)實(shí)現(xiàn),不同的是火焰的粒子系統(tǒng)主要突出顯示其不同區(qū)域、不同顏色邊緣效果的展示。
為此本文設(shè)計(jì)了2個(gè)分別具有顏色衰減器和線性力作用的粒子系統(tǒng),其工作原理是先初始化粒子,賦予粒子不可變和可變的多種屬性,如形狀、位置、生命值、衰減速率、速度和加速度、顏色和大小等。在火焰或一定噴霧所經(jīng)過的區(qū)域,按照速率隨機(jī)地產(chǎn)生粒子,生成的粒子按照自己的運(yùn)動(dòng)速度等參數(shù)不停地運(yùn)動(dòng),一定時(shí)間后,粒子的生命值降為0,說明該粒子生命期已結(jié)束,就將該粒子刪除,隨后生成新粒子。周而復(fù)始這個(gè)過程,通過眾多粒子的合作,就可以模擬相應(yīng)的效果了。粒子系統(tǒng)的工作流程如圖2所示。
圖2 粒子系統(tǒng)工作流程
2.2.2 對(duì)于粒子系統(tǒng)的改進(jìn)
在傳統(tǒng)三維粒子系統(tǒng)中為了讓每一個(gè)粒子看上去更象一個(gè)個(gè)的小火星,可以采用紋理映射技術(shù)[7],加上顏色的混色處理,就可以生成較為真實(shí)的火焰模型。不同的紋理圖案可以產(chǎn)生不同效果的火焰。這種方法雖然可以簡單地模擬出火焰的效果,但是由于每個(gè)粒子都采用同樣的貼圖,在多個(gè)粒子重疊之后所呈現(xiàn)出來的效果只是相同貼圖重疊部分經(jīng)顏色混合處理后得到的效果,無法表現(xiàn)火焰的具體細(xì)節(jié)層次,而且火焰的邊界是由若干粒子貼圖的邊界重疊得到的,并不能很好地表現(xiàn)實(shí)際火焰的邊界。這些都使得由紋理映射技術(shù)模擬出的火焰效果不能達(dá)到真實(shí)火焰的效果。因此采用紋理動(dòng)畫的方式來替代傳統(tǒng)粒子系統(tǒng)中的紋理映射。由粒子發(fā)生器產(chǎn)生若干個(gè)粒子,為每一個(gè)粒子貼上一幅不同的紋理貼圖,這些紋理貼圖都是在火焰場景中一幀一幀截取得到的區(qū)域面片,由于每一幀畫面都來自于真實(shí)的火焰場景,所以火焰的細(xì)節(jié)層次和邊界都是真實(shí)的,這樣就保證了火焰模擬的真實(shí)性。然后將每個(gè)粒子的生存周期設(shè)置得很短,保證在下一個(gè)紋理貼圖顯示出來之前,上一個(gè)貼圖已經(jīng)消失,保證火焰畫面的連續(xù)性[8]。這樣按一幀一幀的順序連續(xù)顯示就使得火焰的波動(dòng)看起來很真實(shí)。改進(jìn)前、后火焰模擬效果如圖3所示。
圖3 改進(jìn)前后火焰模擬效果展示
設(shè)計(jì)三維虛擬滅火系統(tǒng)的目的是能通過投影模擬出真實(shí)火災(zāi)滅火場景,所以需要通過立體顯示技術(shù)將構(gòu)建的模型場景立體化顯示出來,創(chuàng)造出逼真和更有沉浸感的3D場景,讓使用者具有身臨其境的感覺,仿佛置身于真實(shí)的火災(zāi)場景中,以達(dá)到更好的滅火培訓(xùn)效果。
立體的視覺原理是由于人類的眼睛相距有一定的距離,所以在觀察一個(gè)三維物體時(shí),兩眼觀察到的物體圖像之間存在著像差,由于這個(gè)像差的存在,人類大腦可以感到一個(gè)三維世界的深度立體變化。
根據(jù)立體成像原理,目前最為普遍的成像方式有主動(dòng)式立體顯示和被動(dòng)式立體顯示2種。被動(dòng)立體技術(shù)是將影像信號(hào)輸出到信號(hào)分轉(zhuǎn)設(shè)備上,然后接到2臺(tái)垂直疊加的投影機(jī),用2臺(tái)投影機(jī)同時(shí)投射一幅影像,1臺(tái)投影機(jī)投右眼影像,1臺(tái)投影機(jī)投左眼影像。2臺(tái)投影機(jī)均要配置偏振鏡片,通過采用不同的極化方向,偏光鏡將發(fā)散光線分成水平和垂直位面來完成左右眼信息的區(qū)分。主動(dòng)立體顯示就是用一個(gè)投影機(jī)投射圖像,某瞬間投射左眼看到的信號(hào),下個(gè)瞬間投射右眼看到的信號(hào)。當(dāng)投射左眼信號(hào)的瞬間,從工作站發(fā)出一個(gè)控制信號(hào)去控制主動(dòng)立體眼鏡的左鏡片,使它打開,這個(gè)時(shí)候右眼的鏡片關(guān)閉;反之,當(dāng)投射右眼圖像時(shí),左眼的鏡片是關(guān)閉的。總之,主動(dòng)立體的眼鏡是被控制的。因?yàn)楸粍?dòng)立體的眼鏡成本低,易于維護(hù),對(duì)圖形發(fā)生主機(jī)要求低,故本系統(tǒng)在設(shè)計(jì)三維虛擬滅火時(shí)采用被動(dòng)立體投影。
在系統(tǒng)中設(shè)置2個(gè)攝像機(jī),用于模擬左右兩只眼睛,兩只眼睛錯(cuò)開一段距離,并且同時(shí)盯在同一焦點(diǎn),從而繪制出具有視覺差的2個(gè)場景效果,然后通過裝有偏振片的2個(gè)投影儀投射到同一投影幕上,再通過偏振眼睛觀看即可產(chǎn)生立體效果。主要代碼如下:
在模擬訓(xùn)練過程中,訓(xùn)練者在虛擬場景中的漫游、對(duì)虛擬噴頭的操縱都必須通過交互來實(shí)現(xiàn),交互的質(zhì)量直接影響了模擬訓(xùn)練的效果。為使操作者高度沉浸在建立的虛擬場景中,用自然、方便的方式進(jìn)行交互,本系統(tǒng)在3D立體顯示技術(shù)的基礎(chǔ)上引入無線交互設(shè)備,并設(shè)計(jì)了場景漫游與逃生、噴頭控制交互2種主要交互過程。場景漫游與逃生通過對(duì)上下左右等按鍵進(jìn)行消息響應(yīng),改變攝像機(jī)的位置,實(shí)現(xiàn)攝像機(jī)的前后左右和上下移動(dòng),達(dá)到場景漫游的效果,并且以第一視角實(shí)現(xiàn)逃生過程中的場景模擬。為真實(shí)模擬噴頭的使用,系統(tǒng)通過將飛鼠的二維運(yùn)動(dòng)模擬成三維空間運(yùn)動(dòng),有效地模擬噴頭旋轉(zhuǎn)、移動(dòng)等操作,并根據(jù)噴頭噴射的方向?qū)鹧孢M(jìn)行交互,若噴射到火焰邊緣,則火焰往另一邊偏,若持續(xù)噴射火焰根部一段時(shí)間,則火焰逐漸熄滅。
經(jīng)過三維場景搭建所得的場景如圖4所示,圖4分別由左、右2個(gè)投影儀投影在屏幕上,使用者佩戴3D眼睛可以感覺到具有三維效果的場景。
圖4 三維效果場景圖
滅火效果如圖5所示。
圖5 滅火效果
使用粒子系統(tǒng)等關(guān)鍵技術(shù)模擬出火焰,通過按下虛擬滅火器的開關(guān)控制虛擬噴頭噴出噴霧,判斷噴霧與火焰根部的位置,如果噴霧對(duì)準(zhǔn)火焰根部噴射,火勢漸漸變小,一段時(shí)間后火焰熄滅。
目前,三維立體技術(shù)正處于高速發(fā)展階段,它因具有能夠真實(shí)地再現(xiàn)現(xiàn)實(shí)生活場景的特點(diǎn),廣泛應(yīng)用于軍事、醫(yī)療、教學(xué)、娛樂等諸多領(lǐng)域,能夠給人們以不同的視覺體驗(yàn),為人們提供服務(wù)。
本系統(tǒng)結(jié)合了傳統(tǒng)方式的真實(shí)性以及二維虛擬消防系統(tǒng)的安全、簡單以及方便操作等特點(diǎn),相比于二維系統(tǒng)脫離了平面顯示的不真實(shí)性,讓使用者在高真實(shí)感三維虛擬的場景中進(jìn)行消防訓(xùn)練。
[1] 張占龍,羅辭勇,何 為.虛擬現(xiàn)實(shí)技術(shù)概述[J].計(jì)算機(jī)仿真,2005,22(3):1-3,7.
[2] 張 陽,李 琳,劉曉平.面向?qū)崟r(shí)測繪的場景漫游系統(tǒng)[J].合肥工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2013,36(6):667-670,717.
[3] 余 燁,劉曉平.面向VR系統(tǒng)的三維模型轉(zhuǎn)換工具[J].工程圖學(xué)學(xué)報(bào),2008(5):72-78.
[4] 夏力前,汪元卉.3D游戲場景中的火焰效果的真實(shí)模擬[J].電腦與電信,2013(10):65-67.
[5] 劉俊芳.面向VR系統(tǒng)的三維場景的建立和導(dǎo)入[J].科技傳播,2010(4):121-122.
[6] 金 陽,張 宣,李青元.三維渲染引擎OGRE與OSG的比較綜述[J].數(shù)字技術(shù)與應(yīng)用,2011(10):175-177.
[7] 王 俊,汪繼文.基于N-S方程和紋理映射的實(shí)時(shí)火焰模擬[J].計(jì)算機(jī)與現(xiàn)代化,2013(12):68-71.
[8] 趙春霞,張 艷,戰(zhàn)守義.基于粒子系統(tǒng)方法的三維火焰模擬[J].計(jì)算機(jī)工程與應(yīng)用,2004(28):73-76.