何雋 金志泉
摘 ?要: 針對船舶火災成因的特殊性、消防訓練的局限性和危險性,構建了船舶虛擬消防訓練系統(tǒng),供船員進行安全有效的人機交互船舶滅火訓練。系統(tǒng)采用3dsMax搭建船舶駕駛室、主機艙、住艙和滅火器等模型,使用Unity 3D引擎開發(fā)船舶虛擬消防訓練軟件,粒子系統(tǒng)逼真模擬各種成因船舶火災的發(fā)生和撲滅,利用C#語言實現(xiàn)人機交互功能。結果表明,此虛擬系統(tǒng)基本概括了船舶上所有火災類型,船員通過多次訓練,可迅速做出判斷,有效撲滅火災,在虛擬訓練過程中做到了接近百分百安全。
關鍵詞: Unity 3D;船舶虛擬消防訓練;火災成因;粒子系統(tǒng)
中圖分類號: TP391.9 ? ?文獻標識碼: A ? ?DOI:10.3969/j.issn.1003-6970.2019.05.010
本文著錄格式:何雋,金志泉. Unity 3D船舶虛擬消防訓練系統(tǒng)滅火功能設計與實現(xiàn)[J]. 軟件,2019,40(5):4752
【Abstract】: In view of the particularity of ship fire causes, the limitation and danger of fire training, a ship virtual fire training system is constructed for crew to carry out effective man-machine interactive fire fighting training. The system uses 3dsMax to build ship engine room, fire extinguisher and other models, and employs Unity 3D engine to develop ship virtual fire fighting training software. Particle system simulates the occurrence and extinguishing of ship fires of various causes, and the C# language is used to realize the human-computer interaction function. The results show that the virtual system basically summarizes all types of fire on ships. Through training, the crew can quickly make judgments and effectively extinguish the fire. It assures nearly 100% safety in the virtual training process.
【Key words】: Unity 3D; Virtual fire training for ships; Cause of fire; Particles system
0 ?引言
船舶火災事故占到了海上船舶事故的11%,一旦發(fā)生會造成極大的損失和人員傷亡。船上的危險源較多,火災成因復雜,撲救難度大。因此,船員必須熟練消防程序,面對船舶火災事故處變不驚,積極應對。但目前在真實環(huán)境中進行的船舶消防訓練受到場地、資金和時間的局限,效果并不理想,還可能會出現(xiàn)裝備損失和人員傷亡的危險狀況[1]。
虛擬現(xiàn)實技術的迅猛發(fā)展正好為船舶火災消防訓練提供了一個方案,就是通過計算機營建具有3I(沉浸性Immersion、交互性Interaction、想象性Imagination)特點的虛擬船舶環(huán)境和火災現(xiàn)場[2],使船舶消防人員在近似實戰(zhàn)的逼真環(huán)境中進行大量具有實效的模擬訓練。上世紀七十年代起,美國為首的發(fā)達國家已對船舶火災虛擬訓練系統(tǒng)開展了廣泛的研究[3-4]。國內,各高校研究消防模擬已取得一定成果[5],但很少涉及針對不同類型火災的形成和撲滅機制。
本系統(tǒng)采用被廣泛運用于游戲和虛擬現(xiàn)實開發(fā)[6],并具有兼容操作系統(tǒng)、跨平臺發(fā)布并部署、人機交互功能強大等特點的Unity 3D三維游戲引擎進行開發(fā)[7],從研究船舶火災成因出發(fā),用粒子系統(tǒng)模擬各種不同類型的火焰,選用針對性的設備有效撲滅火災,從而實現(xiàn)安全有效的船舶虛擬消防訓練。
1 ?船舶虛擬消防訓練系統(tǒng)總體設計
1.1 ?系統(tǒng)功能分析
船舶虛擬消防訓練系統(tǒng)分為全船漫游、消防設備選擇和消防訓練3個部分。全船漫游通過操作控制虛擬消防人員行走,熟悉船舶的各個區(qū)域的過程。消防設備選擇使用是對多種消防設備器材的功能理解,以及對其操作程序的熟練。消防訓練則包含了偵查火災情況、選取適合滅火的設備、使用相應設備滅火操作,以及在火災現(xiàn)場滅火的同時,拾獲重要資料和救援生命體對象等。船舶虛擬消防訓練所在的區(qū)域有住艙、廚房、主機艙、機房和駕駛室等。這些都是在系統(tǒng)中火災發(fā)生的地點,并且每次任務啟動后,都會根據(jù)實際情況在相關地點隨機產生2-3個不同的火災情況,等待消防人員進行決策。雖然這些區(qū)域布局不同,火災成因不同,使設備選取和滅火過程有所區(qū)別,但是消防訓練的流程基本上是通用的:任務提示→災害偵查→設備選取→滅火操作→滅火成功,如下圖1所示:
1.2 ?系統(tǒng)整體設計
以中國第三代航天遠洋測量船遠望7號的外形,使用3dsMax軟件建立三維模型。同時建立三維消防人員模型,進行骨骼綁定和行走動畫制作,再搭建出住艙、廚房、主機艙、機房和駕駛室等三維實體模型,制作消防設備三維模型。利用Unity 3D軟件,構造船舶的三維虛擬場景。利用C#語言的功能,提供交互功能,通過鼠標和鍵盤,用代碼實現(xiàn)受訓人員控制虛擬消防人員漫游整個船體,熟悉消防場景,到特定區(qū)域獲取消防設備,學習針對不同火災成因,使用不同的消防設備及相關操作方法。
船舶火災從形成原因和燃燒物的不同來區(qū)分,主要有以下幾個類型。用于船舶機械設備的潤滑油屬于易燃、可燃液體,噴滴在船上機器的蒸汽管、排氣管或者鍋爐外殼等熱表面,可形成液體火災(以下簡稱液體火),另外還有燃油泄露或廢油滴漏等情況形成的火災也屬于此類。如有金屬互相撞擊摩擦產生的火星,遇到石油氣體或者其他可燃性氣體發(fā)生的火災等稱為氣體火災(以下簡稱氣體火),容易發(fā)生爆炸。機艙內存在大量的電器設備,屬于帶電物體和精密儀器,如發(fā)生線路短路、電線老化或電機過載過熱等情況,引起電器設備著火,稱為電器火災(以下簡稱電器火)。易燃固體物品,如木屑、紙張、衣物等,遇到火星燃燒或者沾染油污后通風不良自燃等情況,則是固體火災(以下簡稱固體火)。還有一些可燃金屬,如鉀、鈉、鎂燃燒形成的火,稱為金屬火災(以下簡稱金屬火)。船舶火災因為船艙載荷集中,散熱困難,并且容易蔓延,因此要在火災發(fā)生時及時查明火災類型,準確快速選擇對應的消防設備,盡快開展滅火行動。其中,最重要的是對滅火器消進行合理選擇,規(guī)范使用。滅火器的使用規(guī)程見表1。
除了滅火器,當然還要配合使用其他設備。如消防戰(zhàn)斗服,可用來在滅火過程中對軀干、手臂和腿進行熱防護;呼吸器在充滿濃煙和毒氣的環(huán)境下可提供給消防人員充足的氧氣;測溫儀,可對火災發(fā)生時周圍溫度進行精確測量;消防斧則切斷蔓延的火勢,或劈開變形的門窗;消防水管和水槍可以用來撲救已經(jīng)蔓延的火勢。
對應選擇的消防設備進行滅火的過程中,系統(tǒng)UI界面會給出相關提示正確或者指出錯誤的功能,引導受訓者作出正確的判斷,在虛擬系統(tǒng)中完成相應的消防任務。
2 ?系統(tǒng)實現(xiàn)
在本消防訓練系統(tǒng)中,包含多個艙室、多種成因的火災,使用的消防滅火設備也不盡相同。由于篇幅限制,在本系統(tǒng)實現(xiàn)的介紹中,重點以氣體火災的為例,闡述氣體火焰粒子和二氧化碳噴霧粒子的模擬,及操作二·氧化碳滅火器滅火的過程。
2.1 ?場景搭建和滅火器制作
場景是虛擬現(xiàn)實系統(tǒng)研究的基礎,整個船體作為主場景,然后選擇主機艙作為模擬氣體火災發(fā)生的次場景。首先使用3dsMax按照比例完成主機艙內部三維模型和干粉滅火器模型[8]。干粉滅火器的罐體主要是采用圓柱體,轉換為可編輯多邊形,將圓柱頂端作為選擇面,插入5 mm,擠出15 mm,再次插入插入2 mm,選擇中心面擠出,擠出120 mm,即可形成罐口。罐子肩部和底角部分,可全選圓柱邊線,右鍵選擇邊面切角,點擊第二行,連接邊分段選擇5即可完成圓滑的效果。罐體肩頸底部及切角屬性見圖2所示。其他部分類似,不再贅述。
接下來按照真實機艙和滅火器照片制作貼圖,再渲染得到具有貼圖的三維模型,最后導入到場景中準備進行交互。將干粉滅火器設備放到場景中,并適當調整滅火器大小以便使用,如圖3所示。
2.2 ?粒子特效實現(xiàn)
粒子系統(tǒng)最先由Reeves WT[9]在1983年提出,是至今最成功地模擬不規(guī)則物體的算法之一,可以較好地還原火焰、煙霧、水汽、爆炸、水流等自然現(xiàn)象[10-11]。粒子系統(tǒng)中的粒子具有形狀、大小、顏色、透明度、運動速度、運動方向和生命周期等屬性,可以模擬隨時間不斷產生、生長和消亡的動態(tài)的粒子效果,如火焰、煙霧和云霧等。
2.2.1 ?火焰特效
火災的本質是燃燒,是由燃料著火形成的,方式可以分為自著火和強迫著火[12]。在主機艙場景中,發(fā)生可燃性氣體如天然氣、甲烷、乙烷、丙烷、氫氣等泄露,遇到金屬摩擦撞擊產生的火星,就可能生成氣體火,屬于強迫著火。本系統(tǒng)設計的火焰特效主要是表現(xiàn)著火后,氣體火焰的外在表征。但是氣體火焰形狀和分布及其不規(guī)則,形式變化多端,不能用常規(guī)的幾何模型來進行模擬。而Unity自帶的粒子系統(tǒng)可以比較好地描述這種可燃氣體與空氣中的氧氣混合后迅速轉化為燃燒產物的化學過程,及過程中出現(xiàn)的可見光和煙霧等的物理表現(xiàn),并著重表現(xiàn)后者。
首先模擬真實的氣體火焰可見光,先創(chuàng)建粒子系統(tǒng)。其次調整粒子系統(tǒng)面板中的基本模塊,調整模塊中的初始生命周期(Start Lifetime)參數(shù)[13]為2.21,讓粒子產生的多一點,調整初始尺寸(Start Size)參數(shù)為3.97,讓粒子的尺寸大一些,調整初始速度(Start Speed)參數(shù)為4.79,讓粒子運行的速度小一點,形成氣體火焰可見光的湍流現(xiàn)象。然后找一個火焰圖案的貼圖,,背景是純黑的或者透明,在Render模塊中的Material中把貼圖形成的材質球拖上去,并勾選(Color over Lifetime)在顏色中調整漸變色,為紅->黃->紅,最后一個紅色調整一下透明度。當火焰粒子達到一定規(guī)模后會出現(xiàn)煙霧,煙霧粒子的模擬對于整體火焰粒子特效的表現(xiàn)是起到畫龍點睛的作用的。模擬煙霧的特效與火焰可見光特效不同點是煙霧的位置和煙霧的顏色,煙霧不像火焰可見光是從可燃氣體的根部開始出現(xiàn)的,一般會把煙霧粒子初始化的位置放在火焰可見光位置的三分之一處[14],這樣模擬出來的粒子特效更加逼真,使得整體效果更加接近真實情況,模擬過程見圖4所示。
2.2.2 ?噴霧特效
噴霧特效主要表現(xiàn)的是二氧化碳滅火器噴射液態(tài)二氧化碳粒子的特效。和火焰相比,噴霧特效的制作過程與前者有異同點。不同在于,氣體火焰粒子發(fā)射的方向是向上的,而滅火器的使用,應該是站在上風口對著下風口噴射,也就是說二氧化碳從滅火器中噴出的方向是向前的;且噴射距離為2米,受到重力影響,實際方向是略向下,噴射盡頭呈拋物線狀。相同的是,創(chuàng)建粒子系統(tǒng)后,也需要調整粒子系統(tǒng)面板上的初始生命周期(Start Lifetime)、初始尺寸(Start Size)和初始速度(Start Speed)這三個參數(shù)。所以,先調整噴霧粒子的發(fā)射方向,然后再調整其基本模塊參數(shù)。
本系統(tǒng)研究的二氧化碳滅火器的滅火原理是隔絕氧氣和冷卻降溫,二氧化碳滅火的主要作用是沖淡氧,降低空氣中氧濃度。同時液態(tài)二氧化碳從鋼瓶釋放出來,壓力突然降低,迅速吸熱蒸發(fā),覆蓋在燃燒物上的干冰氣體,也起到一定的冷卻作用,從而達到滅火的目的。因此,在二氧化碳噴霧特效的表現(xiàn)上還需要加上煙霧效果,具體效果見圖5所示。
2.3 ?交互實現(xiàn)
在系統(tǒng)的操作者和系統(tǒng)中的虛擬物品之間建立起聯(lián)系稱之為人機交互,是系統(tǒng)功能實現(xiàn)的一個重要環(huán)節(jié)。本系統(tǒng)主要是實現(xiàn)在虛擬船舶的機艙中觀察火災原因,并使用相應的滅火設備進行滅火的過程。這里討論的是用二氧化碳滅火器對氣體火的撲滅,根據(jù)使用規(guī)程,當手持滅火器到達火災附近2米的位置,應該先拔出保險銷,將噴霧對準火源根部噴射,直到火苗熄滅,滅火任務完成。
2.3.1 ?拔出保險銷
首先建立一個空對象用來存放代碼,保險銷在滅火的過程中是很重要的一環(huán),只有拔出后,才能按下壓手瓣,拔出保險銷可用移動游戲對象的函數(shù)transform.Translate(vector3 offset)來實現(xiàn)[15]。拔出保險銷的前提是獲取保險銷,定義一個游戲對象用public反射出去,把保險模型銷拖拽上去,然后用GameObject .Find()獲取到它的名稱,再用移動函數(shù)transform.Translate()調整保險銷模型的移動速度。新建一個cube讓來讓保險銷移動到cube的位置上,因為在虛擬仿真的場景中拔出保險銷動作中,如果讓保險銷直接消失會產生突兀并且不真實感,所以建立一個cube放在場景中會使拔出保險銷的過程更加真實,讓保險銷移動的位置與cube相同,代碼設計如下:
void Update () {
if (Input.GetMouseButtonDown (1)) {
cub1.transform.position = tb.transform. position;
}
}
再單擊鼠標右鍵,使保險銷移動的位置與cube的位置一致。另外,cube放在場景中會影響美觀,因此將它隱藏。
2.3.2 ?發(fā)射噴霧
在滅火設備使用規(guī)范中,噴霧必須對準火源根部噴射,在Unity中就是噴霧粒子移動,與火焰粒子發(fā)生碰撞,可使用移動游戲對象的函數(shù)transform. Translate(vector3 offset)來對噴霧粒子做移動,建立C#腳本掛在在噴霧粒子對象上。
在默認情況下,拔出保險銷后,噴霧粒子不應該立即發(fā)射,而是操作者點擊某一按鍵發(fā)生交互后,噴霧粒子才出現(xiàn)。所以應使用particle.Stop ()先停止噴射,再選擇F鍵作為激活噴霧粒子的按鍵,代碼設計如下:
if (Input.GetKey (KeyCode.F)) {
particle.Play();//按下F鍵后,噴霧粒子開始發(fā)射
}
2.3.3 ?滅火
在滅火的過程中,經(jīng)滅火器噴出的噴霧粒子和火焰粒子的碰撞發(fā)生之后,火焰粒子應該被銷毀,具體實現(xiàn)代碼如下:
Destroy(pardter,7f);//7f之后銷毀火粒子
在噴霧的粒子完成一次播放之后,也應該被銷毀。使用GetComponentsInChildren
bool allStopped = true;
foreach (ParticleSystem ps in particleSystems)
{
if (!ps.isStopped){
allStopped = false;
}
if (allStopped)
GameObject.Destroy(gameObject);
}
這樣,所有的噴霧粒子在播放完成之后,全部自動銷毀。
3 ?結論
本文對船舶火災情況和滅火流程進行了分析,并給出撲滅各種成因的火災所使用滅火設備的對比,結合3dsMax建模和Unity 3D引擎技術,實現(xiàn)了使用二氧化碳滅火器對氣體火災進行滅火操作的人機交互虛擬訓練系統(tǒng)。由于篇幅限制,其他形式的火災和滅火設備等不在此文一一表述。該系統(tǒng)用于船舶虛擬消防訓練時,可以節(jié)約訓練成本,提高安全性和訓練效果,有良好的應用前景。
參考文獻
[1] 吳秉慧, 徐嘉歡, 高超禹等. 小型自動滅火機器人[J]. 軟件, 2015, 36(11): 56-60.
[2] TATE D L, SIBERT L, KING T. Virtual environments for shipboard firefighting training[C]. In: Proceedings of IEEE?1997, Virtual Reality Annual International Symposium, 1-5 Mar. 1997, Albuqutrque, NM, USA: 61-68, 215.
[3] 顧雅涵, 孫博文, 李嘉明等. 基于機器學習的 VR 火災逃生系統(tǒng)尋路算法[J]. 軟件, 2018, 39(4): 86-91.
[4] Ernst J J, Musto D J, Rogers W, et al. Fire fighting trainer having foam detector. US, 1993.
[5] 張茜. 船舶真火模擬訓練控制系統(tǒng)的研究[D]. 鎮(zhèn)江: 江蘇大學, 2017.