基于Unity3D 和Vuforia 的灾害模拟游戏

2021-07-16 10:07吴天成虞嘉龙高子卓姚建华冯天歌
科学技术创新 2021年19期
关键词:摄像机对象现实

吴天成 虞嘉龙 高子卓 姚建华 冯天歌 薛 韡*

(防灾科技学院信息工程学院,河北 三河 065201)

1 概述

增强现实是通过平面识别、图片识别、空间识别等方法将虚拟世界中的物体对象映射到现实世界中的新兴技术,它相较于虚拟现实不同的是,虚拟现实注重沉浸式的体验,而增强现实注重虚实结合,实时交互,以达到提升内容趣味性、增强用户现实体验的目的。随着技术的发展,增强现实已经极大的融入进了我们的日常生活中,如AR 地图导航、AR 试衣换装,也有风靡一时基于增强现实技术的pokemon go 游戏等。

本项目基于Unity3D 引擎和Vuforia 平台,以近年来常见的自然灾害为主题,将救灾和逃生作为核心玩法,制作移动端的AR 游戏。通过增强现实技术将灾害场景拉近到玩家眼前,在玩家玩游戏的同时,激发他们认识了解自然灾害相关知识的学习兴趣。

2 技术介绍

本项目使用了Unity3D 游戏引擎和Vuforia AR 制作平台提供的插件。其中Unity3D 是Unity Technologies 公司制作的一款具有良好跨平台性、以C#为编程语言、在当下中国市场大火的2D/3D 游戏制作引擎;Vuforia 是实现增强现实技术的平台,开发者可以使用它提供的平面识别、空间识别、图片识别等完成AR产品制作,本项目主要通过使用Vuforia 为Unity3D专供的插件,完成了平面识别,图片识别展示AR。

2.1 平面识别

平面识别需要经过以下步骤:运动跟踪→平面检测→深度计算→虚拟对象渲染→创建锚点→环境光线及强度检测。

运动跟踪:AR 应用通过用户手机摄像头摄取到的图片进行两个任务:第一个任务实时计算摄像头的姿势,将在AR 项目制作时Unity3D 中的虚拟摄像头与现实摄像头保持对齐,保证虚拟对象渲染出来时的位置角度等与Unity3D 中设置的位置角度一样;第二个任务是为捕捉到的现实世界图像设置特征点。

平面检测:AR 应用根据在运动跟踪环节中设置的特征点,认识在现实世界中哪些是平面和垂直面。

深度计算:该环节依赖于摄像机的配置。AR 应用根据RGB摄像机创建深度图,计算摄像机到目标点的距离,从而可以让虚拟对象更好的和目标进行贴合,设置虚拟对象相对于目标的位置。

虚拟对象渲染:AR 应用会根据之前的几个步骤获得的数据,设置虚拟对象的位置,角度以及距离摄像机的距离,将虚拟对象渲染到现实世界中并覆盖摄像机摄取到的原始图像。

创建锚点:锚点用于虚拟对象相对于现实世界中的定位,它使摄像机在移动过程中,所创建的物体不会随着位置或角度的变化而发生改变,同时也保证虚拟对象在现实世界中的渲染稳定性。

环境光线及强度检测:在Unity3D 中,可以设置虚拟对象的材质是否为受光材质,如果不是,虚拟对象的渲染将不会受到光照的影响而改变自身表面的明暗程度;如果是受光材质,虚拟对象除自身在Unity3D 中的添加的光源影响外,AR 应用还会采集环境中的光线强度,对虚拟对象进行平均增强和颜色矫正,使虚拟对象最终在现实世界中的渲染受到环境光的影响,以增加虚拟对象的真实感。

2.2 图片识别

图片识别也叫增强图像,需要以下步骤完成:数据库增添图像→图像对比→建立坐标系→虚拟对象渲染→创建锚点→环境光线及强度检测。

数据库增添图像:先在AR 应用中创建一个数据库,并在数据库中添加自己想要识别的图片。在Vufroia 中会根据添加的图片进行评级,评级的标准依据于特征点的算法,图片的纹理越丰富,对比度越高,他能认定的特征点就越多,评定级数也就越高,如果评定级数较低,就代表该图片识别度过差,开发者需要更换图片或对图片进行修改。

图像对比:在用户使用AR 图片识别功能时,类似于人脸识别算法,AR 应用会通过摄像头摄取到的图像中的有效特征点和自身数据库中的图片特征点进行比对,如果不同,则识别失败;如果相同,则会进行下一步。

建立坐标系:AR 应用会根据图片识别时摄像头相对于图片的姿势以及开发时在Unity3D 中的虚拟坐标,在现实世界中建立坐标系。

虚拟对象渲染:将在Unity3D 中创造的虚拟对象依据于虚拟坐标系中的位置,相对于刚建立的坐标系显示出来,并覆盖摄像机摄取的原始图像。

创建锚点:在物体出现的同时,AR 应用会在该位置创造一个锚点,继续跟踪该点的位置,角度等数据变化,以便于摄像机移动时哪怕拍摄的目标图片相对于摄像机的角度位置发生变化,之前创造的虚拟对象的位置和角度也会随着图片改变。

环境光线及强度检测:和平面检测一样,让虚拟对象的光照渲染受到周围环境光的影响,增加真实度。

3 项目内容

在AR 灾害模拟游戏中,创作了3 个小游戏,分别以常见的自然灾害:火灾、地震以及洪水为主题,各个游戏场景都尽量贴近现实。在火灾、洪水小游戏中,玩家扮演施救者,抵御灾害并将npc 从火灾,洪水中救出,同时模拟灾害的真实性,游戏难度会随着游戏时间的增加而加大;在地震游戏中,玩家扮演逃脱者,躲避重重障碍,顺利逃离到安全地点。

3.1 AR 灭火游戏

内容:

玩家通过操控AR 相机下的消防水泵,对于出现在周遭的火情进行消防灭火行动,玩家需通过调整手机的位置将水泵喷口对准火源进行灭火抢救行为,若灭火不及时,火势会逐渐扩大,最后判定此次灭火抢救行动失败。

在游戏整体上是采用了ARFPS 类型的射击游戏的思想,玩家通过拿着手机进行移动,来参与灭火行动,程序通过感应玩家上下晃动手机,来控制水的射击方向,增加玩家的体验感和新鲜感。

游戏设计的目的是为了教育玩家,当火情来临时,我们也可以采取的应对措施以保护我们自身的生命财产安全,当我们置身于火情之中,可以运用身边的消防器具扑灭火势。

技术:

本游戏主要通过Vuforia 的ARCamera 功能实现,在世界坐标下产生火情,由玩家操控相机位置对准火源实现灭火。

游戏通过获取手机陀螺仪移动参数的方式,绑定ARCamera的移动,代码部分如图1 所示。

图1 ARCamera 绑定手机陀螺仪移动

陀螺仪可以对转动、偏转的动作做很好的测量,这样就可以精确分析判断出使用者的实际动作以实现在游戏中模拟真实人物的移动,以将虚拟现实中的火苗同步于现实世界的坐标中,方便玩家进行不止固定于一处的灭火模拟。

在灭火的行为上,通过Unity3D 中的Particle System 进行火焰、水流、以及烟雾的制作,通过Particle System 的collision 中的send collision message 选项,与火焰进行粒子间的碰撞检测,实现水扑灭火苗的功能。

在拓展功能方面,运用了Vuforia 的ImageTarget 下的VirtualButtons,设计了玩家通过扫描特定的现实中的灭火器,并通过触碰灭火器来在游戏中实际获得灭火器这一道具的行为,增加游戏的多变性。

在游戏管理流程方面,设立了GameManager 与UIManager两个脚本进行管理控制,项目中导入了DOTween 辅助进行UI界面的设计。通过GameLevel 绑定初始生成的火苗数量,火势蔓延的速度,来为游戏进行关卡设计,增加游戏的可玩性。

3.2 AR 地震逃生游戏

内容:

玩家通过AR 相机扫描标识图,扫描成功后会在标识图表面生成启动游戏的虚拟按键,按下按键所在的标识图区域即可启动游戏。游戏开始时,在标识图的上方会生成地图,人物在地图末端自动开始向前运动,随着人物的前进,地图上还会随机生成障碍物。而标识图表面还设有控制人物左右移动的虚拟按键,玩家需在设备外对识别图所显示的按键区域进行遮蔽,来让人物顺利规避障碍物,从而使人物顺利前行。若人物未能及时规避障碍物,则会因未能及时到达安全地点而视为游戏失败。游戏大体与跑酷游戏类似,操作简单,玩家可通过操控人物移动的过程中,不再只是单一视角进行观察体验,还可以通过调整设备位置来进行多角度的游戏体验。

技术:

本游戏是通过扫描5.12 防震减灾日的标识而触发的AR 小游戏,游戏主要运用了Vuforia 的ImageTarget 图片识别功能,通过设备摄像头对识别图的扫描,并在成功识别后在设备界面生成已经创建好的虚拟游戏场景。

本游戏还使用了ImageTarget 的VirtualButtons 虚拟按键功能,将现实图片和虚拟场景中的人物串联起来,在现实图片的特征明显处设置虚拟按键,通过玩家对现实图片的特征处遮掩,识别图片的哪一部分特征点消失,从而触发该位置按键的功能来控制设备中人物的左右移动。

在预置的虚拟游戏场景方面,运用了Unity3D 的碰撞检测和触发检测,为游戏场景中的人物、车辆、路牌、地面等多个物体添加碰撞体,在人物与其他物体接触时能产生现实的阻挡和减速效果。为了实现人物持续的前行,在人物与指定地面的碰撞体接触的时候,会调用相应函数在场景中添加新路段,对道路进行延长,使得人物能持续前行,如图2。

图2 GameManager 对添加新路段的函数实现

而新道路生成的物体,使用了Game Manager 对于随机生成物体进行管理,为出生点、到达点等触发检测的物体设立了列表list,便于人物在触发碰撞检测的时候,调用对应列表的物体进行生成。

3.3 AR 洪水建堤游戏

内容:

此游戏以为加强大家的防洪意识而创作,通过开始的UI 界面,开始游戏。根据海拔,水位以及方块的搭建来判断游戏的进程。居民目前的海拔高度会受答题情况影响,如果水位于搭建的“堤坝”高,且高于居民海拔则游戏失败,如果水位达到峰值且游戏任然未失败则游戏胜利。

技术:

通过Particle System 添加下雨的特效,符合洪水来临前暴雨的情况,增强情景代入感和紧张感,不会使游戏场景太过单一。首先准备一张雨点图片,将他设置成材质球。shader 用legacy shader/particles/additive,选贴图,把颜色改成深蓝色。创建一个粒子系统,命名为rain,把rotation 的x 从-90 改成90。把renderer 里的material 改成自己新建的材质,粒子就会变成雨点,将shape 改成box,形成降雨。duration 和start lifetime 来调节循环周期和粒子存活时间,start speed 和gravity modifier(重力增强)调节速度,max particles 调节粒子的密度(模拟雨量大小),rate over time 同时影响了密度和速度,最后通过start size更改雨点大小。

俄罗斯方块代码的实现。通过向下滑屏来控制方块下落,向左、向右控制方块右移、向上控制旋转。建立代码Queue 来控制积分面板,建立一个新的队列。使用Random.Range 来随机生成队列,找到第一个赋值给currentPieces,并销毁在随机生成中的第一个,利用递归将其移到游戏框内并实现循环。当游戏框与下一个刚生成的方块接触则执行Time.timeScale = 0f 终止游戏。最后建立二维数组来遍历目前铺满的最高度,当高度小于Slider 中value 时游戏失败。

UI 界面的设置。是用UI 中Slider 制作海拔与水位,控制value 的大小控制填充状态。建立三个Panel 界面作为问题的面板设置按钮作答。结果将影响居民撤离海拔的高度,即海拔slider 的value,在水位上升时若超过堤高,则游戏失败。

4 项目结论

增强现实技术提供了新的内容展示方式,改变了人们只能通过平面演示的现状。本项目将游戏和增强现实技术相结合,极大的提升了游戏的互动性和立体感,游戏以自然灾害为主题,让玩家能够在玩游戏的同时,通过在现实生活中渲染出的灾害场景,更立体直观的了解灾害来临时毁灭性的情景,在游戏娱乐的同时,不忘激发玩家对自然灾害知识的学习兴趣。

猜你喜欢
摄像机对象现实
晒晒全国优秀县委书记拟推荐对象
我对诗与现实的见解
漫画:现实背后(下)
攻略对象的心思好难猜
新安讯士Q6155-E PTZ摄像机
安讯士新AXIS M31网络摄像机
区间对象族的可镇定性分析
如何消除和缓解“摄像机恐惧症”
个性签名
7 Sci—Fi Hacks That Are Now a Reality 当黑客技术照进现实