基于UE4蓝图的火灾逃生体验系统关键技术研究

2020-04-17 07:38段林涛
关键词:发射器灭火器蓝图

李 楠,连 淦,段林涛

(北华航天工业学院,河北 廊坊 065000)

0 引言

对包含VR 硬件套件的各类虚拟现实体验系统而言,虚拟场景以及交互体验的仿真程度一直是开发者们关注的焦点。本文阐述一个基于UE4 蓝图开发,并采用HTC vive VR 套装作为交互外设的火灾逃生虚拟体验系统的关键技术。该系统场景中的虚拟人物采用第一人称视角,场景描述的环境为家居环境。系统设计和开发的初衷是帮助用户通过虚拟体验,掌握家居环境中火灾逃生的基本知识,学会火灾逃生的方法。重点阐述基于HTC vive手柄的复杂交互以及基于UE4 粒子系统的烟雾特效的设计和实现。

1 相关技术简介

UE4是一款由Epic Games开发的次时代游戏引擎,多用于开发第一人称射击游戏。其蓝图系统是一个基于面向对象的、采用节点界面的、可视化的游戏脚本系统。开发者只需要在引擎编辑器中创建相关功能模块结点,并按照一定的实现逻辑连接各节点,便能实施、实现各种行为和功能。这些节点包括每个实例的对象构建、函数、事件和变量。蓝图为开发者提供了以往仅供程序员使用的所有概念和工具[1]。

HTC vive 是由HTC 公司与Valve 公司联合开发的一套VR 硬件套装。其硬件部分集合了VR头显(虚拟现实头戴式显示器)、运动跟踪手持控制器(简称手柄)和定位基站,软件方面则由Valve公司提供驱动程序,并与Steam 平台兼容。其手柄具有多种按键,且布局合理,可以提供丰富的交互功能[2]。

2 手柄交互的实现

本虚拟体验系统启动后,用户可通过手柄选择进入3种体验模式,分别为教学模式、指导模式和自由体验模式。教学模式中,以动画的形式并结合语音和文字提示,为用户演示安全逃生的全过程。演示时可以选择第一人称或第三人称视角;指导模式下,用户在语音和文字的指导下,自行体验逃生过程。自由体验模式下,用户在没有任何提示信息和指导情况下自行体验逃生过程。

2.1 为虚拟人设置手柄

在系统启动后的初始关卡中,用户需要选择上述3 种体验模式之一。由于此时的关卡与3 种体验模式下的场景不是同一个关卡,因此需要在初始关卡中为用户创建一个没有对应模型的虚拟角色,使用户在VR 模式下可以选择不同的体验模式。此时使用Pawn 蓝图类实例对象,作为用户操作的对象,并为其添加VR模式的手柄来进行选择操作。

首先为创建的Pawn 添加Scene 组件,即两个手柄对象(Controller_L 和Controller_R),然后分别为这两个对象添加静态网格模型,便于与手柄模型绑定。为了使场景中的手柄模型与用户手中的手柄同步运动,使用相关的蓝图结点来对引擎渲染时每一帧图像上手柄的参数(位置、旋转等)进行设置。

2.2 手柄选择菜单功能的实现

手柄能跟随用户移动后,为了给手柄添加选择菜单的功能,采用手柄射线的方式,即为手柄添加一个射线光束,射线光束照射到的位置即选定的位置。这样提高了选择的准确性,方便引入引擎的碰撞检测功能。在实现上,第一步为手柄创建射线。获取手柄模型在场景中的位置,并根据手柄模型向前方向的单位向量,通过延长该向量来获取向量终点位置。手柄模型位置与该终点位置相连所形成的线段即所需要使用的手柄射线。其视觉效果像是由场景中手柄模型发出的一条光线。在设定好该射线的碰撞通道后,创建射线步骤结束。左手柄射线的具体蓝图实现如图1所示。

图1 左手柄射线的蓝图

第二步,根据手柄射线与菜单UI碰撞检测后的结果,选择进入不同的关卡。在进入系统时的3D UI 场景中,根据每个组件对应的功能及关卡,重命名了各个组件。在射线发生碰撞检测之后,获取发生碰撞的物体对象,并得到其相关的属性,进而获取其Name 属性。然后与重命名的组件名进行对比,若名字相同则触发关卡的跳转或相应动作,否则不做动作。具体蓝图实现如图2所示。

图2 手柄选择功能的蓝图实现

2.3 模拟灭火器操作的交互设计与实现

模拟灭火器操作是体验系统中的重要环节。拟采用左手柄拾取虚拟灭火器,在持续按住左手柄扳机的同时,通过右手柄的扳机触发编辑好的灭火器操作动画。即场景中的左手握住灭火器握把,右手拔掉拉环,然后拿起软管喷出灭火剂烟雾。

在拾取功能的设计上,采用前述的手柄射线的碰撞检测方式。通过调整射线初始长度,将拾取过程模拟成两个模型的碰撞检测。实现时,在当前场景中为手柄再次创建手柄射线,并进行射线的碰撞检测,以此获得与射线发生碰撞的物体(此处即灭火器)的相关信息。此时还需要对虚拟灭火器做特别的处理,即为灭火器的Tags 创建一个特别属性。当获得被碰撞体的相关信息时,可通过这个Tag 属性来判断其是否是灭火器。在确定是灭火器之后,通过使用UE4自带的AttachToComponent 结点,将灭火器模型附着到手柄上。具体蓝图实现如图3。在为手柄附着了灭火器模型之后,由于这两个模型被绑定在一个socket 插槽中,还需将手柄模型的可见状态设置为不可见。

图3 手柄拾取功能的蓝图实现

在触发操作动画功能的实现上,首先对是否拾取了灭火器做判断。由于在实现拾取功能时,是根据射线碰撞检测来做的。但是碰撞检测的类型是静态模型,此类模型在场景中有很多,不只是一个灭火器。此时需要判别前述创建的Extinguisher变量,如图3 所示。Extinguisher 是一个模型组件变量(即灭火器模型),在灭火器模型被拾取后,将灭火器对象存储到了Extinguisher 变量中。因此需要使用Cast To 结点判断Extinguisher 变量中的对象是否能转换为灭火器对象类型。若能转换,则播放灭火器的相应动画;若无法转换,则不作任何的操作。

在前述灭火器的操作动画中只表现了虚拟场景中手对灭火器的操作动作。为了在VR 模式下模拟出真实效果,需要使灭火器能喷射出白色灭火剂,并形成烟雾。烟雾部分的实现采用UE4 的粒子系统。为此,我们为动画资源添加了动画通知,在动画通知中添加所需要的粒子特效,最终实现在播放操作动画后,灭火器开始喷射烟雾粒子的特效。

3 粒子特效的实现

本系统中的烟、火焰以及灭火器的喷雾效果,均采用UE4 的粒子系统实现。粒子系统是1983 年由Reeves W.T 提出的一种可用于计算机图形、动画制作和游戏物理特效领域的技术。粒子系统能产生大量微小的粒子,每一个粒子都可以具有不同的颜色、形状、大小、透明度、运动速度等属性及特定的生命周期。在系统中,粒子不断的运动、不断改变其状态。粒子通过组成粒子群来实现建模对象的属性和运动状态变化,是一个可控的随机过程[3,4]。

UE4引擎内嵌一个功能强大的粒子系统。可以将其类比成一个为了实现各种特效而将各个组件包含在一起的一个容器。开发人员可通过该系统创建类似于火焰、爆炸、能量光束等的粒子特效。UE4的粒子系统采用一个模块化的粒子特效编辑器——Cascade(级联)来编辑各种对象的属性[5]。

UE4 的粒子系统包含许多粒子发射器(Particle Emitters),开发人员可以在一个系统中使用多个发射器来创建粒子特效。每个发射器对应一个单独的TypeData(类型数据)模块,该模块决定了发射器产生的粒子类型,包括平面粒子、光束、条带、网格物体、PhysX 等。除了TypeData 模块外,每个发射器包含任意多个影响其粒子行为(比如位置、速度、大小、颜色等)的模块。下面主要探讨灭火器烟雾粒子特效的实现,烟和火焰粒子特效的设计实现原理与此相似,因此不再赘述。

3.1 灭火器烟雾粒子的材质配置

在灭火器烟雾的实例中,首先创建各种粒子的材质,包括颗粒与烟雾。为了得到更真实的视觉效果,我们调高了所有粒子的材质亮度。创建颗粒材质时,首先打开Material 选项,将Blend Mode 设置为translucent 即透明,将Shading Mode 设置为Unlit 即无灯光的。这是粒子的基础设置。创建烟雾的材质时,基础设置与颗粒材质一样,只是在烟雾的材质中使用了其特有的贴图,以便达到更真实的效果。其粒子材质的蓝图如图4所示。

3.2 灭火器烟雾粒子发射器的设置

图4 烟雾粒子的材质设置蓝图

在粒子属性界面创建颗粒发射器,将事先制作好的颗粒材质添加到Required 下的Material 中作为基础粒子。然后更改颗粒数量,在Spawn.Rate 的constant属性中设置单位时间内颗粒的发射数量,以形成大量喷射的效果;在start velocity 下distribution项中设置粒子在x、y、z 三个方向上的发射速度。在灭火器实例中,粒子在x 轴的速度大于其他方向的速度,从而形成横向以及向周围喷射的效果,进而控制粒子的发射距离与发射速度。在lifetime 下的distribution 项中设置粒子的最大、最小生存时间,使粒子在场景中得到合理的消亡处理,避免形成恶性堆积。

为模拟现实中灭火器喷雾的效果,先创建多个小型的颗粒发射器,通过修改各个发射器的initial size 下的distribution 属性来调整颗粒的大小;复制这些发射器,然后创建一个喷雾的主发射器,这样叠加的效果更加贴近灭火器实际喷射的效果。创建的主发射器,其粒子基础属性的设置方法与颗粒的发射器设置方法相同,如根据颗粒的发散角度,调整烟雾在y 轴、z 轴的速度,接着调整x 轴的速度,加大喷雾的喷射距离。除此之外,需要通过Re⁃quired 中的Emitter Origin 属性调整发射器的初始位置,使烟雾效果在颗粒发射后的适当位置出现,最终形成喷雾效果。

4 结语

本体验系统在使用HTC vive 手柄实现交互功能方面,除了实现3D 菜单选择、灭火器操作外,还实现了在场景内虚拟人的长距离快速移动(瞬移)等功能;系统中的粒子特效除了上文中提到的灭火器烟雾、火焰外,还有水流以及烟的特效。本系统实现了预期功能,在场景的画面质量、交互便利性、帧率、流畅程度等方面达到了预期效果。未来我们除了进一步优化场景中的模型等以外,将采用C++语言编程实现并替换目前系统中采用蓝图实现的部分功能,以实现更优的视觉效果。

猜你喜欢
发射器灭火器蓝图
蓝图
五年蓝图
中国LG6型40毫米半自动榴弹发射器
2012款汉兰达车遥控发射器识别码注册方法
如何使用灭火器
蜘蛛丝发射器
雷电发射器
我们的健康新蓝图
透明灭火器
绘好国家级健康新蓝图