Vuforia概述
AR(Augmented Reality)增强现实,想必大家都已经很熟悉了。这是当下最热的技术之一,是利用计算机视觉和计算机图像学领域的相关知识将虚拟世界融入到现实生活当中。AR和另外的VR(Virtual Reality,虚拟现实)以及MR(Mix Reality,混合现实)并称能改变未来生活的3R技术,更是被誉为下一代计算平台。去年(2016年)是VR元年,各大科技巨头都纷纷砸重金进入这个领域,Oculus和HTC的VR设备的惊艳亮相,带动了整个VR行业的大热。MR更是黑科技中的战斗机,目前只有微软的Hololens走在最前面。相对于VR和MR,AR的技术要早很多年,其实也已经在现实生活中初见端倪,大家熟悉的直播中常用的虚拟面罩其实就是AR的应用场景之一。世界上第一次将AR运用到现实生活中要追溯到上个世纪90年代,美国空军的Armstrong实验室在1992年研制出了Virtual Fixtures系统,该系统起初是为了增进人类的表现力以及完成一些远程控制任务而设计。但是当时受制于硬件的限制,AR这一技术始终没有被大规模普及开来。近年来随着计算机硬件的惊人进步,特别是微电子领域的高速发展,使得硬件这一壁垒早已被打破,AR技术得以拨开云雨重见天日,并被认为是下一代通用计算平台。
像所有的开发一样,AR也需要有巨头来提供SDK,使得开发者们能够基于底层封装好的模块,快速的开发出一系列AR产品。目前世界上主流的AR SDK提供厂商,国外的主要是Vuforia、Metaio,国内的主要是EasyAR。其中Metaio在2015年5月已被Apple重金收购,之后就没有再对外公开过SDK,经过两年的封闭开发,Apple已经打造出了强大的ARKit,能够基于庞大的iOS和iPad设备生产出各种惊艳的AR产品。Vuforia也在2015年11月被PTC公司重金收购,但是后续一直在更新并提供SDK,因此在ARKit普及之前,Vuforia一直是开发者最青睐的AR SDK,众多的功能以及高质量的识别技术,使得Vuforia早已深入人心。
随着VR/AR/MR的大热,笔者本人也利用Vuforia开发了一系列的AR产品,高品质的识别速度让顾客十分满意,Unity和Vuforia的深入结合也让AR开发变得十分容易上手,并且能够打造出十分惊艳的产品。《Vuforia开发完全指南》这一系列文章,就是笔者借着利用Vuforia开发的一些经验,来将Vuforia开发的流程以及各种功能细节写成教程,希望能够帮助AR开发者们能够快速进入AR的世界。
Vuforia的SDK支持很多平台,包括iOS、Android、UWP,能够适配市面上大部分的移动终端。Vuforia SDK封装了底层用来图像识别的计算机视觉模块,而且不用你操心摄像头的开启以及图像的读取,这些Vuforia都为你提供好了一系列的参数设置,开发者需要做的只是按照需要配置这些参数,然后基于底层的识别算法开发出自己想要的AR程序。
Vuforia主要由三大部分组成:
- Vuforia引擎。这个引擎是一个静态链接库,作为客户端封装进最终的App中,用来进行最主要的识别功能,支持iOS、Android和UWP,并且根据不同的平台开放出了不同的SDK,可以根据需要从Android Studio、Xcode、Visual Studio以及Unity中任选一种作为开发工具。本系列是以Unity为开发工具,因为Unity本来就是个游戏引擎,对3D模型的导入以及控制非常方便,非常适合开发AR程序;
- 一系列工具。Vuforia提供了一系列的工具,用来创建对象、管理对象数据库以及管理程序licenses。Target Manager是一个网页程序,开发者在里面创建和管理对象数据库,并且可以生成一系列的识别图像,用在AR设备以及云端上。Licenses Manager用来创建和管理程序licenses,因为每一个AR程序都有一个唯一的licenses。Vuforia Object Scanner是Vuforia近段时间新出的工具,用来进行十分黑科技的功能--实物扫描,但是很遗憾目前只支持某些Android设备。
- 云识别服务。当你的AR程序需要识别数量很庞大的图片对象,或者你的对象数据库需要经常更新,可以选择Vuforia的云识别服务。Vuforia Web Services可以让你很轻松的管理数量庞大的对象数据库,并且可以建立自动的工作流。
根据功能的不同,Vuforia支持很多类型的AR识别类型,主要有以下几种:
- Image Targets,这是最常用、也是最简单的识别对象,即单一静态的平面图像,比如打印的图片或者产品包装;
- VuMark,这是Vuforia自己研发的一种新型条形码,并且被称为下一代条形码,你能够自己随意设计这种条形码的样式,并且在其中融入相关的数据信息;
- Multi-Targets,多对象识别,可以同时识别多张Image Targets,并且可以把它们和几何立体物体结合起来,比如一个纸盒子,或者任意形状的平面;
- Cylinder Targets,是形状类似于圆柱形的图片,可以将这些图片贴到一些圆柱形物体上比如瓶子、杯子等等,进行识别;
- Text Recognization,文字识别,可以识别大约10万个英文单词,对于一些英语教育产品很是实用。但是很遗憾,不支持中文汉字识别,只支持英文;
- Object Recognization,实物识别,这是Vuforia在今年前不久推出的一种新型识别,识别对象已经从简单的图像中跳出来了,可以基于现实生活中的实物模型进行扫描识别,很是黑科技,这也代表着AR的未来。但是很遗憾目前只支持三星S7等少数Android手机,不过随着技术的进步,不久的未来一定会全平台覆盖;
- Smart Terrain,这是一项突破性的技术,可以基于用户的真实物理环境重新建造虚拟的3D环境,可以打造出新型种类的游戏以及很真实的视觉效果,这种产品中的元素可以和真实世界中的物理实体以及平面进行互动,非常酷炫,真正做到了虚拟和现实相互融合。
Vuforia的SDK可以是免费的,开发者只需注册一个开发者账号,进入官网下载相关平台的SDK就可以进行开发了。当然,免费有免费的限制,用免费SDK开发的程序,摄像头取景时左下角始终会有Vuforia的水印存在,而且一些高级功能也有数量限制。所以如果你是想开发企业级产品,最好还是花钱去买个licenses吧。但是对于学习Vuforia,免费SDK就够了,功能上没有什么太大的影响。
本系列教程采用的是Unity SDK,基于Vuforia + Unity开发AR产品。众所周知,Unity是目前世界上最流行的游戏引擎,也是开发者用的最多的VR/AR开发工具,你不需要懂得计算机图形学,不需要懂得光照计算,不需要会使用OpenGL,也不用操心模型是怎样导入的等等一系列流程,你需要的只是将模型导入,然后用C#编写控制脚本,根据平台编译生成二进制文件,就OK了。同时Vuforia的Unity SDK十分人性化,有很多的常用设置,你可以根据需要设置相关参数,并且不用操心摄像头取景等问题,Vuforia都为你做好了,你需要做的只是free your imagination。
关于具体的开发流程,本系列教程采用的是最新版的Unity作为开发工具,C#作为开发语言(后期还会用到Objective-C,进行Vuforia和Xcode的结合),Mac系统作为开发环境,Xcode作为程序编译链接工具,iOS作为程序最终生成平台。但是其实也不必太在意操作系统的选择,Windows下的Unity一样可以开发AR程序,只不过笔者选择的运行平台是iOS,Unity生成iOS平台App的流程是Unity先要生成Xcode工程,然后利用Xcode进行编译链接,生成最终的App二进制文件进行安装,因此选择了Mac + Unity + Xcode这样的组合。如果只是想开发Android程序,Windows就够了,因为Unity生成Android程序不需要生成中间的工程,可以直接生成APK包进行安装。
好了,接下来我会首先从最基础的教学,让一个不懂编程的人也能快速开发AR程序,然后逐步将Vuforia的各种AR功能展现出来。相信如果你能学完本教程,关于Vuforia的AR开发,应该可以算得上入门并且比较熟悉了。