APP下载

Unity3D船舶虚拟消防训练系统灭火功能设计与实现

2019-10-08何隽金志泉

软件 2019年5期
关键词:粒子系统灭火器火焰

何隽 金志泉

摘  要: 针对船舶火灾成因的特殊性、消防训练的局限性和危险性,构建了船舶虚拟消防训练系统,供船员进行安全有效的人机交互船舶灭火训练。系统采用3dsMax搭建船舶驾驶室、主机舱、住舱和灭火器等模型,使用Unity 3D引擎开发船舶虚拟消防训练软件,粒子系统逼真模拟各种成因船舶火灾的发生和扑灭,利用C#语言实现人机交互功能。结果表明,此虚拟系统基本概括了船舶上所有火灾类型,船员通过多次训练,可迅速做出判断,有效扑灭火灾,在虚拟训练过程中做到了接近百分百安全。

关键词: Unity 3D;船舶虚拟消防训练;火灾成因;粒子系统

中图分类号: TP391.9    文献标识码: A    DOI:10.3969/j.issn.1003-6970.2019.05.010

本文著录格式:何隽,金志泉. Unity 3D船舶虚拟消防训练系统灭火功能设计与实现[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%,一旦发生会造成极大的损失和人员伤亡。船上的危险源较多,火灾成因复杂,扑救难度大。因此,船员必须熟练消防程序,面对船舶火灾事故处变不惊,积极应对。但目前在真实环境中进行的船舶消防训练受到场地、资金和时间的局限,效果并不理想,还可能会出现装备损失和人员伤亡的危险状况[1]。

虚拟现实技术的迅猛发展正好为船舶火灾消防训练提供了一个方案,就是通过计算机营建具有3I(沉浸性Immersion、交互性Interaction、想象性Imagination)特点的虚拟船舶环境和火灾现场[2],使船舶消防人员在近似实战的逼真环境中进行大量具有实效的模拟训练。上世纪七十年代起,美国为首的发达国家已对船舶火灾虚拟训练系统开展了广泛的研究[3-4]。国内,各高校研究消防模拟已取得一定成果[5],但很少涉及针对不同类型火灾的形成和扑灭机制。

本系统采用被广泛运用于游戏和虚拟现实开发[6],并具有兼容操作系统、跨平台发布并部署、人机交互功能强大等特点的Unity 3D三维游戏引擎进行开发[7],从研究船舶火灾成因出发,用粒子系统模拟各种不同类型的火焰,选用针对性的设备有效扑灭火灾,从而实现安全有效的船舶虚拟消防训练。

1  船舶虚拟消防训练系统总体设计

1.1  系统功能分析

船舶虚拟消防训练系统分为全船漫游、消防设备选择和消防训练3个部分。全船漫游通过操作控制虚拟消防人员行走,熟悉船舶的各个区域的过程。消防设备选择使用是对多种消防设备器材的功能理解,以及对其操作程序的熟练。消防训练则包含了侦查火灾情况、选取适合灭火的设备、使用相应设备灭火操作,以及在火灾现场灭火的同时,拾获重要资料和救援生命体对象等。船舶虚拟消防训练所在的区域有住舱、厨房、主机舱、机房和驾驶室等。这些都是在系统中火灾发生的地点,并且每次任务启动后,都会根据实际情况在相关地点随机产生2-3个不同的火灾情况,等待消防人员进行决策。虽然这些区域布局不同,火灾成因不同,使设备选取和灭火过程有所区别,但是消防训练的流程基本上是通用的:任务提示→灾害侦查→设备选取→灭火操作→灭火成功,如下图1所示:

1.2  系统整体设计

以中国第三代航天远洋测量船远望7号的外形,使用3dsMax软件建立三维模型。同时建立三维消防人员模型,进行骨骼绑定和行走动画制作,再搭建出住舱、厨房、主机舱、机房和驾驶室等三维实体模型,制作消防设备三维模型。利用Unity 3D软件,构造船舶的三维虚拟场景。利用C#语言的功能,提供交互功能,通过鼠标和键盘,用代码实现受训人员控制虚拟消防人员漫游整个船体,熟悉消防场景,到特定区域获取消防设备,学习针对不同火灾成因,使用不同的消防设备及相关操作方法。

船舶火灾从形成原因和燃烧物的不同来区分,主要有以下几个类型。用于船舶机械设备的润滑油属于易燃、可燃液体,喷滴在船上机器的蒸汽管、排气管或者锅炉外壳等热表面,可形成液体火灾(以下简称液体火),另外还有燃油泄露或废油滴漏等情况形成的火灾也属于此类。如有金属互相撞击摩擦产生的火星,遇到石油气体或者其他可燃性气体发生的火灾等称为气体火灾(以下简称气体火),容易发生爆炸。机舱内存在大量的电器设备,属于带电物体和精密仪器,如发生线路短路、电线老化或电机过载过热等情况,引起电器设备着火,称为电器火灾(以下简称电器火)。易燃固体物品,如木屑、纸张、衣物等,遇到火星燃烧或者沾染油污后通风不良自燃等情况,则是固体火灾(以下简称固体火)。还有一些可燃金属,如钾、钠、镁燃烧形成的火,称为金属火灾(以下简称金属火)。船舶火灾因为船舱载荷集中,散热困难,并且容易蔓延,因此要在火灾发生时及时查明火灾类型,准确快速选择对应的消防设备,尽快开展灭火行动。其中,最重要的是对灭火器消进行合理选择,规范使用。灭火器的使用规程见表1。

除了灭火器,当然还要配合使用其他设备。如消防战斗服,可用来在灭火过程中对躯干、手臂和腿进行热防护;呼吸器在充满浓烟和毒气的环境下可提供给消防人员充足的氧气;测温仪,可对火灾发生时周围温度进行精确测量;消防斧则切断蔓延的火势,或劈开变形的门窗;消防水管和水枪可以用来扑救已经蔓延的火势。

对应选择的消防设备进行灭火的过程中,系统UI界面会给出相关提示正确或者指出错误的功能,引导受训者作出正确的判断,在虚拟系统中完成相应的消防任务。

2  系统实现

在本消防训练系统中,包含多个舱室、多种成因的火灾,使用的消防灭火设备也不尽相同。由于篇幅限制,在本系统实现的介绍中,重点以气体火灾的为例,阐述气体火焰粒子和二氧化碳喷雾粒子的模拟,及操作二·氧化碳灭火器灭火的过程。

2.1  场景搭建和灭火器制作

场景是虚拟现实系统研究的基础,整个船体作为主场景,然后选择主机舱作为模拟气体火灾发生的次场景。首先使用3dsMax按照比例完成主机舱内部三维模型和干粉灭火器模型[8]。干粉灭火器的罐体主要是采用圆柱体,转换为可编辑多边形,将圆柱顶端作为选择面,插入5 mm,挤出15 mm,再次插入插入2 mm,选择中心面挤出,挤出120 mm,即可形成罐口。罐子肩部和底角部分,可全选圆柱边线,右键选择边面切角,点击第二行,连接边分段选择5即可完成圆滑的效果。罐体肩颈底部及切角属性见图2所示。其他部分类似,不再赘述。

接下来按照真实机舱和灭火器照片制作贴图,再渲染得到具有贴图的三维模型,最后导入到场景中准备进行交互。将干粉灭火器设备放到场景中,并适当调整灭火器大小以便使用,如图3所示。

2.2  粒子特效实现

粒子系统最先由Reeves WT[9]在1983年提出,是至今最成功地模拟不规则物体的算法之一,可以较好地还原火焰、烟雾、水汽、爆炸、水流等自然现象[10-11]。粒子系统中的粒子具有形状、大小、颜色、透明度、运动速度、运动方向和生命周期等属性,可以模擬随时间不断产生、生长和消亡的动态的粒子效果,如火焰、烟雾和云雾等。

2.2.1  火焰特效

火灾的本质是燃烧,是由燃料着火形成的,方式可以分为自着火和强迫着火[12]。在主机舱场景中,发生可燃性气体如天然气、甲烷、乙烷、丙烷、氢气等泄露,遇到金属摩擦撞击产生的火星,就可能生成气体火,属于强迫着火。本系统设计的火焰特效主要是表现着火后,气体火焰的外在表征。但是气体火焰形状和分布及其不规则,形式变化多端,不能用常规的几何模型来进行模拟。而Unity自带的粒子系统可以比较好地描述这种可燃气体与空气中的氧气混合后迅速转化为燃烧产物的化学过程,及过程中出现的可见光和烟雾等的物理表现,并着重表现后者。

首先模拟真实的气体火焰可见光,先创建粒子系统。其次调整粒子系统面板中的基本模块,调整模块中的初始生命周期(Start Lifetime)参数[13]为2.21,让粒子产生的多一点,调整初始尺寸(Start Size)参数为3.97,让粒子的尺寸大一些,调整初始速度(Start Speed)参数为4.79,让粒子运行的速度小一点,形成气体火焰可见光的湍流现象。然后找一个火焰图案的贴图,,背景是纯黑的或者透明,在Render模块中的Material中把贴图形成的材质球拖上去,并勾选(Color over Lifetime)在颜色中调整渐变色,为红->黄->红,最后一个红色调整一下透明度。当火焰粒子达到一定规模后会出现烟雾,烟雾粒子的模拟对于整体火焰粒子特效的表现是起到画龙点睛的作用的。模拟烟雾的特效与火焰可见光特效不同点是烟雾的位置和烟雾的颜色,烟雾不像火焰可见光是从可燃气体的根部开始出现的,一般会把烟雾粒子初始化的位置放在火焰可见光位置的三分之一处[14],这样模拟出来的粒子特效更加逼真,使得整体效果更加接近真实情况,模拟过程见图4所示。

2.2.2  喷雾特效

喷雾特效主要表现的是二氧化碳灭火器喷射液态二氧化碳粒子的特效。和火焰相比,喷雾特效的制作过程与前者有异同点。不同在于,气体火焰粒子发射的方向是向上的,而灭火器的使用,应该是站在上风口对着下风口喷射,也就是说二氧化碳从灭火器中喷出的方向是向前的;且喷射距离为2米,受到重力影响,实际方向是略向下,喷射尽头呈抛物线状。相同的是,创建粒子系统后,也需要调整粒子系统面板上的初始生命周期(Start Lifetime)、初始尺寸(Start Size)和初始速度(Start Speed)这三个参数。所以,先调整喷雾粒子的发射方向,然后再调整其基本模块参数。

本系统研究的二氧化碳灭火器的灭火原理是隔绝氧气和冷却降温,二氧化碳灭火的主要作用是冲淡氧,降低空气中氧浓度。同时液态二氧化碳从钢瓶释放出来,压力突然降低,迅速吸热蒸发,覆盖在燃烧物上的干冰气体,也起到一定的冷却作用,从而达到灭火的目的。因此,在二氧化碳喷雾特效的表现上还需要加上烟雾效果,具体效果见图5所示。

2.3  交互实现

在系统的操作者和系统中的虚拟物品之间建立起联系称之为人机交互,是系统功能实现的一个重要环节。本系统主要是实现在虚拟船舶的机舱中观察火灾原因,并使用相应的灭火设备进行灭火的过程。这里讨论的是用二氧化碳灭火器对气体火的扑灭,根据使用规程,当手持灭火器到达火灾附近2米的位置,应该先拔出保险销,将喷雾对准火源根部喷射,直到火苗熄灭,灭火任务完成。

2.3.1  拔出保险销

首先建立一个空对象用来存放代码,保险销在灭火的过程中是很重要的一环,只有拔出后,才能按下压手瓣,拔出保险销可用移动游戏对象的函数transform.Translate(vector3 offset)来实现[15]。拔出保险销的前提是获取保险销,定义一个游戏对象用public反射出去,把保险模型销拖拽上去,然后用GameObject .Find()获取到它的名称,再用移动函数transform.Translate()调整保险销模型的移动速度。新建一个cube让来让保险销移动到cube的位置上,因为在虚拟仿真的场景中拔出保险销动作中,如果让保险销直接消失会产生突兀并且不真实感,所以建立一个cube放在场景中会使拔出保险销的过程更加真实,让保险销移动的位置与cube相同,代码设计如下:

void Update () {

if (Input.GetMouseButtonDown (1)) {

cub1.transform.position = tb.transform. position;

}

}

再单击鼠标右键,使保险销移动的位置与cube的位置一致。另外,cube放在场景中会影响美观,因此将它隐藏。

2.3.2  发射喷雾

在灭火设备使用规范中,喷雾必须对准火源根部喷射,在Unity中就是喷雾粒子移动,与火焰粒子发生碰撞,可使用移动游戏对象的函数transform. Translate(vector3 offset)来对喷雾粒子做移动,建立C#脚本挂在在喷雾粒子对象上。

在默认情况下,拔出保险销后,喷雾粒子不应该立即发射,而是操作者点击某一按键发生交互后,喷雾粒子才出现。所以应使用particle.Stop ()先停止喷射,再选择F键作为激活喷雾粒子的按键,代码设计如下:

if (Input.GetKey (KeyCode.F)) {

particle.Play();//按下F键后,喷雾粒子开始发射

}

2.3.3  灭火

在灭火的过程中,经灭火器喷出的喷雾粒子和火焰粒子的碰撞发生之后,火焰粒子应该被销毁,具体实现代码如下:

Destroy(pardter,7f);//7f之后销毁火粒子

在喷雾的粒子完成一次播放之后,也应该被销毀。使用GetComponentsInChildren()将这个粒子系统的所有子粒系统的组件获取,赋给一个变量particleSystems。定义一个布尔型的变量allStopped,然后使用foreach (type identifier in expression) statement语句进入循环,再用if语句判断粒子是否被销毁。代码如下:

bool allStopped = true;

foreach (ParticleSystem ps in particleSystems)

{

if (!ps.isStopped){

allStopped = false;

}

if (allStopped)

GameObject.Destroy(gameObject);

}

这样,所有的喷雾粒子在播放完成之后,全部自动销毁。

3  结论

本文对船舶火灾情况和灭火流程进行了分析,并给出扑灭各种成因的火灾所使用灭火设备的对比,结合3dsMax建模和Unity 3D引擎技术,实现了使用二氧化碳灭火器对气体火灾进行灭火操作的人机交互虚拟训练系统。由于篇幅限制,其他形式的火灾和灭火设备等不在此文一一表述。该系统用于船舶虚拟消防训练时,可以节约训练成本,提高安全性和训练效果,有良好的应用前景。

参考文献

[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 火灾逃生系统寻路算法[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] 张茜. 船舶真火模拟训练控制系统的研究[D]. 镇江: 江苏大学, 2017.

猜你喜欢

粒子系统灭火器火焰
最亮的火焰
缤纷的火焰
利用GPU加速的粒子系统全球流场可视化系统设计与实现
漂在水上的火焰
如何使用灭火器
UE 4粒子系统与外部数据通信研究
吹不灭的火焰
透明灭火器
基于粒子系统的建模与仿真综述
GPU支持下基于粒子系统编辑器的特效技术研究