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