2019年
软      件
2019, V ol. 40, No. 5
基金项目: 江阴职业技术学院科研课题“基于VR 的消防训练系统研究与开发”,项目编号:17E-JS-26
作者简介: 何隽(1979-),女,江阴职业技术学院讲师,研究方向为多媒体技术、虚拟现实技术;金志泉(1978-),男,江阴职业技术学院实验师,研究方向为交互媒体、虚拟现实技术。
Unity 3D 船舶虚拟消防训练系统
灭火功能设计与实现
何  隽,金志泉
(江阴职业技术学院 计算机科学系,江苏 江阴  214405)
摘  要: 针对船舶火灾成因的特殊性、消防训练的局限性和危险性,构建了船舶虚拟消防训练系统,供船员进
行安全有效的人机交互船舶灭火训练。系统采用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):47-52
Design and Implementation of Extinguishing Function of Unity 3D Virtual
Fire Fighting Training System for Ships
HE Jun, JIN Zhi-quan
(Department of Computer Science, Jiangyin Polytechnic College, Jiangyin 214405, China )
【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],使船舶消防人员在近似实战的逼真环境中进行大量具有实效的模拟训练。上世纪七十年代起,美国为首的发达国家已对船舶火灾虚拟训练系统开展了广泛
第40卷  第5期    软    件
48
《软件》杂志欢迎推荐投稿:cosoft@vip.163
的研究[3-4]。国内,各高校研究消防模拟已取得一定成果[5],但很少涉及针对不同类型火灾的形成和扑灭机制。
本系统采用被广泛运用于游戏和虚拟现实开发[6]
,并具有兼容操作系统、跨平台发布并部署、人机交互功能强大等特点的Unity 3D 三维游戏引擎进行开发[7]
,从研究船舶火灾成因出发,用粒子系统模拟各种不同类型的火焰,选用针对性的设备有效扑灭火灾,从而实现安全有效的船舶虚拟消防训练。
1  船舶虚拟消防训练系统总体设计
1.1  系统功能分析
船舶虚拟消防训练系统分为全船漫游、消防设备选择和消防训练3个部分。全船漫游通过操作控制虚拟
消防人员行走,熟悉船舶的各个区域的过程。消防设备选择使用是对多种消防设备器材的功能理解,以及对其操作程序的熟练。消防训练则包含了侦查火灾情况、选取适合灭火的设备、使用相应设备灭火操作,以及在火灾现场灭火的同时,拾获重要资料和救援生命体对象等。船舶虚拟消防训练所在的区域有住舱、厨房、主机舱、机房和驾驶室等。这些都是在系统中火灾发生的地点,并且每次任务启动后,都会根据实际情况在相关地点随机产生2-3个不同的火灾情况,等待消防人员进行决策。虽然这些区域布局不同,火灾成因不同,使设备选取和灭火过程有所区别,但是消防训练的流程基本上是通用的:任务提示→灾害侦查→设备选取→灭火操作→灭火成功,如下图1所示:
图1  船舶消防训练流程
Fig.1  Ship Fire Training Process
1.2  系统整体设计
以中国第三代航天远洋测量船远望7号的外形,使用3dsMax 软件建立三维模型。同时建立三维消防人员模型,进行骨骼绑定和行走动画制作,再搭建出住舱、厨房、主机舱、机房和驾驶室等三维实体模型,制作消防设备三维模型。利用Unity 3D 软件,构造船舶的三维虚拟场景。利用C#语言的功能,提供交互功能,通过鼠标和键盘,用代码实现受训人员控制虚拟消防人员漫游整个船体,熟悉消防场景,到特定区域获取消防设备,学习针对不同火灾成因,使用不同的消防设备及相关操作方法。
船舶火灾从形成原因和燃烧物的不同来区分,主要有以下几个类型。用于船舶机械设备的润滑油属于易燃、可燃液体,喷滴在船上机器的蒸汽管、排气管或者锅炉外壳等热表面,可形成液体火灾(以下简称液体火),另外还有燃油泄露或废油滴漏等情况形成的火灾也属于此类。如有金属互相撞击摩擦产生的火星,遇到石油气体或者其他可燃性气体发生的火灾等称为气体火灾(以下简称气体火),容易发生爆炸。机舱内存在大量的电器设备,属于带电物体和精密仪器,如发生线路短路、电线老化或电机过载过热等情况,引起电器设备着火,称为电器火灾(以下简称电器火)。易燃固体物品,如木屑、纸张、衣物等,遇到火星燃烧或者沾染油污后通风不良自燃等情况,则是固体火灾(以下简称固体火)。还有一些可燃金属,如钾、钠、镁燃烧形成的火,称为金属火灾(以下简称金属火)。船舶火灾因为船舱载荷集中,散热困难,并且容易蔓延,因此要在火灾发生时及时查明火灾类型,准确快速选择对应的消防设备,尽快开展灭火行动。其中,最重要的是对灭火器消进行合理选择,规范使用。灭火器的使用规程见表1。
除了灭火器,当然还要配合使用其他设备。如消防战斗服,可用来在灭火过程中对躯干、手臂和腿进行热防护;呼吸器在充满浓烟和毒气的环境下可提供给消防人员充足的氧气;测温仪,可对火灾发生时周围温度进行精确测量;消防斧则切断蔓延的火势,或劈开变形的门窗;消防水管和水可以用来扑救已经蔓延的火势。
对应选择的消防设备进行灭火的过程中,系统UI 界面会给出相关提示正确或者指出错误的功能,引导受
训者作出正确的判断,在虚拟系统中完成相应的消防任务。
特效设计何  隽等:Unity 3D 船舶虚拟消防训练系统灭火功能设计与实现
49
《软件》杂志欢迎推荐投稿:cosoft@vip.163
表1  灭火器使用规程
Tab.1  Rules for the Use of Fire Extinguishers
消防设备 适用范围
不适用情况 使用方法
干粉灭火器
油火、气体火
电器火、固体火
拔掉保险销;左手握喷管,右手提压把;在距离火焰2米,右手压下压把,左手拿喷管左右摆动,喷射干粉覆盖整个燃烧区。 泡沫灭火器 固体火、油火 电器火、气体火
右手捂喷嘴,左手执筒底边缘;灭火器呈颠倒垂直状态,上下晃动,放开喷嘴;右手抓筒耳,喷嘴朝向燃烧区,离火源2-3米远喷射,不断前进,兜围火焰喷射,直至扑灭。
二氧化碳灭火器 油火、电器火、气体火 固体火、金属火
拔掉保险销;站在距火源2米的地方,左手拿着喇叭筒,右手用力压下压把;对着火源根部喷射,并不断推前,直至把火焰扑灭。
2  系统实现
在本消防训练系统中,包含多个舱室、多种成因的火灾,使用的消防灭火设备也不尽相同。由于篇幅限制,在本系统实现的介绍中,重点以气体火灾的为例,阐述气体火焰粒子和二氧化碳喷雾粒子的模拟,及操作二·氧化碳灭火器灭火的过程。
2.1  场景搭建和灭火器制作
场景是虚拟现实系统研究的基础,整个船体作为主场景,然后选择主机舱作为模拟气体火灾发生的次场景。首先使用3dsMax 按照比例完成主机舱内部三维模型和干粉灭火器模型[8]。干粉灭火器的罐体主要是采用圆柱体,转换为可编辑多边形,将圆柱顶端作为选择面,插入5 mm ,挤出15 mm ,再次插入插入2 mm ,选择中心面挤出,挤出 120 mm ,即可形成罐口。罐子肩部和底角部分,可全选圆柱边线,右键选择边面切角,点击第二行,连接边分段选择5即可完成圆滑的效果。罐体肩颈底部及切角属性见图2所示。其他部分类似,不再赘述。
图2  干粉灭火器罐体制作
Fig.2  Manufacture of Dry Powder Fire
Extinguisher Tank
接下来按照真实机舱和灭火器照片制作贴图,再渲染得到具有贴图的三维模型,最后导入到场景中准备
进行交互。将干粉灭火器设备放到场景中,并适当调整灭火器大小以便使用,如图3所示。
图3  主机舱场景
Fig.3  Main engine room scenario
2.2  粒子特效实现
粒子系统最先由Reeves WT [9]在1983年提出,是至今最成功地模拟不规则物体的算法之一,可以较好地还原火焰、烟雾、水汽、爆炸、水流等自然现象[10-11]。粒子系统中的粒子具有形状、大小、颜、透明度、运动速度、运动方向和生命周期等属性,可以模拟随时间不断产生、生长和消亡的动态的粒子效果,如火焰、烟雾和云雾等 2.2.1  火焰特效
火灾的本质是燃烧,是由燃料着火形成的,方式可以分为自着火和强迫着火[12]。
在主机舱场景中,发生可燃性气体如天然气、甲烷、乙烷、丙烷、氢气等泄露,遇到金属摩擦撞击产生的火星,就可能生成气体火,属于强迫着火。本系统设计的火焰特效主要是表现着火后,气体火焰的外在表征。但是气体火焰形状和分布及其不规则,形式变化多端,不能用常规的几何模型来进行模拟。而Unity 自带
的粒子系统可以比较好地描述这种可燃气体与空气中的氧气混合后迅速转化为燃烧产物的化学过程,及过程中出现的可见光和烟雾等的物理表现,并着
第40卷  第5期    软    件
50
《软件》杂志欢迎推荐投稿:cosoft@vip.163
重表现后者。
首先模拟真实的气体火焰可见光,先创建粒子系统。其次调整粒子系统面板中的基本模块,调整模块中的初始生命周期(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 )这三个参数。所以,先调整喷雾粒子的发射方向,然后再调整其基本模块参数。
图4  火焰可见光和烟雾的模拟过程
Fig.4  Simulating process of flame visible light and smoke
本系统研究的二氧化碳灭火器的灭火原理是隔绝氧气和冷却降温,二氧化碳灭火的主要作用是冲淡氧,降低空气中氧浓度。同时液态二氧化碳从钢瓶释放出来,压力突然降低,迅速吸热蒸发,覆
盖在燃烧物上的干冰气体,也起到一定的冷却作用,从而达到灭火的目的。因此,在二氧化碳喷雾特效的表现上还需要加上烟雾效果,具体效果见图5所示。
何  隽等:Unity 3D 船舶虚拟消防训练系统灭火功能设计与实现
51
《软件》杂志欢迎推荐投稿:
cosoft@vip.163
图5  二氧化碳喷雾粒子模拟过程
Fig.5  Carbon dioxide spray particle simulation process
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)) {  ansform.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<Particle-System>()将这个粒子系统的所有子粒系统的组件

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。