夏禹 胡以懷 方云虎 張成 芮曉松
摘要:針對(duì)船舶機(jī)損事故在現(xiàn)實(shí)中難以重現(xiàn)的特殊性和危險(xiǎn)性,通過(guò)建立船舶機(jī)損事故現(xiàn)場(chǎng)模型,綜合利用3dsMax和Unity3D軟件設(shè)計(jì)開(kāi)發(fā)了船舶機(jī)損事故案例虛擬仿真軟件,以3D虛擬播放的方式展現(xiàn)各種機(jī)損場(chǎng)景。著重介紹了虛擬仿真軟件的開(kāi)發(fā)技術(shù)和實(shí)現(xiàn)過(guò)程,包括場(chǎng)景搭建和缸套碎裂制作、軟件特效開(kāi)發(fā)、場(chǎng)景漫游和渲染設(shè)置等,簡(jiǎn)化了UI界面設(shè)計(jì)和視頻播放自動(dòng)化的方法,起到了很好的船舶事故教學(xué)培訓(xùn)效果。
關(guān)鍵詞:Unity3D;船舶機(jī)損事故;3ds Max模型;虛擬仿真
中圖分類號(hào):TP391? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2021)10-0001-03
1 背景
在船舶系統(tǒng)中主機(jī)艙設(shè)備是事故發(fā)生率最高的部位,且其故障而引發(fā)的事故往往是較大事故,會(huì)造成較大的經(jīng)濟(jì)損失[1]。2015年12月3日,東莞市海龍疏浚工程有限公司所屬的無(wú)動(dòng)力工程船“海龍浚1號(hào)”輪由“大躍”輪拖帶從山東濰坊駛往遼寧盤(pán)錦,在大連普蘭店灣附近水域拋錨避風(fēng)期間,“海龍浚1號(hào)”輪進(jìn)水沉沒(méi)。據(jù)調(diào)查,事故原因與該工程船遭遇大風(fēng)浪,通風(fēng)管沒(méi)有及時(shí)關(guān)閉,海水通過(guò)通風(fēng)管灌入機(jī)艙致使船舶儲(chǔ)備浮力喪失有關(guān)。另外還存在拖帶人員處置經(jīng)驗(yàn)不足、應(yīng)急預(yù)案不全面的問(wèn)題。船舶機(jī)損事故類型多,成因復(fù)雜,應(yīng)對(duì)和處理難度大,受場(chǎng)地、時(shí)間等因素制約且不存在真實(shí)的船舶應(yīng)急事故處理的訓(xùn)練現(xiàn)場(chǎng)(如主機(jī)起火與機(jī)艙進(jìn)水等)。如果能建立一套船舶機(jī)損事故案例虛擬仿真軟件,用于船舶機(jī)損事故的案例教學(xué)和應(yīng)急訓(xùn)練,使船員通過(guò)事故案例重演的方式從以往的機(jī)損事故中獲得經(jīng)驗(yàn)教訓(xùn),以掌握船舶機(jī)損事故現(xiàn)場(chǎng)情況和應(yīng)對(duì)處理流程,可以實(shí)現(xiàn)船舶應(yīng)急情況分析和機(jī)損事故處理工作的高效化、科學(xué)化,這也說(shuō)明了開(kāi)發(fā)一套船舶機(jī)損事故虛擬仿真軟件的必要性[2]。
近年來(lái),針對(duì)船舶虛擬仿真系統(tǒng)的研究主要有:李治軍[3]實(shí)現(xiàn)了虛擬舵機(jī)艙室的漫游與交互;江恒[4]開(kāi)發(fā)和設(shè)計(jì)了無(wú)人艇視景系統(tǒng);Ye Ting等[5]引入虛擬現(xiàn)實(shí)技術(shù)來(lái)構(gòu)建一套船舶火災(zāi)模擬訓(xùn)練系統(tǒng);何雋[6]設(shè)計(jì)開(kāi)發(fā)了船舶損管虛擬仿真訓(xùn)練系統(tǒng);王雨生[7]實(shí)現(xiàn)船舶航行狀況模擬、船舶駕駛艙和輪機(jī)艙虛擬漫游,以及船舶入港停靠等功能;陸冬青等[8]為船舶操縱的教學(xué)訓(xùn)練和科學(xué)研究提供了有效手段。
上述研究主要針對(duì)虛擬機(jī)艙和虛擬航行,較少涉及對(duì)多種類型船舶機(jī)損案例進(jìn)行虛擬仿真的研究。本軟件采用基于Unity3D的虛擬現(xiàn)實(shí)開(kāi)發(fā)技術(shù)[9],并具有兼容操作系統(tǒng)、跨平臺(tái)發(fā)布并部署、人機(jī)交互功能強(qiáng)大等特點(diǎn)的Unity3D三維虛擬引擎[10],側(cè)重船舶機(jī)艙各系統(tǒng)機(jī)損事故的情景再現(xiàn),并利用語(yǔ)音播報(bào)配合文字提示與視頻播放三者同步進(jìn)行,實(shí)現(xiàn)生動(dòng)、有效的船舶機(jī)損事故的虛擬仿真和案例教學(xué)。
2 軟件功能
2.1 功能概述
船舶機(jī)損事故虛擬仿真軟件分為機(jī)艙系統(tǒng)選擇、事故類型選擇、開(kāi)始自動(dòng)播放三個(gè)部分,如圖1所示。機(jī)艙系統(tǒng)選擇按照船舶主機(jī)艙系統(tǒng)分為七個(gè)軟件模塊,分別是啟動(dòng)系統(tǒng)、調(diào)速系統(tǒng)、燃燒系統(tǒng)、換向系統(tǒng)、燃油系統(tǒng)、滑油系統(tǒng)、冷卻系統(tǒng)。每個(gè)系統(tǒng)模塊下包含不同的事故類型選擇。選擇不同的故障類型可以開(kāi)始自動(dòng)播放機(jī)損事故的發(fā)生經(jīng)過(guò)、分析與處理的流程,結(jié)合視頻解說(shuō)還原事故現(xiàn)場(chǎng)。
2.2 整體設(shè)計(jì)
以一艘5000TEU集裝箱船為外形,使用3dsMax軟件進(jìn)行三維建模。同時(shí)建立船員與輪機(jī)長(zhǎng)人員模型,進(jìn)行第一人稱行走動(dòng)畫(huà)制作。再搭建出主機(jī)艙、機(jī)房、駕駛室和集控室等三維實(shí)體模型,利用3dsMax自帶的粒子系統(tǒng)和大氣裝置制作真實(shí)機(jī)損事故現(xiàn)場(chǎng)。利用3dsmax的攝像機(jī)進(jìn)行畫(huà)面捕捉,必要時(shí)在攝像機(jī)上加上動(dòng)畫(huà)使捕捉的畫(huà)面更全面真實(shí),使用渲染設(shè)置進(jìn)行.avi格式視頻導(dǎo)出。再利用Unity3D軟件,制作軟件的UI界面,構(gòu)造便于教學(xué)的操作方式。利用C#語(yǔ)言功能,提供文本、語(yǔ)音、視頻三者同步自動(dòng)播放的實(shí)現(xiàn)。
本機(jī)損事故案例虛擬仿真軟件中所包含的事故類型多,不同的故障類型所采用的仿真手法也不一樣?,F(xiàn)以冷卻系統(tǒng)中機(jī)艙大量進(jìn)水、缸套破裂和燃油系統(tǒng)中高壓油管燃油漏泄為例,闡述噴射粒子系統(tǒng)、水面特效和火焰特效的開(kāi)發(fā)技術(shù),以及渲染設(shè)置方法和自動(dòng)播放的實(shí)現(xiàn)方法。
3 場(chǎng)景搭建和缸套碎裂制作
場(chǎng)景搭建是虛擬現(xiàn)實(shí)技術(shù)研究的基礎(chǔ),整個(gè)軟件以海上航行的整個(gè)船體作為主場(chǎng)景,然后選擇主機(jī)艙作為機(jī)損事故發(fā)生的次場(chǎng)景。當(dāng)故障發(fā)生的部件在主機(jī)上時(shí),可以將場(chǎng)景縮小到整個(gè)主機(jī)來(lái)減少不必要的場(chǎng)景給工作站帶來(lái)的負(fù)擔(dān)。首先使用3dsMax按比例完成主機(jī)艙的三維模型和內(nèi)部船用柴油主機(jī)模型的制作。制作主機(jī)缸套破裂時(shí),先按Alt+Q隱藏缸套之外部分,選擇修改器中的ProOptimizer,對(duì)缸套頂點(diǎn)進(jìn)行優(yōu)化,可以保留50%的頂點(diǎn)數(shù),在減少面的情況下,布線和結(jié)構(gòu)基本沒(méi)有大的改變,然后創(chuàng)建切割用的平面調(diào)整大小放在產(chǎn)生裂縫的位置,將長(zhǎng)度寬度分段加高到100,且添加Noise修改器,將比列調(diào)到80,強(qiáng)度Z調(diào)到40mm,選中缸套后使用ProCutter,將切割完的元素分離開(kāi)來(lái),保留切割后的碎塊,點(diǎn)擊拾取原料對(duì)象按鈕,選中平面,切割完成后點(diǎn)擊選擇按鈕避免再次切割,然后為左邊切割后的一半添加Bend修改器,調(diào)整彎曲角度為30度,可以鎖住尺寸編輯面板方便觀察,選擇Y軸為彎曲軸將方向調(diào)為90度,限制開(kāi)裂上限為1000mm,即可拖動(dòng)Y進(jìn)行開(kāi)裂。噪波平面和切割效果如圖2所示。
4 軟件特效
本軟件特效實(shí)現(xiàn)主要依賴與粒子系統(tǒng),粒子系統(tǒng)最早在1983年由ReevesWT[11]提出,是當(dāng)今較好地模擬不規(guī)則運(yùn)動(dòng)的算法之一,能較真實(shí)地還原火、水汽、煙、水流等自然現(xiàn)象。3dsMax粒子系統(tǒng)中粒子的行為參數(shù)包括粒子生成速度、粒子初始速度向量、粒子壽命、粒子顏色、在粒子生命周期中的變化以及其他參數(shù)等,可以模擬隨時(shí)間不斷產(chǎn)生、生長(zhǎng)和消亡的動(dòng)態(tài)粒子效果。
4.1 噴射粒子特效
以機(jī)艙大量進(jìn)水故障類型中主海水泵出口閥體泄漏為例,選擇粒子系統(tǒng)‘Particle Systems中的超級(jí)噴射‘Super Spray并點(diǎn)擊按鈕在閥體漏水的位置創(chuàng)建,創(chuàng)建時(shí)選擇頂視圖確定噴射中心,通過(guò)旋轉(zhuǎn)180度調(diào)整發(fā)射器指向向下,創(chuàng)建完成后在修改面板調(diào)整粒子分布為軸擴(kuò)散30度和平面擴(kuò)散70度,選擇發(fā)射器隱藏,粒子百分?jǐn)?shù)為80%,粒子數(shù)量為70,發(fā)射從0幀開(kāi)始到100幀結(jié)束,壽命為20幀,選擇粒子形狀為球體,粒子大小為40mm。即可渲染出0~100幀的漏水動(dòng)畫(huà)。漏水效果如圖3所示:
4.2 水面特效
為模擬機(jī)艙大量進(jìn)水特效,需制作艙內(nèi)水面緩緩上升的效果。在頂視圖創(chuàng)建一個(gè)平面,其寬度和長(zhǎng)度略大于進(jìn)水艙,將長(zhǎng)度與寬度分段為100,添加噪波‘Noise修改器,調(diào)整噪波參數(shù),縮小比例為50,增大Z方向的強(qiáng)度為230mm,勾選動(dòng)畫(huà)噪波,設(shè)置頻率為1.0。如圖4a為機(jī)艙進(jìn)水特效,圖4b為排水特效。
4.3 火焰特效
由燃料著火所形成的火災(zāi)可分為自著火和強(qiáng)迫著火兩種方式。在主機(jī)艙場(chǎng)景中,燃油與可燃性氣體如甲烷、乙烷、丙烷、天然氣、氫氣等泄漏,遇金屬摩擦撞擊產(chǎn)生的火星,就可能生成氣體火,屬于強(qiáng)迫著火。以燃油系統(tǒng)中主機(jī)高壓油管燃油漏泄為例,模擬缸蓋上噴油器與高壓油管接頭處的一股火焰在燃燒,首先在輔助對(duì)象里下拉選擇大氣裝置‘Atmospheric Apparatus,點(diǎn)擊球體Gizmo后勾選半球在頂視圖確定燃燒中心點(diǎn)創(chuàng)建,然后在環(huán)境和效果面板中添加火效果,進(jìn)行火效果參數(shù)‘Fire Effect Parameters設(shè)置,選擇火舌,拉伸1.0,規(guī)則性0.3,火焰細(xì)節(jié)為5.0,密度為30,勾選煙霧,點(diǎn)擊拾取Gizmo對(duì)之前創(chuàng)建的半球進(jìn)行拾取,再對(duì)其添加FFD 4×4×4修改器,切換自動(dòng)關(guān)鍵點(diǎn)模式對(duì)其控制點(diǎn)進(jìn)行動(dòng)畫(huà)制作,所渲染的火焰效果如下圖5所示。
5 場(chǎng)景漫游實(shí)現(xiàn)與渲染設(shè)置
本軟件場(chǎng)景漫游采用攝像機(jī)視野捕捉漫游,首先以機(jī)損部件為目標(biāo)創(chuàng)建一臺(tái)攝像機(jī),在視圖選擇中選擇攝像機(jī)視圖,通過(guò)3dsMax界面右下角的縮放、視野、平移、環(huán)繞四個(gè)主要按鈕來(lái)調(diào)控?cái)z像機(jī)視野大小與方向,通過(guò)Ctrl+Alt+鼠標(biāo)右鍵來(lái)調(diào)整幀數(shù)條范圍,開(kāi)啟自動(dòng)關(guān)鍵點(diǎn)捕捉來(lái)設(shè)置關(guān)鍵幀視角,可以簡(jiǎn)單實(shí)現(xiàn)漫游動(dòng)畫(huà)。
本軟件所用的渲染器由3dsMax插件公司Chaosgroug開(kāi)發(fā)的Vray渲染器[12],是以插件的形式和3dsMax相匹配的,Vary自帶的燈光系統(tǒng)和材質(zhì)庫(kù),后期渲染時(shí)與之配合會(huì)得到更快更好的渲染效果。在渲染設(shè)置窗口中選擇時(shí)間輸出為活動(dòng)時(shí)間段,輸出大小自定義為800×600,渲染輸出格式選擇.avi且設(shè)置如圖6所示,可以快速導(dǎo)出樣本視頻。成品視頻導(dǎo)出操作前面與樣本視頻操作一樣,只是在導(dǎo)出時(shí)選擇格式為Jpeg格式,設(shè)置如圖6所示,3dsMax會(huì)自動(dòng)按順序渲染成序列幀,在后期軟件如Alias、Premier或Ae等將當(dāng)前序列幀合在一起輸出成動(dòng)畫(huà)。
6 同步自動(dòng)播放的實(shí)現(xiàn)
在Unity3D中將軟件的UI界面制作完成后,為了達(dá)到語(yǔ)音、文字、視頻三者同步自動(dòng)播放的效果,我們以文字播放速度配合語(yǔ)音,以視頻播放速度配合文字,通過(guò)C#語(yǔ)言的功能來(lái)進(jìn)行協(xié)同控制。
6.1 語(yǔ)音播放控制
依據(jù)機(jī)損事故案例的發(fā)生經(jīng)過(guò)、分析與處理流程而錄制好mp3格式的語(yǔ)音播報(bào),在Unity3D場(chǎng)景中的主攝像機(jī)‘MainCamera上建立AudioSource控件,勾選Loop和PlayOnAwake,將音頻拖入AudioClip框中。這樣剛進(jìn)入場(chǎng)景就會(huì)開(kāi)始循環(huán)播放語(yǔ)音解讀。
6.2 文字播放控制
首先以text.text = ""來(lái)清空界面文本框內(nèi)的文字,文字開(kāi)始播放的時(shí)間通過(guò)代碼yield return new WaitForSeconds(startPause)中的startPause來(lái)控制,文字彈出速度代碼設(shè)計(jì)如下:foreach (char letter in word.ToCharArray()){
text.text += letter;
yield return new WaitForSeconds(letterPause)}
這樣就可以通過(guò)文字開(kāi)始彈出的時(shí)間和一個(gè)一個(gè)彈出的速度來(lái)進(jìn)行和語(yǔ)音播放同步化控制。
6.3 視頻播放控制
利用在UI中的RawImage上添加VideoPlayer控件來(lái)進(jìn)行視頻播放控制,同樣勾選Loop和PlayOnAwake,AudioOutputMode選擇Direct模式,獲取場(chǎng)景中的對(duì)應(yīng)組件后,通過(guò)代碼rawImage.texture = videoPlayer.texture將VideoPlayerd的視頻渲染到UGUI的RawImage,賦值當(dāng)前視頻的播放時(shí)間后,通過(guò)videoTimeText.text = string.Format("{0:D2}:{1:D2}:{2:D2} / {3:D2}:{4:D2}:{5:D2}",currentHour, currentMinute, currentSecond, clipHour, clipMinute, clipSecond)把當(dāng)前視頻播放的時(shí)間顯示在 Text 上,通過(guò)代碼videoTimeSlider.value = (float)(videoPlayer.time / videoPlayer.clip.length) 把當(dāng)前視頻播放的時(shí)間比例賦值到 Slider 上,通過(guò)將當(dāng)前的 Slider 比例值轉(zhuǎn)換為當(dāng)前的視頻播放時(shí)間,代碼設(shè)計(jì)如下:private void SetVideoTimeValueChange(){
videoPlayer.time = videoTimeSlider.value * videoPlayer.clip.length;
}
語(yǔ)音、文字、視頻三者通過(guò)同一按鈕控制播放與暫停代碼設(shè)計(jì)如下:
void OnSoundClick(){
if (music.isPlaying) {
videoplayer.Pause();
text_playorpause.text = "播? 放";
Time.timeScale = 0;
music.Pause();
}
else{
videoplayer.Play();
text_playorpause.text = "暫? 停";
Time.timeScale = 1f;
music.Play();
}
}
這樣,我們?cè)谶x擇完機(jī)損事故案例點(diǎn)擊進(jìn)入場(chǎng)景后,就會(huì)自動(dòng)開(kāi)始同步播放語(yǔ)音、文字和視頻,且通過(guò)一個(gè)按鈕控制三者同步開(kāi)始與暫停。
7 結(jié)束語(yǔ)
船舶機(jī)損事故案例的主機(jī)艙內(nèi)部系統(tǒng)的場(chǎng)景搭建和機(jī)損部件模型建立,可以利用3dsMax構(gòu)建高效、高質(zhì)量的視頻渲染體驗(yàn),且可以在Unity3D中實(shí)現(xiàn)自動(dòng)控制語(yǔ)音、視頻、文字同步播放的效果。該軟件用于學(xué)員的船舶機(jī)損事故案例教學(xué),可以節(jié)約教學(xué)成本,提高教學(xué)效果,有良好的應(yīng)用前景。
參考文獻(xiàn):
[1] 胡以懷,陳寶忠,鄒建軍.船舶機(jī)損案例的人為因素失誤分析[J].中國(guó)航海,2004(3):3-6,17.
[2] 胡以懷.船舶機(jī)損事故分析及安全評(píng)估[M].北京:人民交通出版社,2013.
[3] 李治軍.基于Unity 3D的船舶舵機(jī)艙虛擬現(xiàn)實(shí)設(shè)計(jì)與研究[D].大連:大連海事大學(xué),2014.
[4] 江恒.基于Unity3D的無(wú)人艇視景系統(tǒng)開(kāi)發(fā)研究[D].武漢:武漢理工大學(xué),2016.
[5] Ye Ting,Chen Feng,Wang Wenqiang,et al.Design and Realization of Ship Fire Simulation Training System Based on Unity3D[C].IOP Conference Series: Earth and Environmental Science,2018,108(5).
[6] 何雋.Unity 3D船舶損管訓(xùn)練虛擬仿真系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2019,15(17):246-248.
[7] 王雨生.基于Unity 3d的虛擬船舶仿真研究[D].舟山:浙江海洋大學(xué),2019.
[8] 陸冬青,邱云明,辛金強(qiáng).基于Unity的船舶操縱運(yùn)動(dòng)仿真[J].船舶工程,2019,41(S2):19-22.
[9] 謝韜.基于Unity3D粒子系統(tǒng)的游戲特效實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2015(24):30-32.
[10] 趙艷坤.基于Unity3D的欒川三維城市地理信息系統(tǒng)研究[D].鄭州:鄭州大學(xué),2014.
[11] William T.Reeves.Particle systems—a technique for modeling a class of fuzzy objects[J].ACM SIGGRAPH Computer Graphics,1983,17(3):91-108.
[12] 李利明.3DMAX中常用渲染插件特點(diǎn)解析[J].漯河職業(yè)技術(shù)學(xué)院學(xué)報(bào),2013,12(2):68-69.
【通聯(lián)編輯:謝媛媛】