从 Pokémon Go 谈 AR 游戏开发

Pokémon Go 一出,新鲜的玩法、经典的 IP 效应让这款使用了 Unity 以及 AR 技术的手游火遍了“大洋”南北。可惜的是这款新鲜的游戏还没有惠及中国市场的玩家们。腾讯内部的 AR 专家秉持着“一言不合就自己开发”的原则,自发对 AR 游戏进行了预研,本文将通过在 Unity 中对 OpenCV 及 Vuforia 库的使用,简单介绍制作 AR 游戏的一系列流程。

如果你在街头巷尾

看到这样拿着手机到处晃悠的景象

他们一定是在抓小精灵!

AR 技术是什么?

增强现实(Augmented Reality,简称 AR ),是一种实时地计算摄影机影像的位置及角度并加上相应图像的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动。简单的说,在 Pokémon Go 这款 AR 游戏中,精灵是虚拟的, 地图是真实的,虚拟的精灵出现在了真实的地图之中,给了玩家十分新鲜的体验。

于是 Pokemon Go 拯救了无数的死宅们,大家上街抓

上厕所也抓

不过,Pokémon Go现在还拯救不了国内的死宅们,

目前Pokémon Go在国内已被锁区,

而解锁的时间还不确定......

然而!腾讯的技术大牛在遇到新鲜事物的时候是拦不住的!秉持着“一言不合就自己开发”的原则,大牛决定,自己做一个 AR 游戏!!

Pokémon Go 的游戏引擎用到了 Unity 技术,在腾讯大牛预研的 AR 游戏中,分别用到了 OpenCV 及 Vuforia 库,下面将简单分享下两个库的使用。

想收服小萝莉吗?

一.OpenCV 篇

OpenCV 是英特尔发起并参与开发的计算机视觉库,在图像处理、模式识别及计算机视觉领域被广泛使用,这里就不做过多介绍了。

OpenCVForUnity

Unity 有现成的 OpenCV 库,使用起来很方便。

具体使用方法:

  1. 导入 OpenCV for Unity.unitypackage
  2. 将导入后 OpenCVForUnity 目录下的 Plugins 和 StreamingAssets 文件夹移到 Assets 目录下

OpenCVForUnity 目录下的 Samples 里有很多写好的示例,比如阈值分割、霍夫变换检测直线、人脸检测等,如果想运行需要在 Build Settings 里添加好对应场景,其中有的需要用到摄像头。

OpenCV 在 Unity 中的应用

背景是组里基于 Unity 做的一个 AR 小游戏——打飞碟,其中使用 OpenCV 实现了红外效果及人脸检测:

红外模式:

当场景中出现了半透明的敌机时,可开启红外模式看清隐形敌机的位置。

这里主要用 OpenCV 对摄像头获取的图像做了颜色变换:首先将图像转为灰度图( cvtColor ),然后基于某个色谱,根据不同的灰度值映射为不同的颜色( applyColorMap )。

对于此类滤镜也可以通过 Unity 的 Shader 来做(如下图),相比 OpenCV 性能要好些,但 OpenCV 做图像处理更灵活,也可以尽量去优化:

  1. 限制图像的更新频率;
  2. 降低图像的分辨率(OpenCV可以用resize);

  1. 对于必要的Mat可以在类初始化时申请好空间,不用每次处理图像都申请再释放;
  2. 利用多线程(主要用在了人脸检测模块)。

好友助战:

遇到强大Boss时,可将摄像头对准好友(人脸),当检测到人脸时,会出现好友助战剧情,协助攻击Boss。

面具怪:

同好友助战模式也利用了人脸检测,当在图像中检测到人脸时,会出现附着在人脸上的面具怪,并跟随其移动。

首先,简单区分下人脸检测和人脸识别这两个概念:人脸检测是找到图像中人脸的位置、大小,而人脸识别不仅要检测出人脸,还要知道这人是谁。

OpenCVForUnity 中的人脸检测示例用到了基于 Haar 特征及 LBP 特征的两种分类器来检测人脸(已经训练好的分类器,想自己训练或者自己实现性能更优的算法可以去咨询优图~),同时也用到了多线程来异步计算,对于在性能较差的移动设备上来实现人脸检测具有较好的参考性。

对于移动设备,人脸检测计算量较大(Unity 本身开销已经不小了),所以不能对每帧图像都进行检测,可以利用多线程进行异步计算:

好友助战模式是检测到人脸后,在人脸上添加一些装饰物(copyTo 用装饰物的 PNG 图片做掩膜)作为剧情的一部分;而面具怪则是根据检测到人脸的位置和大小来改变怪物的位置和大小。此外,如果进一步需要进行人脸识别,那不建议在移动设备上做,性能肯定吃不消了,可以用云,将计算放在服务器上。

二.Vuforia 篇

Vuforia 是高通的增强现实库,对 unity 支持好,使用起来简单方便,如下图所示为组内使用 Unity+Vuforia 开发的坦克大战 AR 版:通过识别预先设定的标志物(此处为 lena 头像),从而确定游戏世界所在的平面及大小,和实景结合展现出坦克大战游戏场景。

简要介绍下 Vuforia 在 Unity 中的使用:

  • 在官网注册账号后,首先注册一个 License ,并记下 License Key ;
  • 下载 Vuforia 库导入到 Unity 中;

  • 选取一张待识别图片上传到 Target Manager,如下图所示 创建 Database:
    添加待识别图片:
  • 生成库后,注意 Rating 的星级,越高越好(识别度越高);将库下载下来导入到 Unity 中。

  • 在 Unity 中搜索 ARCamera 和 ImageTarget ,并拖到场景中,ARCamera 中的 App License Key 填入刚才申请的 License Key , Database Load Behaviour( Script )中勾选” Load QQ Database ”(这里根据 Database 的名字有所不同)和” Activate ”,在 ImageTarget 中的 Database 选择刚才申请的识别图片Database的名字( QQ ),此时场景中会出现识别图片
  • 根据识别图片( ImageTarget )的相对位置将游戏物体或场景作为 ImageTarget 的子物体进行摆放。

  • 按照上述步骤即可在Unity中简单使用Vuforia库,如果有更多需求可以去了解下它的其他功能及API;例如,为了增强识别效果,可以加入摄像头的对焦:

Vuforia.CameraDevice.Instance.SetFocusMode(Vuforia.CameraDevice.FocusMode.FOCUS_MODE_TRIGGERAUTO);

在实际使用中, Vufroia 库简单易用,识别准确度较高,对手机性能消耗适中,但构建的虚拟场景容易因环境干扰发生一定抖动,影响玩家游戏体验;可同时识别多个物体,但准确度有所降低;长时间游戏会导致摄像头发烫。

为了避免以上手游性能方面对游戏的负面影响,可以利用一些现成的测试工具进行深度的检测,腾讯 WeTest 平台下的 Cube 工具可以帮助开发者发现游戏内分类资源的一个占用情况,尤其是对游戏场景中的 FPS、CPU、PSS 的变化趋势重点关注,帮助在游戏开发过程中不断改善玩家的体验。目前功能还在免费开放中。

体验地址:http://wetest.qq.com/cube

关于测试报告的问题:http://wetest.qq.com/guide/view/?id=267

使用帮助:http://wetest.qq.com/guide/view/?id=266

常见问题:http://wetest.qq.com/guide/view/?id=268

本文由腾讯WeTest授权发布,如需转载请联系腾讯WeTest获得授权。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏WeTest质量开放平台团队的专栏

Pokémon GO国内玩不了?腾讯AR专家教你自己做!

Pokémon Go一出,新鲜的玩法、经典的IP效应让这款使用了Unity以及AR技术的手游火遍了“大洋”南北。可惜的是这款新鲜的游戏还没有惠及中国市场的玩家们...

662
来自专栏人工智能头条

沈国阳:美团推荐系统整体框架与关键工作

1762
来自专栏机器之心

综述 | 一文看尽三种针对人工智能系统的攻击技术及防御策略

这篇文章是关于如何使用人工智能构建鲁棒的反滥用保护系统系列文章中的第四篇,也是最后一篇。第一篇文章解释了为何 AI 是构建鲁棒的保护系统的关键,这种保护用来满足...

983
来自专栏大数据文摘

自然语言处理(NLP)入门指南

2624
来自专栏AI科技大本营的专栏

谷歌联手Kaggle举办10万美元视频分类大赛

谷歌和 Kaggle 于今日宣布将举办一场新的机器学习挑战赛,该比赛要求开发人员找到自动给视频添加标签的最优方法。 这场冠军奖金高达30,000美元(排在其后的...

35814
来自专栏腾讯位置服务

坐标系 | 常见问题

坐标系 1.腾讯位置服务API使用什么坐标体系? 腾讯位置服务API使用的坐标体系,为国测局规定的GCJ-02坐标系,是国内的标准坐标体系,都是经过国家测绘局...

1853
来自专栏AI2ML人工智能to机器学习

Scikit-Learn 0.18 有哪些新玩意?

Scikit-Learn 0.18.1 Bugfix 版发布了, 意味着大家可以广泛使用0.18版了。

1024
来自专栏ATYUN订阅号

俄罗斯研究人员利用神经网络使金属3D打印更加高效

3D打印机需要使用数学模型对定位和控制算法进行微调,以达到最佳性能。这是一个漫长而艰巨的过程,可能需要数周才能设置打印参数。即便如此,仍然存在打印错误的可能性。

812
来自专栏ATYUN订阅号

斯坦福大学开发人造神经系统,为假肢或机器人提供触觉和感知能力

斯坦福大学和首尔国立大学的研究人员开发了一种人造感觉神经系统,可以激活蟑螂的抽搐反射,并使其识别盲文中的字母。

844
来自专栏CDA数据分析师

学会10种方法,用Python轻松实现数据可视化

引言 艺术之美根植于其所传达的信息。有时候,现实并非我们所看到或感知到的。达芬奇(Da Vinci)和毕加索(Picasso)等艺术家都通过其具有特定主题的非...

1815

扫码关注云+社区