查看原文
其他

Unity结合Vuforia开发AR应用如何识别各种目标?

2017-06-11 Unity官方 Unity官方平台

我们曾经为大家分享过使用Unity结合Vuforia开发AR应用的案例,在短短几分钟内实现了跳动在桌面上的Unity酱。今天这篇文章将为大家介绍一些使用Unity开发AR应用的小技巧,并分享Vuforia识别多个不同类型目标的方式。


对Vuforia不太熟悉的开发者们,请先查阅《5分钟使用Unity制作AR应用》了解Vuforia的基本概念。


在Unity中设置Vuforia

已经了解设置步骤的开发者可以跳过此部分。在Unity中设置Vuforia需要以下几步:

  • 从Vuforia官网下载对应版本的SDK,并导入到Unity项目

  • 在Vuforia官网为项目创建许可证,创建完毕后将其填入ARCamera预制件的Licence Key字段


如果想了解具体的操作细节,请查阅《5分钟使用Unity制作AR应用》


设置ImageTarget

Vuforia支持多种方式来创建AR体验,但几乎所有方式都基于指定识别目标供Vuforia算法识别后开始处理增强现实的渲染。您可以自己设置目标后上传到Vuforia的目标管理器,以供系统进行识别。目标设计需要遵循一些特定规则,否则可能无法被准确识别。


尤为重要的是ImageTarget类型的目标,因为Vuforia中很多目标类型都是由多个ImageTarget按照特定位置与顺序组合而成的MultiTarget。设置ImageTarget有三条主要规则:

  • 细节必须丰富;

  • 图片明暗区域对比度必须足够强;

  • 不包含任意重复模式。



Vuforia会通过SDK的功能为图片创建一个顺序,然后利用算法来匹配图片的模式并追踪目标。大致来说,图像特征就是一个锐角,类似正方形或五角星的角。而特征的数量将直接影响图像目标的“可识别度”。

但请注意,如果图像的所有特征都遵循相同的模式,那特征数量再多也毫无帮助。为了正确识别目标,图像需要具备一定的随机性。 


设置MultiTarget

MultiTarget由一系列按几何体顺序排列的ImageTarget组成。Vuforia算法会依照该顺序同时识别ImageTarget并创建立体引用。


设计MultiTarget需要遵循的规则与ImageTarget类似,此外还需注意几何体的深度(Depth)与连贯性(Geometric consistency)。


这里建议几何体深度至少为宽度的一半,尽管深度值再小一点也能正常识别,但遵循此建议效果会更好。


另外,最好能让Vuforia算法知道MultiTarget所有部分的连贯性。也就是说,理想情况下几何体每一面的边缘部分都正好位于ImageTarget对应的边缘部分。如果不是封闭的几何体,也可以在目标管理器中将后续可能需要移除的部分留白。例如一个可以打开的盒子就有一面需要留白,否则在AR环境下渲染可能会出现不连贯的结果。


创建MultiTarget首先要在Vuforia的目标管理器中添加或选择一个数据库,点击Add Target后选择Cuboid,然后设置其Width、Height、Length及Name。

创建好MultiTarget之后,再分别设置其ImageTarget。立方体的每一面都需要包含一个ImageTarget,且使用的图片需要与立方体对应的面成比例。设置好后下载数据库并导入Unity,将MultiTarget预制件拖拽至场景,并为其绑定所下载的目标数据库即可使用。


设置Cylinder Targets

Cylinder类型可用于识别圆柱及圆锥目标。它同样由一系列ImageTarget组成,也须遵循ImageTarget的设计规则。其顶部与底部图片都必须为正方形,以便于目标管理器系统进行标记。与MultiTarget类似,也需要注意几何体的连贯性,即如果几何体某一部分可以被移除,请在目标管理器中将其留白。



创建Cylinder Targets只需两步,首先在目标管理器中选择或新建一个数据库,然后添加Cylinder类型的目标,设置其Dimensions与Name即可。

下一步,选中创建的目标并为其添加ImageTarget。

使用的图片必须与圆柱成比例,Vuforia会给出目标图像的提示信息,按照提示对图像进行调整以便系统能够正确识别目标。例如,直径为1高度为2的圆柱比例为1.571,所以使用的图片高度与宽度也需满足此比例。


同样,设置好Cylinder Targets后下载数据库并导入Unity,将CylinderTarget预制件添加到场景并为其指定刚刚下载的数据库即可使用。


设置3D Object

3D Object类型仅支持识别使用Vuforia Object Scanner应用扫描的数据。Vuforia Object Scanner是一款Android应用,可以对现实世界中的物体进行扫描后导出扫描数据文件(.OD格式)。然后将该数据上传至目标管理器,以供Vuforia进行识别。



Smart Terrain

SmartTerrain是Vuforia专为Unity提供的功能,可以在AR环境下对物理环境进行重构。该功能支持识别并跟踪现实世界的物体与表面,并将识别后的对象用作Unity中的地形,为AR游戏增添一番新的趣味。



这种类型的识别可以从某个特定类型的目标开始,例如ImageTarget或CylinderTarget等。在第一个目标被识别后,系统会继续识别其周围的目标并根据已被识别的目标来布置游戏场景,然后依次映射出地形。


SmartTerrain可以识别简单的物体如立方体或圆柱等,只要它们符合目标识别的要求即可。这类物体在SmartTerrain系统中被称作Props,且尺寸可大可小,但不支持像草皮这类透明对象。SmartTerrain工作步骤如下:

  • 布置:用户设置识别目标与Props

  • 扫描:SmartTerrain系统会捕捉场景布置与Props并对场景进行重构

  • 跟踪:Unity场景中的地形会随着扫描进度实时变化


温馨提示,使用SmartTerrain功能会对硬件与系统有一定的需求。


VuMark

VuMark是一种支持自定义的目标类型。该类型的目标使用方式与其它几种类型相似,但要注意其设计准则。Vuforia官网给出了关于此类目标的详细设计规则,感兴趣的朋友们可以访问官网查看。


VuMark由以下5个部分组成:

  • Contour:该部分并未真正绘制在VuMark上,而是用于界定Border与Clear Space之间的对比度,也是Vuforia算法最先识别的部分。

  • Border:定义VuMark的形状,也是识别度最高的部分。它由直线组成,至少包含最外层边缘的4个角。

  • Clear Space:规定的空白部分,与Border相邻。保证目标的对比度足以让算法检测到Contour。

  • Code / Elements:目标ID的图像表示。由高对比度的元素组成,表示两种状态:Dark及Light。元素个数在创建VuMark Template时使用Vuforia提供的工具定义。

  • Background / Design Area:算法会忽略的空白区域。此区域可以随意设计。 



创建VuMark需要使用Adobe Illustrator及VuMark Design Tools,该工具包含3铬脚本以及一些示例。首先需要创建VuMark模板,设置VuMark的一些参数。



创建好模板后利用脚本将其分层,每层代表其中一个组成部分。使用VuMark-Verify.jsx脚本检测设计是否符合规则,检测通过后运行VuMark-Export.jsx脚本导出目标并另存为SVG格式的文件。最后将目标文件上传至Vuforia的目标管理器,然后像其它类型的目标那样下载数据库文件并使用即可。


其它识别功能

Vuforia SDK包含大量的功能,除了以上介绍的几种识别目标之外,还可以尝试下面这些功能:

  • User Defined Targets:与ImageTarget类型,但它支持通过用户摄像机动态定义目标。

  • Cloud Recognition:供企业用户使用的云端识别功能,将目标数据库存储在云端,支持在运行时更新并同步新的ImageTarget。

  • Object Recognition:实验性功能,支持通过Vuforia提供的工具扫描现实世界的物体并识别。


关于Vuforia中不同类型的目标识别与其在Unity中的应用就为大家分享到这里,希望本文对正在使用Unity开发AR应用的朋友们有帮助。我们还将为大家分享一些使用Unity开发AR应用的技术文章与精彩案例在Unity官方中文社区(unitychina.cn) ,请保持关注!


更多Unity相关技术文章

Unity中的图形Bug定位及调试技巧

基于Animation Instancing的大规模人群模拟

Unity 2017中的混合光照

eaglEEye性能测试平台详解

Unity 5导入Blender资源完整指南


Unity官方活动


2017 Unity技术路演华东区(上海、南京、杭州)现已正式开启报名!在这个夏天,感受来自Unity官方技术团队的热情!

点击“阅读原文”进入Unity官方中文社区

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存