基于Unity3D和Vive的VR安全教育培训系统研究与实现

2021-06-08 08:57章国雁
安徽开放大学学报 2021年2期
关键词:安全帽头盔引擎

章国雁

(安徽工商职业学院 信息工程学院,合肥 230001)

虚拟现实技术可以生成逼真的虚拟环境,用户身处其中如身临其境般的感受,带来视觉、听觉、触觉等多感官的体验。目前主流的虚拟现实技术开发软件主要有Unity3D引擎和Unreal虚幻引擎,硬件主要有Facebook公司的Oculus和HTC公司的Vive等VR头盔,其中Unity3D引擎具有较好的跨平台特性,Vive头盔具有较好的显示效果,因此基于Unity3D引擎和Vive头盔的软硬件开发平台拥有了大量的开发者。

目前,国内外众多学者对于使用Unity3D引擎和HTC Vive头盔的开发应用做了大量研究,如李玉胜等基于Unity软件平台与HTC Vive虚拟现实套件,实现了Delta机器人沉浸式虚拟现实拆装环境;谭颖等通过Unity3D与HTC VIVE头盔、Logitech G29等设备进行交互,实现了虚拟现实驾考训练系统;徐雅微等实现了虚拟场景中对机械臂进行交互仿真操控;李海胜等实现连续式捣固车虚拟仿真驾驶系统。以上学者的研究对于促进虚拟现实技术在行业的应用起到了积极的作用。

一、系统概述

目前建筑工地的安全教育培训主要依赖于传统的理论教学、安全教育影片和行业培训等方式,安全教育方式效果较差;由于施工现场的危险性较大,现场体验式教学容易出现安全事故。考虑以上因素,使用虚拟现实技术模拟建筑施工安全教育培训是一条捷径,可以让用户得到较好的训练效果。

本系统采用Unity3D引擎作为开发平台,使用Maya三维软件构建三维模型和Photoshop图形处理软件处理贴图,结合HTC Vive硬件头盔进行展示及体验式培训,从而构建一套虚拟现实建筑安全培训系统,实现建筑施工安全知识讲解、安全帽佩戴检测、高空坠落模拟体验、触电模拟体验、火灾逃生体验、建筑工地塌方模拟体验、建筑设备操作安全体验等一系列实用的培训功能,让建筑行业从业者在保证人身安全的情况下,身临其境地接受安全教育培训,加深对安全的认知。系统全景画面如图1所示。

图1 系统全景画面

二、需求分析

虚拟现实安全教育培训系统的开发按照软件工程的思想进行划分,主要有四个阶段:(1)系统功能需求分析、前期贴图素材的拍摄、搜集和整理阶段;(2)Maya软件中进行建筑工地各类物体的三维模型创建和贴图材质设置,包括建筑物、安全帽、电箱、各类机械设备等;(3)资源导入Unity3D引擎进行虚拟场景的搭建、系统模块功能开发、UI界面的制作等;(4)结合HTC Vive头盔进行功能开发和测试。系统开发流程如图2所示:

图2 VR安全教育培训系统开发流程

(一) 系统实施

第一阶段,建筑工地实地考察调研系统功能需求,跟工地安全管理人员充分沟通,明确系统的模块功能;携带高清数码相机拍摄施工现场建筑、设备、工人穿戴情况等图片;收集工地现场CAD平面图。第二阶段,前期拍摄的图片需要用Photoshop软件进行图像处理;建筑物和其他各类三维物体,需要在Maya软件中进行三维建模,为了显示较为逼真的虚拟环境,需要对模型进行贴图展示,制作漫反射贴图展示纹理效果和法线贴图展示凹凸效果,两者结合可以让模型具有较为真实的感觉。第三阶段,在Maya软件中创建的资源导入到Unity3D引擎中,首先根据工地现场CAD平面图,搭建各类建筑物和设备,调整贴图效果,给虚拟场景添加灯光、天空盒等;给各类物体添加碰撞器,防止体验过程中人物与各类物体的穿插,造成不真实的体验效果。第四阶段,结合HTC Vive头盔进行系统交互功能开发,定点传送功能可以让用户在虚拟环境中移动位置、手柄点击佩戴安全头盔等功能,功能开发基于Steam VR插件和C#高级程序设计语言。进入最后的测试阶段,将所开发的系统输出到电脑端,结合Vive头盔进行功能测试。

(二)功能需求

根据需求文件,主要实现以下功能:1.安全头盔的佩戴检测功能。安全帽是进入工地必须要佩戴的设备,为了让工人养成良好的习惯,安全帽佩戴检测功能必不可少。2.高空坠落模拟体验功能。由于建筑工地为高空作业,具有非常高的风险性,高空坠落模拟功能让工人体验由高处不慎坠落的失重过程。3.触电模拟体验功能。模拟让工人操作设备不慎被触电的感觉。4.火灾逃生体验功能。模拟工地发生火灾时的应急处理,利用Unity3D引擎的粒子系统模拟火焰燃烧和烟雾效果,通过设置的逃生路线和提示界面,引导工人学习发生火灾时的逃生方法。5.机械设备安全操作体验功能。利用Unity3D引擎的触发器技术,警示在大型机械设备操作时,工人必须与大型机械设备保持一定的安全距离,不可站在设备的下方,避免发生机械碰撞伤害。6.用户界面的制作。利用Unity3D引擎的uGUI系统制作用户操作界面,方便用户的体验和操作。

三、系统关键技术

(一)uGUI系统

Unity新版UI系统提供了全新的图形化界面,功能强大,操作简便,在Canvas画布中可以快速创建Text、Image、Button等图形化控件,并在代码中进行显示效果的控制。本研究采用uGUI系统进行VR交互界面的制作,主要包含了系统开始界面、各类功能操作界面、场景目标点切换界面等。

(二)接触检测

接触检测技术经常称为碰撞检测技术,在现实世界中,人与物体、物体与物体之间物理接触时会发生实际碰撞,例如人无法直接穿墙而过。但在虚拟环境中所创建的三维模型,自身并没有这种碰撞效果,物体与物体之间是可以随意穿插的,因此这样的效果不符合自然界的真实物理规律,给体验者造成明显的不真实感受。碰撞检测技术可以较好地解决这个问题。Unity3D引擎提供了包含立方体检测器、胶囊体检测器等六种类型的碰撞检测器。开发者可根据物体形状选择合适的碰撞检测器,例如建筑物可以选择BoxCollider立方体碰撞检测器。

(三)粒子系统

粒子系统广泛运用于各类虚拟现实和仿真系统的特效制作中,通常一套粒子系统有大量的细微粒子组成,每个粒子具有各自的生命周期和效果,全部粒子组合呈现出整体的效果。在本系统中,使用Unity3D引擎的ParticelSystem粒子系统模块进行火焰效果的模拟,在火灾逃生模拟训练中,模拟工地发生火灾,引导工人进行逃生训练。

(四)物理引擎技术

物理引擎技术是通过物理引擎高效、逼真地模拟刚体碰撞等游戏中模拟真实的物理效果。Unity3D引擎内置了物理引擎系统,在坠落模拟体验功能中,通过给人物添加Rigidbody刚体组件,模拟人物受到重力的影响而下坠,从而产生失重体验。

(五)遮挡裁剪技术

遮挡裁剪的主要思想是当一个物体被其他物体遮挡住而不在摄像机的可视范围内时不对其进行渲染。Unity3D引擎通过遮挡裁剪技术可以有效减少场景的DrawCalls数量,提高帧频。系统采用遮挡裁剪技术的处理过程:1.在Occlusion面板中,勾选Occluder Static和Occludee Static选项,进行烘焙处理。2.在Hierarchy窗口中选择需要进行遮挡裁剪处理的摄像机,点击Visualization可视化选项卡,可以发现Scene窗口中的物体进行了遮挡裁剪处理,经过对比,经过遮挡处理后的系统帧频更高,运行更为流畅,体验效果也更好。

四、系统实现

系统设计致力于解决建筑施工中存在的安全教育培训痛点,提高建筑从业者的安全意识水平,达到安全施工的目的。主要包含的功能有:安全知识讲解、安全帽佩戴功能检测、高空坠落模拟体验、大型机械设备预警、火灾模拟逃生训练、塌方事故模拟体验、触电模拟体验等功能。其部分核心功能如下:

(一)安全帽佩戴功能

安全帽佩戴检测功能的算法思路为,当程序检测到用户点击了手柄按钮的前提下,用户可以通过扣动扳机实现抓取安全帽,并进行佩戴操作,其核心代码如下所示:

//进行射线检测

if (Physics.Raycast(myRay, out myHit)) {

distance = Vector3.Distance (myHit.point, this.transform.position);

raycube.localScale = new Vector3 (0.002f, 0.002f, distance);

raycube.localPosition = new Vector3 (0, 0, distance / 2);

//判断是否点击按钮

if (myHit.transform.name == "Button"){

//判断是否扣动扳机

if (rightHand.GetPressDown (Valve.VR.EVRButtonId.k_EButton_SteamVR_Trigger)){

MoveHelmet ();//调用移动安全帽函数

helmet.GetComponentInChildren().enabled = false;

cube.GetComponent().enabled = false;

CanvasHelmet.SetActive(false);

}

}

}

//移动安全帽函数

void MoveHelmet (){

helmet.transform.localPosition = Vector3.MoveTowards(helmet.transform.localPosition, new Vector3(cube.transform.localPosition.x,cube.transform.localPosition.y,cube.transform.localPosition.z),speed * Time.deltaTime);//进行移动操作

helmet.transform.parent = cube.transform;

helmet.transform.localPosition = new Vector3(0,0.45f,0);

helmet.transform.localEulerAngles =new Vector3(0,0,0);

}

(二)触电模拟功能

触电模拟功能的算法思路为,判断当用户距离电箱距离过近时,如果用户进行扳机操作,则设置手柄为震颤状态,模拟触电效果,其部分代码如下:

//判断用户与电箱的距离小于1时

if (Vector3.Distance (this.transform.position,ElectricBox.transform.position) < 1.0f) {

//判断是否进行扳机操作

if (rightHand.GetPressDown (Valve.VR.EVRButtonId.k_EButton_SteamVR_Trigger)) {

isTrigger = true;//设置手柄震颤状态的标志位为真,手柄进入震颤状态

}

}

触电模拟场景如图3所示:

图3 触电模拟场景

五、结语

本文对基于Unity3D和HTC Vive头盔的VR安全教育培训系统进行了研究,提供了建筑行业安全教育培训的新途径。相信随着虚拟现实软、硬件技术的发展,采用虚拟现实技术的培训系统将会越来越广泛,本系统的开发为虚拟现实应用技术的推广提供了积极的作用。

猜你喜欢
安全帽头盔引擎
点燃企业发展的“引擎”
打造信息化建设的“党建引擎”
车坛往事4:引擎进化之屡次失败的蒸汽机车
爆笑四格
危险
便携的折叠头盔
汉字戴头盔
时光减速头盔
创意头盔
“多功能”安全帽