張學(xué)鋒, 李文兵, 儲(chǔ)岳中, 何勝方, 湯亞玲
(1.安徽工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,安徽 馬鞍山 243000;2.馬鞍山鋼鐵公司港務(wù)原料總廠,安徽 馬鞍山 243000)
近年來(lái),我國(guó)的化工企業(yè)生產(chǎn)事故頻發(fā),造成了巨大的生命和財(cái)產(chǎn)損失,從國(guó)家到個(gè)人,都越來(lái)越關(guān)注化工企業(yè)的生產(chǎn)安全,如何防范事故的發(fā)生。但是目前大多數(shù)的企業(yè)對(duì)于安全事故的預(yù)防還停留在單純的事故原因分析與總結(jié),以及對(duì)員工的一些文字或視頻形式的教學(xué)培訓(xùn),效果一般[1]。目前,國(guó)內(nèi)外在應(yīng)急演練仿真系統(tǒng)研究方面均有著不少成果,國(guó)外如美國(guó)應(yīng)急演練模擬中心(National Exercise Simulation Center,NESC) 對(duì)虛擬環(huán)境下各類(lèi)災(zāi)害進(jìn)行了仿真演練,構(gòu)建了情景模型、能力模型以及決策模型[2],參演者通過(guò)決策模型的選項(xiàng)進(jìn)行決策演練,這種方式缺乏了仿真演練的沉浸感,更多的是針對(duì)上層決策人員。國(guó)內(nèi)如朱新平等[3]提出的基于虛擬現(xiàn)實(shí)的機(jī)場(chǎng)消防救援虛擬演練平臺(tái),平臺(tái)主要針對(duì)與機(jī)場(chǎng)的消防救援虛擬演練,其場(chǎng)景、流程單一化,缺乏變化性。魯?shù)酪愕萚4]提出的船舶三維及VR沉浸式海事監(jiān)管業(yè)務(wù)培訓(xùn)平臺(tái),平臺(tái)主要針對(duì)LNG船舶,建立了PSC檢查素材庫(kù),解決了船舶PSC檢查的培訓(xùn)問(wèn)題,提高了執(zhí)法人員的監(jiān)督檢查能力。祁超等[5]提出了面向高層指揮人員的應(yīng)急演練仿真平臺(tái)設(shè)計(jì),該平臺(tái)以動(dòng)態(tài)演練為基礎(chǔ),提出了一個(gè)面向高層指揮人員的分布式交互應(yīng)急演練仿真服務(wù)平臺(tái),相比較靜態(tài)演練,動(dòng)態(tài)演練極大提高了演練的靈活性,但該平臺(tái)主要針對(duì)高層指揮人員,忽略了下級(jí)人員實(shí)際操作的重要性。
以上研究都有各自的特點(diǎn),但研究都有一些共同的問(wèn)題就是強(qiáng)調(diào)定制化、使用場(chǎng)景單一化以及系統(tǒng)使用有著諸多條件限制。在現(xiàn)實(shí)條件下,事故是隨著環(huán)境因素不斷變化的,不管是指揮人員還是下級(jí)救援人員都會(huì)隨著這個(gè)變化不斷調(diào)整方案,同時(shí)傳統(tǒng)三維模擬仿真系統(tǒng)大多采用C/S的架構(gòu),限制了用戶的使用條件。為了突破傳統(tǒng)應(yīng)急仿真演練平臺(tái)的局限性,設(shè)計(jì)了基于B/S架構(gòu)和Unity 3D技術(shù)的虛擬應(yīng)急演練仿真系統(tǒng),應(yīng)急演練仿真與場(chǎng)景配置相結(jié)合,通過(guò)多種優(yōu)化技術(shù)保證系統(tǒng)運(yùn)行的流暢性,同時(shí)內(nèi)部設(shè)計(jì)的通信框架很好地實(shí)現(xiàn)了網(wǎng)絡(luò)數(shù)據(jù)的同步以及演練數(shù)據(jù)的存儲(chǔ)。指揮層可以設(shè)置災(zāi)害形式、天氣環(huán)境條件以及下發(fā)任務(wù)與問(wèn)答題,下級(jí)人員執(zhí)行具體操作,不僅突出了指揮層對(duì)于事故處理的領(lǐng)導(dǎo)作用,同時(shí)可以用于基層員工的日常安全培訓(xùn)。
在結(jié)合前人研究成果以及考慮實(shí)際需求,以多個(gè)實(shí)際項(xiàng)目為參考,在支持基本的多人協(xié)同演練的基礎(chǔ)上,加入了場(chǎng)景二次自定義配置等新的元素。系統(tǒng)包括應(yīng)急演練和場(chǎng)景配置兩部分,采用B/S架構(gòu),極大地提升了整個(gè)應(yīng)急演練仿真系統(tǒng)的靈活性與可配置化程度。圖1為系統(tǒng)整體框架。
圖1 系統(tǒng)框架Fig. 1 System framework
場(chǎng)景編輯及預(yù)案推演模塊實(shí)現(xiàn)了在基本場(chǎng)景下的二次自定義編輯。提供的二次自定義編輯的場(chǎng)景元素有:災(zāi)難點(diǎn)、角色的出生點(diǎn)、事件觸發(fā)器、車(chē)輛以及場(chǎng)景中的特殊模型如儲(chǔ)罐、消防水炮等。
主要功能包括場(chǎng)景的編輯、保存,物體的復(fù)制、刪除、移動(dòng)和旋轉(zhuǎn),以及對(duì)物體相關(guān)信息的編輯、關(guān)聯(lián),比如閥門(mén)與災(zāi)難點(diǎn)通過(guò)兩者的ID進(jìn)行關(guān)聯(lián),實(shí)現(xiàn)閥門(mén)控制災(zāi)難的進(jìn)程,并且支持災(zāi)難的預(yù)覽,系統(tǒng)支持配置各種類(lèi)型的事件觸發(fā)器,這些觸發(fā)器常常與模型相結(jié)合從而實(shí)現(xiàn)了人物與場(chǎng)景之間的各種互動(dòng)。場(chǎng)景編輯完成后,服務(wù)端接收相關(guān)場(chǎng)景自定義物體的數(shù)據(jù)會(huì)在云端生成相關(guān)的xml文件,用以記錄物體的位置、屬性等信息。圖2為編輯模塊界面部分。
演練仿真模塊,客戶端首先會(huì)從云端下載基本場(chǎng)景以及讀取配置場(chǎng)景物體所保存的xml信息文件,兩者結(jié)合構(gòu)建新的場(chǎng)景。系統(tǒng)采用無(wú)固定預(yù)案設(shè)計(jì),采用下發(fā)任務(wù)命令的形式,并且指揮層作為整個(gè)演練中權(quán)限最高的角色,能夠?qū)ρ菥毴藛T進(jìn)行實(shí)時(shí)監(jiān)控,觀看演練人員的操作是否符合規(guī)定,并且可以下發(fā)相關(guān)問(wèn)題對(duì)參與人員進(jìn)行考核。在事故控制方面,指揮層可以控制事故的發(fā)生,以及天氣時(shí)間。圖3為演練模塊指揮端界面。
圖2 編輯模塊界面Fig. 2 Edit module interface
圖3 演練模塊指揮端界面Fig. 3 Command interface of drill module
虛擬應(yīng)急演練仿真系統(tǒng)采用B/S結(jié)構(gòu)設(shè)計(jì),將功能實(shí)現(xiàn)的核心部分集中到服務(wù)器,客戶機(jī)只需要通過(guò)瀏覽器就可以使用系統(tǒng)服務(wù),系統(tǒng)分別由數(shù)據(jù)服務(wù),應(yīng)用服務(wù)以及資源服務(wù)共同為Web服務(wù)端提供支持,圖4所示系統(tǒng)服務(wù)架構(gòu)圖。
(1) Web服務(wù)端,是用戶使用系統(tǒng)最直觀的部分,通過(guò)瀏覽器直接訪問(wèn)Tomcat Web 服務(wù)器??蛻舳巳S仿真主要采用了WebGL技術(shù)標(biāo)準(zhǔn)[6]。
(2) 應(yīng)用服務(wù)端,其主要功能是實(shí)現(xiàn)客戶端的網(wǎng)絡(luò)通信和數(shù)據(jù)同步,保證在多用戶使用時(shí),客戶端不會(huì)出現(xiàn)掉線,高延遲的狀況。
(3) 數(shù)據(jù)服務(wù)端,客戶端所使用的大量數(shù)據(jù)都是存放在云端數(shù)據(jù)庫(kù),通過(guò)數(shù)據(jù)服務(wù)相應(yīng)的接口完成與云端數(shù)據(jù)庫(kù)的交互,保障了客戶端數(shù)據(jù)訪問(wèn)的穩(wěn)定性。
(4) 資源服務(wù)端,客戶端中所使用的大量的圖片、題庫(kù)文件和各種需要?jiǎng)討B(tài)加載的模型都是放置在資源服務(wù)器中,減輕了系統(tǒng)使用時(shí)的帶寬壓力。
對(duì)于多人協(xié)同演練,網(wǎng)絡(luò)通信與數(shù)據(jù)同步是極其重要的,客戶端與服務(wù)端之間必須做到實(shí)時(shí)通信才能保證各個(gè)客戶端的數(shù)據(jù)的及時(shí)同步以及客戶端之間的實(shí)時(shí)通訊。
虛擬應(yīng)急演練仿真系統(tǒng)的客戶端與后端系統(tǒng)服務(wù)的通信協(xié)議選用WebSocket協(xié)議[7]。但有些通信不需要保證實(shí)時(shí)性,因此系統(tǒng)對(duì)資源、對(duì)數(shù)據(jù)庫(kù)的其他請(qǐng)求依然使用的是HTTP協(xié)議。
除了通信協(xié)議,數(shù)據(jù)格式的設(shè)計(jì)也是核心部分,一個(gè)好的通信數(shù)據(jù)格式,可以提高開(kāi)發(fā)效率、通信效率,有效降低客戶端與服務(wù)端之間通信時(shí)帶寬資源的占用。圖5為系統(tǒng)的通信數(shù)據(jù)格式。
圖5 系統(tǒng)通信數(shù)據(jù)格式Fig. 5 System communication data format
圖5中,MessageType就是客戶端請(qǐng)求應(yīng)用服務(wù)的類(lèi)型,系統(tǒng)中對(duì)同步的數(shù)據(jù)類(lèi)型進(jìn)行了細(xì)化,主要有幾種類(lèi)型:演練開(kāi)始結(jié)束、移動(dòng)、通訊、災(zāi)難、天氣、裝備、技能、任務(wù)數(shù)據(jù)以及答題數(shù)據(jù)等。對(duì)于消息內(nèi)容,則依據(jù)同步動(dòng)作所需要的變量來(lái)決定,為了降低同步數(shù)據(jù)量,對(duì)移動(dòng)的同步中所用數(shù)據(jù)做了特殊處理,其中所用到的位移、方向、移動(dòng)速度、轉(zhuǎn)向速度分別使用vector3、short、sbyte、sbyte數(shù)據(jù)類(lèi)型,有效降低了整體同步數(shù)據(jù)量。同時(shí)所有參與網(wǎng)絡(luò)同步的物體均掛載NetworkSceneObject腳本,腳本中生成并保存了該物體的唯一ID號(hào)。圖6為網(wǎng)絡(luò)通信框架。
圖6 網(wǎng)絡(luò)通信框架Fig. 6 Network communication framework
其中,NetworkMessage腳本中主要用于注冊(cè)各種網(wǎng)絡(luò)消息,包括消息類(lèi)型,消息類(lèi)以及消息內(nèi)容的序列化、反序列化??蛻舳税l(fā)送消息首先對(duì)消息進(jìn)行序列化,服務(wù)端接收消息后向其他客戶端廣播或通過(guò)玩家唯一ID發(fā)送給指定客戶端,客戶端接收消息后進(jìn)行反序列化,然后調(diào)用NetMessageHandle進(jìn)行相應(yīng)的處理。
系統(tǒng)采用指揮端動(dòng)態(tài)下發(fā)任務(wù)和答題的機(jī)制,任務(wù)機(jī)制包括了任務(wù)的下發(fā)、接收,完成與否判斷以及任務(wù)數(shù)據(jù)上傳云端。圖7為任務(wù)系統(tǒng)和答題系統(tǒng)。
任務(wù)數(shù)據(jù)的設(shè)計(jì)依據(jù)任務(wù)的目標(biāo)角色,物體,動(dòng)作而定。比如下發(fā)一個(gè)將傷員A從危險(xiǎn)區(qū)域轉(zhuǎn)移到安全區(qū)的任務(wù),任務(wù)數(shù)據(jù)就會(huì)包含傷員A的唯一的物體ID編號(hào),目標(biāo)區(qū)域觸發(fā)器的物體編號(hào),以及執(zhí)行的目標(biāo)角色。結(jié)合這些數(shù)據(jù),當(dāng)用戶將角色轉(zhuǎn)移至目標(biāo)區(qū)域時(shí),只需要判斷目標(biāo)傷員有沒(méi)有觸發(fā)這個(gè)區(qū)域觸發(fā)器就行了。同時(shí)加載答題時(shí),會(huì)先下載題目html文件,之后在客戶端進(jìn)行解析,完美解決了加載富文本以及圖片的問(wèn)題。
圖7 任務(wù)系統(tǒng)和答題系統(tǒng)Fig. 7 Task and question system
虛擬演練仿真,其仿真的意義就在于對(duì)事故以及其他要素的最大限度還原。因此立足于視覺(jué)以及實(shí)際情況,加入了事故與天氣特效,指揮端可以自由控制事故類(lèi)型以及天氣。事故特效包括了立體火、噴射火、環(huán)型火以及流淌火。天氣特效包括了晴天、陰天、雨天、雷陣雨、多云。圖8為部分特效。
LOD(Level of Detail)技術(shù),也被稱(chēng)為細(xì)節(jié)層次技術(shù),是根據(jù)物體模型的節(jié)點(diǎn)在顯示環(huán)境中所處的位置和重要度,決定物體渲染的資源分配[8]??梢酝ㄟ^(guò)Unity中一個(gè)重要輔助開(kāi)發(fā)參數(shù)Batches看到系統(tǒng)在渲染模型的開(kāi)銷(xiāo)。
CPU和GPU之間的通信是通過(guò)命令緩沖區(qū)來(lái)進(jìn)行的,而“Draw Call”是其中一種。每次繪制一個(gè)物體都需要生成一個(gè)繪制指令給圖形API,這個(gè)過(guò)程稱(chēng)為“Draw Call”,圖9為“Draw Call”的過(guò)程,如果“Draw Call”的數(shù)量太多,CPU就會(huì)把大量時(shí)間花費(fèi)在提交“Draw Call”命令上,造成CPU的過(guò)載。而每一次“Draw Call”會(huì)產(chǎn)生一個(gè)Batch,因此在三維場(chǎng)景的優(yōu)化上,可以從減少Batches的角度進(jìn)行優(yōu)化。
圖9 “Draw Call”過(guò)程Fig. 9 “Draw call” process
LOD技術(shù)是將模型簡(jiǎn)化成為幾個(gè)面數(shù)層級(jí)不同的模型,隨著攝像機(jī)的遠(yuǎn)近調(diào)用不同層級(jí)的模型,這種方式依然無(wú)法有效地減少“Draw Call”,采用網(wǎng)格合并優(yōu)化與LOD技術(shù)相結(jié)合,在進(jìn)行LOD優(yōu)化之前會(huì)進(jìn)行網(wǎng)格、材質(zhì)合并,這種合并可以大大降低模型的Batches數(shù)值,達(dá)到有效減少“Draw Call”的目的,圖10網(wǎng)格合并優(yōu)化與LOD技術(shù)相結(jié)合的處理步驟。
圖10 合并網(wǎng)格優(yōu)化LOD技術(shù)處理步驟Fig. 10 LOD optimization by merging grids
相比較單純LOD技術(shù)進(jìn)行優(yōu)化,雖然增加了一個(gè)合并網(wǎng)格材質(zhì)的步驟,但合并網(wǎng)格后,生成LOD模型的時(shí)間大大降低,因此在處理模型的平均時(shí)間上并沒(méi)有增加多少,而且在性能上提升非常大。圖11在一般情況下,傳統(tǒng)LOD模型的Batches數(shù)值達(dá)到694,而使用網(wǎng)格合并優(yōu)化LOD后如圖12降低到了11,隨著攝像機(jī)的遠(yuǎn)近,其Batches數(shù)值最低可以到4,而優(yōu)化前的LOD技術(shù)的最低值也有522。對(duì)于計(jì)算機(jī)來(lái)說(shuō),Batches數(shù)值的減少,就意味著CPU花在“Draw Call”上的時(shí)間減少,極大地提高了系統(tǒng)的穩(wěn)定性與性能。
圖11 未合并網(wǎng)格優(yōu)化模型Fig. 11 Unconsolidated mesh optimization model
圖12 合并網(wǎng)格優(yōu)化模型Fig. 12 Merging mesh optimization model
應(yīng)急演練仿真系統(tǒng)貼合實(shí)際,加入了模擬疏散人群,場(chǎng)景中有很多npc的角色,即非玩家角色存在的角色,因此將其疏散至指定地點(diǎn)就需要用到自動(dòng)尋路。
傳統(tǒng)的生成導(dǎo)航網(wǎng)格(NavMesh)[9]大多都在Unity中編輯場(chǎng)景時(shí)生成,由于演練仿真系統(tǒng)有著場(chǎng)景編輯的功能,使用傳統(tǒng)的方式生成導(dǎo)航網(wǎng)格無(wú)法適用于多變的場(chǎng)景。因此支持在線生成導(dǎo)航網(wǎng)格信息。這種方式不需要在編輯器中進(jìn)行相關(guān)操作,減少了場(chǎng)景搭建的工作量以及便于對(duì)基本場(chǎng)景的優(yōu)化調(diào)整。其中三角導(dǎo)航網(wǎng)格的生成主要采用了三角剖分算法Delaunay[10],圖13為處理后生成的三角網(wǎng)格。
圖13 處理后生成的三角網(wǎng)格Fig. 13 Generated triangular mesh after processing
線上生成導(dǎo)航網(wǎng)格以及尋路流程如下:配置端配置完場(chǎng)景保存后,調(diào)用烘焙導(dǎo)航網(wǎng)格信息函數(shù),向該函數(shù)傳入場(chǎng)景平面和障礙的碰撞體信息,生成導(dǎo)航網(wǎng)格信息,將信息傳至云端服務(wù)生成xml文件,存儲(chǔ)著網(wǎng)格頂點(diǎn)以及三角網(wǎng)格信息??蛻舳讼逻_(dá)疏散命令,向服務(wù)端發(fā)送疏散消息,該消息包含目標(biāo)點(diǎn)信息以及疏散命令下達(dá)的用戶角色的ID,服務(wù)端接收消息后執(zhí)行npc控制腳本中的開(kāi)始疏散函數(shù)并傳入目標(biāo)點(diǎn)信息,在該函數(shù)中,npc的狀態(tài)變?yōu)槭枭顟B(tài),進(jìn)入疏散狀態(tài)后,將 npc起始點(diǎn)、疏散目標(biāo)點(diǎn)傳入路徑生成函數(shù),該函數(shù)加載網(wǎng)格導(dǎo)航信息,執(zhí)行 A*尋路算法[11],生成路徑點(diǎn)集合。最后反復(fù)通過(guò)插值將目標(biāo)移動(dòng)至下個(gè)路徑點(diǎn),同時(shí)會(huì)一直執(zhí)行人物移動(dòng)的網(wǎng)絡(luò)同步,各個(gè)客戶端中npc的位置始終與服務(wù)端保持一致,直至npc成功到達(dá)目標(biāo)點(diǎn)將其狀態(tài)變?yōu)橐话銧顟B(tài)停止疏散。
虛擬應(yīng)急演練仿真系統(tǒng)開(kāi)發(fā)完成后先后在青島港、江蘇揚(yáng)子江國(guó)際化學(xué)工業(yè)園、馬鋼集團(tuán)進(jìn)行了上線使用,并已經(jīng)與廣西華誼能源化工有限公司、上海華誼(集團(tuán))公司達(dá)成合作。虛擬應(yīng)急演練仿真系統(tǒng)取得了良好的效果,幫助企業(yè)完成了數(shù)次虛擬仿真演練培訓(xùn)工作,在這些企業(yè)的應(yīng)用中主要取得的效果如下:
企業(yè)的演練頻率大大提升,參與人員可以更直觀地看到災(zāi)害的形式、影響,與場(chǎng)景互動(dòng)的過(guò)程,參與人員也更加熟悉設(shè)備的操作。
實(shí)現(xiàn)了企業(yè)應(yīng)急演練常態(tài)化,可以隨時(shí)發(fā)起演練,以此來(lái)考核員工的應(yīng)急反應(yīng)能力,不斷提高員工的綜合素質(zhì)。
演練內(nèi)容豐富多樣化,配置與演練相結(jié)合,企業(yè)可以根據(jù)需要配置出多種災(zāi)害場(chǎng)景,提升了企業(yè)整體的應(yīng)急能力,為防災(zāi)應(yīng)急掃清盲點(diǎn)。
提出的虛擬應(yīng)急演練仿真系統(tǒng)由場(chǎng)景配置模塊與應(yīng)急演練模塊組成,使用戶在使用時(shí)不再拘泥于一種演練預(yù)案或事故,并基于B/S架構(gòu)開(kāi)發(fā),降低了用戶的維護(hù)成本,保證了系統(tǒng)的可靠性。有效地提高了企業(yè)的綜合應(yīng)急能力,加強(qiáng)了基層職工以及指揮員對(duì)現(xiàn)場(chǎng)事故的應(yīng)急救援與處置能力。該系統(tǒng)能夠很好地滿足企業(yè)對(duì)應(yīng)急仿真演練的各種需求,在需要應(yīng)急仿真演練的企業(yè)及工業(yè)園區(qū)等具有較好的推廣應(yīng)用價(jià)值。
重慶工商大學(xué)學(xué)報(bào)(自然科學(xué)版)2022年1期