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


作者:Zero,腾讯测试开发工程师。本文由腾讯WeTest授权发布,如需转载请联系腾讯WeTest获得授权。

WeTest导读

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

《Pokémon Go》采用AR技术只需一台自带GPS功能的智能手机就可以满世界地找小精灵然后扔精灵球以捕获精灵那么问题就来了,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是英特尔发起并参与开发的计算机视觉库,在图像处理、模式识别及计算机视觉领域被广泛使用,这里就不做过多介绍了。

1.1 OpenCVForUnity

Unity有现成的OpenCV库,使用起来很方便。具体使用方法:1.导入OpenCV for Unity.unitypackage2.将导入后OpenCVForUnity目录下的Plugins和StreamingAssets文件夹移到Assets目录下OpenCVForUnity目录下的Samples里有很多写好的示例,比如阈值分割、霍夫变换检测直线、人脸检测等,如果想运行需要在Build Settings里添加好对应场景,其中有的需要用到摄像头。

1.2 OpenCV在Unity中的应用

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

当场景中出现了半透明的敌机时,可开启红外模式看清隐形敌机的位置。这里主要用OpenCV对摄像头获取的图像做了颜色变换:首先将图像转为灰度图(cvtColor),然后基于某个色谱,根据不同的灰度值映射为不同的颜色(applyColorMap)。对于此类滤镜也可以通过Unity的Shader来做(如下图),相比OpenCV性能要好些,但OpenCV做图像处理更灵活,也可以尽量去优化:
1.限制图像的更新频率;
2.降低图像的分辨率(OpenCV可以用resize);
3.对于必要的Mat可以在类初始化时申请好空间,不用每次处理图像都申请再释放;

4.利用多线程(主要用在了人脸检测模块)。
好友助战:
遇到强大Boss时,可将摄像头对准好友(人脸),当检测到人脸时,会出现好友助战剧情,协助攻击Boss。面具怪:
同好友助战模式也利用了人脸检测,当在图像中检测到人脸时,会出现附着在人脸上的面具怪,并跟随其移动。首先,简单区分下人脸检测和人脸识别这两个概念:人脸检测是找到图像中人脸的位置、大小,而人脸识别不仅要检测出人脸,还要知道这人是谁。OpenCVForUnity中的人脸检测示例用到了基于Haar特征及LBP特征的两种分类器来检测人脸(已经训练好的分类器,想自己训练或者自己实现性能更优的算法可以去咨询优图~),同时也用到了多线程来异步计算,对于在性能较差的移动设备上来实现人脸检测具有较好的参考性。对于移动设备,人脸检测计算量较大(Unity本身开销已经不小了),所以不能对每帧图像都进行检测,可以利用多线程进行异步计算:

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

二、Vuforia篇

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

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

1.在官网注册账号后,首先注册一个License,并记下License Key;

2.下载Vuforia库导入到Unity中;

3.选取一张待识别图片上传到Target Manager,如下图所示创建Database:
添加待识别图片:

4.生成库后,注意Rating的星级,越高越好(识别度越高);将库下载下来导入到Unity中。

5.在Unity中搜索ARCamera和ImageTarget,并拖到场景中,ARCamera中的App License Key填入刚才申请的License Key,Database Load Behaviour(Script)中勾选”Load QQ Database”(这里根据Database的名字有所不同)和”Activate”,在ImageTarget中的Database选择刚才申请的识别图片Database的名字(QQ),此时场景中会出现识别图片

6.根据识别图片(ImageTarget)的相对位置将游戏物体或场景作为ImageTarget的子物体进行摆放。

7.按照上述步骤即可在Unity中简单使用Vuforia库,如果有更多需求可以去了解下它的其他功能及API;

例如,为了增强识别效果,可以加入摄像头的对焦:
Vuforia.CameraDevice.Instance.SetFocusMode(Vuforia.CameraDevice.FocusMode.FOCUS_MODE_TRIGGERAUTO);在实际使用中,Vufroia库简单易用,识别准确度较高,对手机性能消耗适中,但构建的虚拟场景容易因环境干扰发生一定抖动,影响玩家游戏体验;可同时识别多个物体,但准确度有所降低;长时间游戏会导致摄像头发烫。

8.Unity游戏优化工具

为了避免以上手游性能方面对游戏的负面影响,可以利用一些现成的测试工具进行深度的检测,腾讯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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容