VR与AR开发高级教程:基于Unity

978-7-115-44426-4
作者: 吴亚峰 刘亚志 于复兴
译者:
编辑: 张涛
分类: Unity

图书目录:

详情

本书主要对虚拟现实和增强现实应用开发各方面的技术进行详细介绍,书中案例采用的开发平台为主流的虚拟现实和增强现实平台。这类虚拟现实和增强现实平台具有市场占有率高,使用方便,支持的操作系统广泛(包括Windows、Android、iOS)等优势。同时,这些主流的平台还可以方便地集成到Unity等主流3D应用开发工具中使用,非常受各移动和嵌入式平台开发人员的欢迎。

图书摘要

 

书名:VR与AR开发高级教程:基于Unity

ISBN:978-7-115-44426-4

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

编  著 吴亚峰 索依娜

审  校 百纳科技

责任编辑 张 涛

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315


▲彩图1 笔者自己制作的配合Vuforia引擎的3D扫描仪

▲彩图2 增强现实物体识别

▲彩图3 增强现实粒子系统

▲彩图4 使用HTC Vive进行抓取

▲彩图5 GearVR游戏——Breaker

▲彩图6 星空探索应用——梅西耶天体

▲彩图7 星空探索应用——星空

▲彩图8 星空探索应用——太阳系场景

▲彩图9 星空探索应用——增强现实功能

▲彩图10 星空探索应用——VR太阳系漫游


本书共分11章,主要讲解了VR和AR的开发和应用,主要内容为:增强现实以及AR工具介绍,Unity开发环境搭建及Vuforia开发环境搭建,Vuforia核心功能,如扫描图片、圆柱体识别、多目标识别、文字识别、云识别、物体识别和案例等,EasyAR开发知识,基于Unity开发VR,Cardboard VR开发,三星Gear VR应用开发,HTC Vive平台VR开发。最后,通过两大综合案例Gear VR游戏——Breaker和科普类AR&VR应用——星空探索,为读者全面展示AR/VR案例开发的过程,使读者尽快进入实战角色。

本书适合程序员、AR/VR开发者、AR/VR爱好者,以及大专院校相关专业的师生学习用书和培训学校的教材。


增强现实(AR)技术是指把现实世界中某一区域原本并不存在的信息,基于某种媒介并经过模拟仿真后再叠加到真实世界,被人类感官所感知的技术。AR 能够使真实的环境和虚拟的物体实时地显示到同一个画面或空间,从而达到超越现实的感官体验。

虚拟现实(VR)技术是指借助计算机系统及传感器技术生成一个三维环境,创造出一种崭新的人机交互状态,通过调动用户的感官(视觉、听觉、触觉、嗅觉等),带来更加真实的、身临其境的体验。

随着AR与VR的兴起,越来越多的开发者与公司开始将目标转向了AR/VR应用,各大开发厂商争先恐后地投入到了硬件设备的研发中,像Oculus Rift、HTC Vive、Gear VR等在这片蓝海上已经抢占了先机。没有设备的AR/VR只会停留在概念阶段,没有内容的AR/VR同样也是不完整的,只有将技术、设备及内容结合起来才能产生实际价值。

AR/VR的应用领域相当广泛,这给开发人员留出了充分的发挥空间,可以说是“海阔凭鱼跃,天高任鸟飞”。而现如今,硬件设备已经逐渐完善,但针对于AR/VR的应用软件却还基本是一片空白,在国内专门系统介绍AR与VR应用开发的书籍和资料较少,使得许多初学者都无从下手。根据这种情况,作者结合多年从事游戏、应用开发的经验编写了这样一本书,供需要的读者学习。

1.内容丰富,由浅入深

本书内容组织上本着“起点低,终点高”的原则,内容覆盖了从最基础的AR/VR相关知识,到学习AR/VR的各种SDK,再到案例的开发。为了让读者在掌握好基础知识的同时,还能学习到一些实际项目开发的经验,本书最后还给出了两个结合前面章节所介绍内容开发的具体项目案例,供读者学习参考。

这样的内容组织使得初入AR/VR开发的读者可以一步一步成长为AR/VR的达人,符合绝大部分想学习AR/VR应用开发的学生、程序开发人员以及相关技术人员的需求。

2.结构清晰,讲解到位

本书中配合每个需要讲解的知识点都给出了丰富的插图与完整的案例,使得初学者易于上手,有一定基础的读者便于深入。书中所有的案例均是根据作者的开发心得进行设计,结构清晰,便于读者进行学习。同时书中还给出了很多作者多年来积累的编程技巧与心得,具有很高的参考价值。

3.实用的源程序内容

为了便于学习,本书附赠的资源中包含了书中所有案例的完整源代码,能最大限度地帮助读者快速掌握开发技术(程序下载地址www.toppr.net)。

4.既可作为教材,也便于自学

本书内容组织及安排方面既考虑到了作为高等院校相关专业课程教材的需要,也考虑到了读者自学的需要。书中每章最后都安排了习题,便于教师安排学生课下复习与实践。最后两章的实际项目案例还可以方便地作为课程设计的内容。

本书共分为11章,内容按照由浅入深的原则进行安排。其中第1章介绍了增强现实开发的基础知识,主要目标人群为没有相关开发经验的读者;第2~4章介绍了AR开发中所广泛使用的Vuforia与EasyAR引擎的使用;第5章为基于Unity开发的增强现实设备的概述,并对Oculus的开发流程进行了讲解;第6~8章分别介绍了基于Cardboard VR、Gear VR与HTC Vive设备的开发步骤;第9章介绍了当前AR和VR的创新风口;最后两章分别给出了一个完整的VR游戏案例和一个AR、VR相结合的科普类应用案例。

章  名

主 要 内 容

初见增强现实

本章介绍了增强现实以及AR工具的相关知识,详细讲解了Unity开发环境的搭建及Vuforia开发环境的搭建

Vuforia核心功能介绍

本章介绍了Vuforia的几项核心功能,包括扫描图片、圆柱体识别、多目标识别、文字识别、云识别、物体识别等

Vuforia核心功能官方案例详解

本章介绍了增强现实的简介以及Vuforia核心功能的基础知识,详细讲解Vuforia核心功能的官方案例

EasyAR概述

本章对国内首个免费增强现实引擎EasyAR进行了详细介绍,包括扫描图片和播放视频两个基础功能

基于Unity开发的VR设备初探

本章对基于Unity开发的VR设备进行了详细概述,并对Oculus Rift的开发流程进行了详细介绍

Cardboard VR开发

本章详细讲解了Google Cardboard SDK的基本知识与官方案例,并且利用该SDK创建了一个小的综合案例,可以利用蓝牙手柄和游戏进行交互

三星Gear VR应用开发

本章对Gear VR硬件以及Oculus Mobile SDK进行了详细介绍,尤其着重介绍了,如何在Unity中使用Oculus提供的SDK开发移动平台的Gear VR应用

HTC Vive平台VR开发简介

本章详细讲解了HTC Vive的基本知识与官方案例,包括HTC Vive设备的安装、Vive SDK的下载和导入、SDK内置脚本及案例详解

AR与VR创新风口

本章介绍了VR、AR与MR的创新方向,读者可在此基础上进行拓展延伸,结合当前不同的领域与新颖技术,开发出优秀的应用

Gear VR游戏——Breaker

本章为VR游戏综合案例,通过一个具体的游戏向读者较为全面地介绍了VR游戏项目的开发流程以及运用各种技术解决具体问题的思路

科普类AR&VR应用——星空探索

本章为AR/VR综合案例,通过一个具体的应用向读者全面地介绍了AR/VR项目的开发流程,案例中综合运用了前面多章的知识

本书内容丰富,从AR/VR的基础知识到各种SDK讲解以及相关案例的开发;从简单的应用程序到完整的游戏、应用案例,适合不同需求、不同水平层次的各类读者。

本书中的AR与VR都是基于Unity进行开发的,此类读者通过对本书的学习,并结合自己的Unity开发经验能够很快地学习AR、VR开发。

传统OpenGL ES的开发人员在3D游戏开发中已有了丰富的经验,但部分人员希望能在AR/VR领域一展拳脚,却为不能掌握该技术而苦恼。此类读者通过对本书的学习,并结合自己的开发经验能够更快地提高AR/VR开发水平。

此类开发人员具有一定的编程基础,但缺乏此方面的开发经验,在实际的项目开发中往往感到吃力。本书在使用Unity进行开发的过程中,对每一步骤都进行了详细介绍,该类读者通过本书的学习可快速掌握相关开发技巧,了解详细的开发流程。

此类读者在学校学习的知识偏重基础,实际操作与开发能力较弱。本书既有基础知识介绍又有完整案例。读者可以在学习基础知识的同时,结合案例进行分析,学习过程更为高效。也便于教师将本书选作教材进行授课。

吴亚峰,毕业于北京邮电大学,后留学澳大利亚卧龙岗大学取得硕士学位。1998年开始从事Java应用的开发,有十多年的Java开发与培训经验。主要的研究方向为OpenGL ES、手机游戏、Java EE以及搜索引擎。同时为手机游戏、Java EE独立软件开发工程师,现任华北理工大学“以升大学生创新实验中心”移动及互联网软件工作室负责人。十多年来不但指导学生多次制作手游作品获得多项学科竞赛大奖,还为数十家著名企业培养了上千名高级软件开发人员。曾编写过《OpenGL ES 3.0游戏开发(上下卷)》《Unity 5.X 3D游戏开发技术详解与典型案例》《Android应用案例开发大全》(第一版、第二版及第三版)、《Android游戏开发大全》(第一版、第二版及第三版)等多本畅销技术书。2008年初开始关注Android平台下的3D应用开发,并开发出一系列优秀的Android应用程序与3D游戏。本次负责全书统稿及第2、第3、第8~10章内容的编写。

刘亚志,北京邮电大学博士,从事软件开发工作和计算机网络技术研究十余年。主持或参与多项计算机网络方向的科研课题,已在相关领域SCI期刊发表研究论文十余篇。精通移动软件开发技术,已为多家单位完成多项管理、控制软件项目的开发工作。2012年开始从事基于HTML 5的移动端软件开发,实现了多个移动App和微信公众平台的设计。本次负责部分案例的开发及第6、7、11章的编写工作。

于复兴,北京科技大学硕士,从业于计算机软件领域十年,在软件开发和计算机教学方面有着丰富的经验。工作期间曾主持科研项目“PSP流量可视化检测系统研究与实现”,主持研发了省市级项目多项,同时为多家单位设计开发了管理信息系统,并在各种科技类刊物上发表多篇相关论文。2012年开始关注HTML 5平台下的应用开发,参与开发了多款手机娱乐、游戏应用。本次负责部分案例的开发及第1、第4、第5章的编写。

本书在编写过程中得到了华北理工大学“以升大学生创新实验中心”移动及互联网软件工作室的大力支持,同时刘建雄、罗星晨、王旭、张腾飞、王淳鹤、李程光、李林浩、蒋迪、韩金铖以及作者的家人为本书的编写提供了很多帮助,在此表示衷心的感谢!

由于作者的水平和学识有限,且书中涉及的知识较多,难免有错误疏漏之处,敬请广大读者批评指正,并多提宝贵意见,编辑联系和投稿邮箱为:zhangtao@ptpress.com.cn。

作 者  


在许多科幻电影中常常会有一些现实与虚拟世界融合的场景,随着科技的发展,让人仿佛置身在虚拟环境的效果已经可以依靠增强现实技术实现。所谓的增强现实技术,就是将真实世界和虚拟世界集成到一起显示的技术。本书将向读者介绍虚拟现实技术和AR移动端的开发工具——Vuforia。

增强现实技术,即AR技术,是指把现实世界中某一区域原本并不存在的信息,基于某种媒介并经过模拟仿真后再叠加到真实世界,被人类感官所感知的技术。它能够使真实的环境和虚拟的物体实时地显示到同一个画面或空间,从而达到超越现实的感官体验。

增强现实技术的应用领域相当广泛,诸如尖端武器、数据模型的可视化、虚拟训练、娱乐与艺术等领域具有广泛的应用,而且由于其具有能够对真实环境进行增强显示输出的特性,在医疗研究与解剖训练、精密仪器制造和维修等领域,具有比其他技术更加明显的优势,如图1-1和图1-2所示。

▲图1-1 增强现实篮球

▲图1-2 虚拟手术训练

AR技术具有相当好的发展前景,吸引了谷歌、微软、苹果等世界级企业的关注,并且Unity已经可以很好地支持增强现实技术的实现,开发者可以通过一些AR工具插件直接在Unity上开发和运行AR案例,详细内容将在本书中进行具体介绍。

增强现实的应用范畴相当广泛,下面我们将介绍其在Unity开发中的常用插件,这些插件可以使开发者在Unity中很方便地进行增强现实的开发。常见的几种增强现实实现插件相关说明及官方网站如表1-1所列。

表1-1 Unity开发中的AR插件

名  称

说  明

官  网

Vuforia

市面上应用最广泛的插件,应用于移动平台的开发

http://developer.vuforia.com

Metaio

已被苹果公司收购,目前无法购买和使用

http://www.metaio.com

EasyAR

由国内团队开发,更适合于PC和Mac平台的开发

http://www.easyar.cn

ARToolKit

适合底层开发,难度较大,使用人数较少

http://artoolkit.org

本书将要介绍通过Unity 3D结合Vuforia插件实现的增强现实应用,所以,首先需要将Unity安装到计算机中。下面介绍Unity 3D集成开发环境的搭建,开发环境的搭建分为两个步骤:Unity集成开发环境的安装和目标平台的SDK与Unity的集成。

本小节将主要讲述如何在Windows平台下搭建Unity的集成开发环境,主要包括如何从Unity官网下载Windows平台下使用的Unity游戏开发引擎,以及如何安装下载好的Unity安装程序。具体的操作步骤如下。

(1)首先登录到Unity官方网站http://unity3d.com下载Unity安装程序,将首页拖至最底部,如图1-3所示,在“下载”栏中单击“Unity”超链接,网页跳转到新版Unity的版本比较页面,该页面展示了专业版和个人版的功能区别,再将网页拖至底部,在“资源”栏中单击“Unity旧版本”超链接,如图1-4所示。

▲图1-3 Unity官方网站首页

▲图1-4 新版Unity的版本比较页面

 提示

由于Unity官网的默认语言为英语,所以打开页面后内容全部为英文,语言选项在网页最底部的右下角处,读者可根据个人需要选择合适的语言。

(2)单击“Unity旧版本”超链接后,网页跳转到Unity的下载存档页面,该页面下可以下载最新和以前版本的Unity。这里选择5.0版本的Unity,如图1-5所示,单击右侧的“下载(Win)”会出现下拉菜单,如图1-6所示,下拉菜单的前3项分别为:下载Unity下载助手、下载64位Unity安装程序、下载32位Unity安装程序。读者可根据个人情况选择下载,笔者在这里选择第二项。

▲图1-5 Unity的下载存档

▲图1-6 Unity下载选项

(3)双击下载好的Unity安装程序UnitySetup64.exe,会打开Welcome to the Unity 5.0.0f4(64-bit)Setup窗口,如图1-7所示。单击“Next”按钮进入License Agreement窗口,如图1-8所示。

▲图1-7 Welcome to the Unity 4.3.4f1 Setup 窗口

▲图1-8 License Agreement窗口

(4)在License Agreement窗口,单击“I Agree”按钮进入Choose Components窗口,如图1-9所示。然后在Choose Components窗口,全部选中并单击“Next”按钮进入Choose Install Location窗口,如图1-10所示。

▲图1-9 Choose Components窗口

▲图1-10 Choose Install Location窗口

(5)在Choose Install Location窗口,选择好安装路径(本书以默认路径为例),单击“Install”按钮进行安装,并进入Installing窗口,进入Installing窗口后(开始Unity的安装过程)会需要一定的时间,请耐心等待,如图1-11所示。

▲图1-11 Installing窗口

(6)安装结束,会跳转到Finsh窗口,单击“Finsh”按钮即可,如果选中Run Unity 5.0.0f4(64-bit)选项,则单击“Finsh”按钮就会跳转到License注册窗口,此时桌面上会出现一个Unity.exe的图标,如图1-12和图1-13所示。

▲图1-12 Finsh窗口

▲图1-13 Unity.exe快捷方式

(7)如果没有选中Run Unity 5.0.0f4(64-bit)选项,则双击桌面上Unity.exe快捷方式,也将会跳转到License注册窗口,勾选“Unity 5 Professional Edtion”,即选择使用专业版,勾选“Unity 5 Personal Edtion”则为选择使用个人版。在选择版本后,单击“OK”按钮进行下一步,如图1-14所示。

▲图1-14 注册窗口

 提示

选择使用专业版需要序列号,有序列号的用户可以选择该项然后输入序列号,没有序列号的用户可以到官方购买。选择使用个人版的用户,需要在官方网站注册一个账号,通过账号激活Unity。该版本有诸多限制,许多功能都不能够在该版本中使用,不建议选择该版本。

(8)使用个人版的用户需要在Log into your Unity Account窗口下填入账户相关信息,如图1-15所示。然后单击“OK”按钮进入Unity公司的调查问卷窗口,如图1-16所示,完成调查问卷后,单击“OK”按钮,跳转到启动窗口,如图1-17所示。

▲图1-15 Log into your Unity Account窗口

▲图1-16 调查问卷窗口

▲图1-17 Unity启动窗口

 提示

注册必须在连网的前提下才能进行操作。没有Unity账户的用户可以单击“Create Account”按钮注册一个账户,注册完后必须登录注册所使用的邮箱确认注册。由于篇幅的限制,这里不再赘述注册账户的过程。

(9)进入启动窗口后,单击“Start using Unity”按钮进入选择项目窗口,如图1-18所示。选择Create New Project选项,这里的工程路径选择默认路径,然后单击“Create”按钮进入Unity集成开发环境,如图1-19所示。

▲图1-18 项目选择窗口

▲图1-19 Unity开发窗口

 提示

Unity的安装要求操作系统为Windows XP SP2以上、Windows 7 SP1以上、Windows 8,不支持Windows Vista;GPU要求有DX9(着色器模型2.0)功能的显卡,2004年以来的产品都可以。对于整体要求,现在所使用的计算机以上两点都满足。

上一节介绍了如何在Windows平台下搭建Unity的集成开发环境,本节将具体介绍如何在Mac OS平台上下载Mac版的Unity游戏开发引擎,以及如何安装下载好的Mac版Unity安装程序。具体的操作步骤如下。

(1)Mac OS平台下Unity的下载与Windows大致相同,故省略前面的打开网页步骤,直接从下载存档页面开始介绍,这里选择5.0版本的Unity,如图1-20所示,单击右侧的“下载(Mac)”会出现下拉菜单,如图1-21所示,下拉菜单的前两项分别为:下载Unity下载助手和下载Unity安装程序。读者可根据个人情况选择下载,笔者在这里选择第二项。

▲图1-20 Unity安装窗口

▲图1-21 软件许可协议窗口

(2)完成下载后,开始安装Unity。首先单击下载好的Unity安装文件“Unity.pkg”,会弹出Unity的安装窗口,如图1-22所示,单击“继续”按钮,会弹出“软件许可协议”窗口,如图1-23所示。

▲图1-22 Unity安装窗口

▲图1-23 软件许可协议窗口

(3)阅读完Unity的安装许可协议后,单击“继续”按钮,会弹出小窗口提示用户是否同意“软件许可协议”,如图1-24所示,单击“同意”按钮可继续安装。在“目的宗卷”窗口下,选择要安装Unity的磁盘,单击“继续”按钮,如图1-25所示。

▲图1-24 软件许可协议确认窗口

▲图1-25 选择目的宗卷

(4)在安装确认窗口上,显示了Unity将占用计算机上5.27GB的空间,如图1-26所示,如不需要更改安装位置,则单击“安装”按钮开始进行安装,此时会弹出安装准备窗口,如图1-27所示。

▲图1-26 安装确认窗口

▲图1-27 安装准备窗口

(5)准备工作完成后,安装程序会自动开始安装工作,如图1-28所示,在此期间用户无需进行其他操作,只需要耐心等待即可。当安装工作完成后,会弹出“安装成功”窗口,如图1-29所示。单击“关闭”按钮,完成安装。

▲图1-28 安装进行窗口

▲图1-29 安装成功窗口

(6)完成安装后,在已安装的应用中,找到Unity,单击图标,打开程序。首次打开Unity需要进行激活,具体激活方式与Windows相同,由于篇幅的限制,这里不再赘述具体过程,读者可参考前面的介绍。激活窗口如图1-30和图1-31所示。

▲图1-30 许可证激活窗口

▲图1-31 登录账号窗口

(7)完成激活后,会弹出启动窗口,如图1-32所示,单击“Start using Unity”按钮进入选择项目窗口,如图1-33所示。新创建项目时,重命名项目名称,这里的工程路径选择默认路径,然后单击“Create”按钮进入Unity 开发环境,如图1-34所示。

▲图1-32 Unity启动窗口

▲图1-33 项目选择窗口

▲图1-34 Unity开发环境

前面已经对Unity这个游戏引擎进行了简单介绍,可发布游戏至Window、Mac、Wii、iPhone和Android平台,因此,在不同的平台下,需要下载安装与集成目标平台的SDK。本小节将详细为读者介绍如何把目标平台的SDK集成到Unity。

1.Android的SDK下载安装与集成

前面已经对Unity 3D这个游戏引擎的下载安装进行了详细介绍,从本小节开始,将带领读者进行Android平台下的SDK安装与集成,具体的步骤如下。

 说明

由于Android是基于Java的,所以要先安装JDK。

(1)登录到Oracle官方网站http://www.oracle.com/technetwork/java/index.html下载最新的JDK。双击刚刚下载的JDK安装程序jdk-7u25-windows-x64.exe,根据提示将JDK安装到默认目录下。

(2)右键单击我的电脑,依次选择属性/高级/环境变量,在系统变量中新建一个,并命名为JAVA_HOME,设置该变量的值为“C:\Program Files\Java\jdk1.7.0_07”的环境变量,如图1-35所示,再打开Path环境变量,在最后加上“C:\Program Files\Java\jdk1.7.0_07\bin;”,单击“确定”按钮即可。

▲图1-35 JDK环境变量配置

(3)到http://developer.android.com页面下载Android的SDK,本书使用的版本是5.0,其他版本的安装与配置方法基本相同。将下载好的SDK压缩包解压到任意盘的根目录下,笔者将SDK放在了F盘根目录下,如图1-36所示。

▲图1-36 SDK的安装目录图

(4)右键单击我的电脑,依次选择属性/高级/环境变量,打开Path系统环境变量,在最后加上SDK的解压目录中的tools目录“F:\sdk\tools”,单击“确定”按钮完成配置,如图1-37所示。

▲图1-37 SDK环境变量配置

(5)进入Unity集成开发环境,单击菜单Edit/Preferences,如图1-38所示,会弹出新的对话框Unity Preferences,然后选择External Tool选项,在这里选择正确的Android SDK路径,如图1-39所示。

▲图1-38 Edit菜单

▲图1-39 Unity Preferences界面

2.iPhone SDK的下载安装与集成

由于Unity是跨平台的,所以对于Unity而言,在iPhone平台下同样正常运行。iPhone的SDK下载安装和集成与Android的SDK下载安装和集成大体相同。

(1)登录Apple Developer Connection的网站http://developer.apple.com下载,如图1-40所示。

▲图1-40 登录Apple Develper Connection网站

(2)如果已经有Apple ID了,则只需填写好账号和密码,单击“Sign In”按钮登录,如图1-41所示。

▲图1-41 登录界面

(3)若还没有Apple ID,则需先创建一个,创建账号是免费的。在注册信息界面,所有必需填写的信息都要填写正确,最好用英文,如图1-42所示。

▲图1-42 填写注册信息

(4)注册结束,并成功登录后,下载iPhone SDK。整个发布包大约2GB大小,因此,最好通过高速Internet连接来下载,这样可以提高下载速度。SDK是以磁盘镜像文件的形式提供的,默认保存在Downloads文件夹下,如图1-43所示。

▲图1-43 注册结束,下载iPhone SDK

(5)双击此磁盘镜像文件即可进行加载。加载后就会看到一个名为iPhone SDK的卷。打开这个卷会出现一个显示该卷内容的窗口。在此窗口中,能看到一个名为iPhone SDK的包。双击此包即可开始安装过程。同意了若干许可条款后,就安装结束。

 说明

确保选择了iPhone SDK这一项,然后单击Continue按钮。安装程序会将Xcode和iPhone SDK安装到桌面计算机的/Developer目录下。

在学习Vuforia插件之前,同样需要做相关的准备,包括下载并安装SDK以及Vuforia官方网站的账号注册。Unity开发项目需要一个用来识别的Target和运行所需的License Key,本节中将对此过程进行详细讲解,读者可根据步骤自行操作。

SDK是Software Development Kit的缩写,是为软件包、软件框架、硬件平台等建立应用软件时的开发工具的集合。Vuforia开发所需的SDK可以在官方网站免费下载,但首先需要注册账号,下面是具体的操作步骤。

(1)Vuforia的官网地址是https://developer.vuforia.com。进入Vuforia官网并注册一个账号。此处需要注意,注册密码必须要求同时存在大小写字母,并且验证码区分大小写,读者可根据网站相关提示进行操作。

(2)注册完毕后用该账号登录,单击“DownLoads”,进入下载界面。此页面有Android、iOS以及Unity开发所需的SDK,下载Unity开发所需的Vuforia的SDK,如图1-44所示。下载完成后是一个UnityPackage类型的资源。

▲图1-44 下载SDK

(3)打开Unity,创建一个新项目,并将刚才下载的SDK文件vuforia-unity-5-0-10.unitypackage导入该项目,如图1-45所示。开发者在每次创建新项目后都需要将导入此文件,然后就可以在Unity端进行Vuforia的开发。

▲图1-45 导入unitypackage文件

(4)在Vuforia官网中单击Develop,然后单击“Add License Key”按钮,申请一个许可,如图1-46所示。然后填写相关的参数,如图1-47所示。此处需要填写的Application Name可以为任意的内容,系统并无要求。

▲图1-46 申请License Key

▲图1-47 填写相关参数

(5)填写完成后,审查参数内容然后单击“Confirm”按钮完成申请,如图1-48所示。申请好许可以后,在Develop面板中就会出现刚刚申请的项目名,如图1-49所示。单击项目名就可以看到许可的Key值,如图1-50所示。

▲图1-48 完成License Key的申请

▲图1-49 申请完毕后出现项目名称

▲图1-50 项目的许可证号码

 说明 

开发者在上传某对象作为Target以后,系统会生成与Target对应的唯一的Key值。开发者在Unity客户端将Key填写进去,程序就会自动匹配与Key值相对应的Target对象,保证了Target对象的准确性和唯一性。

(6)AR案例需要扫描一个目标文件来支持增强现实的实现,Vuforia支持Image Target、Cube Target、Cylinder Target和3D Object Target四种类型的Target,具体的使用会在后面的章节进行详细介绍。此处以Image Target为例进行说明。

(7)单击官网中Develop下方的Target Manager按钮,然后单击下方的“Add Database”按钮,如图1-51所示。并在弹出的面板中为数据包填写包名,此处填写的数据包是将要做成AR插件以备使用的数据包。然后选择相应的类型,如图1-52所示。

▲图1-51 添加数据包

▲图1-52 为Image Target命名

(8)创建完毕后会在列表中出现刚创建好的数据包,单击该数据包后单击“Add Target”按钮,如图1-53所示。选择Single Image类型,单击“Browse”按钮导入找好的图片,然后单击“Add”按钮完成添加,如图1-54所示。

▲图1-53 添加Target

▲图1-54 填写Target参数

(9)添加成功后选中刚创建的Target,单击“DownLoad Dataset”按钮,如图1-55所示。在新界面中勾选“Unity Editor”一项,然后单击“Download”开始下载数据包,如图1-56所示。系统会将所需的资源打包成UnityPackage格式,开发者导入项目中即可。

▲图1-55 选择所需Target数据包

▲图1-56 下载Target数据包

本章初步介绍了增强现实以及AR工具的相关知识,学习完本章后读者能够对增强现实有一个初步的了解。除此之外,本章还详细讲解了Unity开发环境的搭建以及Vuforia开发环境的搭建,读者按照上述步骤操作,可以很轻松地向着结合Unity 3D的Vuforia开发踏出第一步。

1.什么是增强现实?

2.试述当前市面上的AR开发工具。

3.下载Unity并在Window平台与Mac OS平台上进行安装。

4.安装JDK与Android SDK,并对其环境进行配置。

5.请自行搭建Vuforia的开发环境。


前面章节中笔者介绍了增强现实的基本知识,尤其着重介绍了Vuforia工具、Unity开发环境的搭建、Vuforia SDK的下载以及其官网账号的注册。本章中将详细讲解Vuforia的核心功能,使得读者在开发过程中可以熟练应用这部分知识。

Vuforia SDK可以对图片进行扫描和追踪,通过摄像机扫描图片时在图片上方出现一些设定的3D物体,这种情况适用于媒体印刷的海报以及部分产品的可视化包装等。虚拟按钮、用户自定义图片以及扫描多目标等技术都以扫描图片技术为基础。

处理目标图片有两个阶段,你需要设计目标图像,然后上传到Vuforia目标管理进行处理和评估。评估结果有5个星级,不同的星数代表相应的星级,如图2-1和图2-2所示,星级越高表示图片的识别率也就越高。为获得较高的星级数,在选择被扫描的图片时应该注意以下几点。

▲图2-1 评估五星级图片

▲图2-2 评估三星级图片

本小节简单地介绍了选择图片的注意事项,以及在摄像机扫描图片时的环境设置,扫描图片技术的应用十分广泛,多目标技术、图片拓展追踪以及虚拟按钮技术都是通过图片实现的,大部分技术都直接或间接地应用了扫描图片技术,应重点掌握如何选择一张合适的图片。

Cylinder Targets能够使应用程序识别并追踪卷成圆柱或者圆锥形状的图像。它也支持识别和追踪位于圆柱体或圆锥体顶部和底部的图像。开发人员需要在Vuforia官网上创建Cylinder Targets,创建时需要使用到圆柱体的边长、顶径、底径以及想要识别的图片。

Cylinder Targets支持的图片格式和Image Targets、Multi Targets相同。图片为使用RGB或GrayScale(灰度)模式的PNG和JPG格式图片,大小为2MB以下。上传到官网上之后,系统会自动将提取出来的图像识别信息存储在一个数据集中,供开发人员下载使用。

现实中常常能够看到类圆柱体的物件,但是很少有非常完美、标准的圆柱体,比如生活中的水瓶、水杯、易拉罐,它们的形态都不是十分标准,但是它们的形态都十分接近圆柱体,所以开发人员可以使用它们来进行增强现实的开发。

商标是指在圆柱体上展现的图案,有些物体的商标可能只覆盖了物体的一部分,比如红酒瓶、矿泉水瓶,有的则能够将整个圆柱体覆盖住,比如易拉罐。通常个人手中并没有这些物体的具体数据和物体上商标的标准数字图片。这时需要手动测量其具体的参数,具体方法如下。

(1)使用纸带来制作模拟罐头盒、瓶子的模型

通常瓶子(罐头)的商标是360度覆盖在物体上的,所以首先用直尺来测量出瓶子(罐头)的准确高度,并将纸张裁剪到与其相应的高度,然后将纸张尽可能地包裹住瓶子(罐头),并在重叠的部分做上记号,最后将重叠的部分减掉即可。为了能够测量出瓶子(罐头)的周长,纸带的宽度必须为瓶子(罐头)上商标的宽度,而纸张的长度可以将其设置得长一些,以便后面测量。

(2)开始获取圆柱体需要的数据

通过上一步可以使用纸带准确地获取了瓶子(罐头)的具体尺寸,包括物体的高以及周长,接下来展开纸带,计算出需要的纸带的长和宽,在制作TargerManager时可以通过使用圆的周长公式求出圆柱体的顶径和底径数据,如图2-3所示。

▲图2-3 展开模型计算数据

通常为了制作方便,识别效果好,开发过程中常常会使用一些自制的图片。在制作图片时也有许多方面需要注意,使得让追踪和识别的精度更高。下面将详细介绍对数字图片的几种处理方式,来适应开发过程中对图片的要求。

(1)数字图片的制作规格

数据测量完成后,开发人员要使用绘图工具来制作一张自己的商标图片,并且商标图片的宽高之比要与纸带的宽高比相同,看上去数字图像的形态要与纸带十分相似。一般情况,需要设置图片较短的一条边至少有240像素。

(2)调整图像——添加白边

也有一些瓶子(罐头)上面的商标宽度小于瓶子(罐头)的高度,并没有完全覆盖住整个瓶身,这种情况在制作数字图像时,需要在商标图片的上方和下方加上白边,使图像的宽高比能够匹配纸带的宽高之比,如图2-4所示。

▲图2-4 添加白边

(3)调整图像——剪切图片

如果使用的源图像的宽高比小于制作过程中所需要的宽高比,开发人员应将源图片的上方和下方裁切掉一部分,如图2-5所示,使其能够匹配需要的宽高比。但这是有副作用的,如果这么做就会使得图像变得不完整,会损失掉一些图像细节,一般情况下,如果没用特别重要的细节,这并不会造成严重的影响。

▲图2-5 剪切图片

(4)调整图像——添加图像长度

有一些瓶子(罐头)上的商标并不会360°包裹瓶身,这就会导致上面商标的宽高比要小于从纸带上获取的宽高比,这时就需要在图片的左右两端添加白色区域来扩大源图像的宽高比,如图2-6所示,但是这么做的副作用就是,会使追踪的限制角度小于360°。

▲图2-6 添加图像长度

(5)图像调整——拉伸图像

通过拉伸图像来匹配需要的宽高比,这种方法适用于上述的任何一种情况,无论源图像的宽高比和需要的宽高比相比是大是小,如图2-7所示。但是如果这样做的话,由于会对源图像的宽高比产生变化,从而使得图像内容变形。

▲图2-7 拉伸图像

(6)开始获取圆锥体需要的数据

首先开发人员需要展开在测量时使用的纸带,圆锥体展开的纸带应为扇形,如图2-8所示。然后测量其宽度与高度,此时纸带的宽和高应为能够紧紧包裹住扇形纸带的矩形的宽和高。还需要测出锥体的顶径和底径(锥体顶径和底径不相同),用于制作TargetManager。

▲图2-8 锥体展开

(7)制作需要使用的数字图片

数据测量完成后,需要使用绘图工具来制作一张自己的商标图片,并且商标图片的宽高之比要与纸带的宽高比相同,看上去数字图像的形态要与纸带十分相似。一般情况,开发人员需要设置图片较短的一条边至少有240像素。

(8)调整图像

在制作自己的商标图片时,和圆柱体同样会碰到源图像与需要的宽高比不匹配的情况,其调整方式可以参照上面介绍的圆柱体的调整方式,包括添加白边、添加图像长度、拉伸图像等,如图2-9和图2-10所示。

▲图2-9 添加白边

▲图2-10 增长图像

现今物体的识别和追踪精度并不是十分高,所以开发人员在制作增强实现类的应用程序时还需要注意一些细节,通过一些方法来使用户能够有很舒适的用户体验,在这里笔者列出了以下几点来帮助增加应用程序的识别和追踪的精度,具体方法如下。

(1)最好不要使用玻璃瓶等能够产生强烈镜面反射的物体,这样会影响到追踪和识别的精度。

(2)选用的物体上的图像最好能够覆盖住整个物体并提供很丰富的细节信息。

(3)当想要从物体的顶部或底部来识别物体,那么合理的设置物体顶部和底部的图像便尤为重要。

(4)所选用物体的表面图像不要是大量重复的或相同的图片,如果选用这样的物体,那么在识别时会对物体当前的朝向产生歧义,从而影响到实际体验。

除了上述的图片识别和圆柱体识别之外,还可以使用立方体盒子作为识别的目标。立方体是由多个面组成的,一张图片的ImageTarget就无法实现,这就需要使用到多目标识别技术(Multi-Targets),即将所要识别的立方体的6个面以及长、宽、高等数据上传,下面来详细介绍此种方法的相关知识。

多目标对象为立方体,共有6个面。每一个面都可以被同时识别,这是因为它们所组成的结构形态已经被定义好。并且当它的任意一个面被识别时,整个立方体目标也会被识别出来。虽然是将立方体的6个面作为数据上传,但是这6个面是不可分割的,系统识别的目标为整个立方体,如图2-11所示。

▲图2-11 多目标识别效果图

所要识别的立方体目标其实是由数张Image Target组成的。这些Image Target之间的联系是由Vuforia目标管理器或者是由XML数据配置文件负责,并且存储在XML文件中。开发者可以修改这个XML文件,并且也可以配置立方体目标。

多目标识别作为增强现实技术最基础的识别方法之一,与图片识别相比,用户可以扫描身边的具体物体,更加具体也更加富有乐趣,但缺点是不如图片识别方便快捷,通常用于产品包装的营销活动、游戏和可视化产品展示等。

多目标识别的识别对象由Vuforia目标管理器创建,支持JPG与PNG格式的RGB和灰度图,并且上传的目标图片大小都不得超过2MB。系统将这些图片中的特征提取并存储在一个数据库中,可以下载以及与应用程序打包在一起。

对于目标识别体的选择也十分重要,影响目标识别体的易识别性的因素有两个,即立方体的深度和几何一致性,如图2-12所示。建议多目标的深度至少为宽度的一半,这是因为多目标识别在检测和追踪目标的时候,如果物体旋转,系统必须找到一定数量的特性的多目标对象,即各个面的图片。

▲图2-12 立方体的深度

几何一致性是指保证各个部分的目标之间的空间关系不发生改变。比如,移开盒子的顶面,立方体的几何形象就会发生改变。在这种情况下,系统会假定被移动的部分仍存在。具体做法是,系统会保留已经被移动的部分,或者将已移动的部分创建为一个单独的图像目标。

系统的这种处理方法允许应用程序可以在立方体即使是在被撕裂的情况下,仍然可以单独地追踪已经被移动的部分,而不影响立方体目标的识别性能。多目标识别的用途广泛,具体应用案例将在下一章进行详细介绍与演示。

除了基于图片特征的检测和追踪之外,Vuforia SDK还提供一种特殊的基准类型——标记框架,把标记框架图像的边界进行二进制编码,使其成为标记框架的唯一ID。相比其他传统的基准标记,该技术效果看起来更加自然。

当图片尺寸非常小或者有几张图片需被同时识别时,可以采用标记框架技术。在官方提供的512张标记框架图片中,每张图片的边界都不相同,如图2-13和图2-14所示。可以将任何图片放置在标记框架标记内,因为该图片不会被用于检测和追踪。

▲图2-13 原始的标记框架图片

▲图2-14 整体的标记框架图片

 说明

放置于标记框架内的图片不应该使标记框架图片边界的图案变得模糊,否则会影响标记框架的性能。官网提供的512张标记框架位置为Vuforia\Editor\ FrameMarkerTextures目录下的压缩包中,将压缩包解压到任意目录下,再将所需要的标记框架图片导入Unity编译器即可。

官方自带的标记框架案例向开发人员展示了如何定义和配置标记框架技术,并且还讲解了如何使用Vuforia API去动态地创建和销毁标记框架,这些内容将在后面的章节中详细讲解。在开发过程中,一个理想的标记框架包括以下几个属性。

Vuforia SDK不仅可以通过扫描图片进行识别,还提供了文本识别功能。该SDK一共提供了约十万个常用的单词列表,Vuforia可以识别属于单词列表中的一系列单词。此外,开发人员可对该列表进行扩充。在开发过程中,可以将文本识别作为一个单独的功能或者将其和目标结合在一起共同使用。

文本识别引擎可以识别打印和印刷的字体,无论该文本是否带有下划线。字体格式包括正常字体、粗体、斜体格式,如图2-15所示。文本目标应被放置在漫反射灯光照射的适度明亮的环境中,保证该文本信息被均匀照射,更加有利于Vuforia SDK的检测和追踪。

▲图2-15 可识别的字体格式

单词列表可以从一篇文章中加载,还可以手动添加应用程序所需要的其他单词,该单词列表作为应用程序识别和跟踪单词时的参考对象。Vuforia SDK附带默认的是英语单词列表,并且该引擎也只能识别字母。开发人员在手动添加单词时应遵循以下规则,如图2-16所示。

▲图2-16 手动添加单词的规则

在文本识别引擎中,开发人员还能自定义文本识别过滤器,排除某些词集被检测到或者保证只有特定的词才能被检测到。过滤器带有过滤器列表和过滤器模式两个元素。文本识别单词列表的整体结构如图2-17所示。Vuforia定义的两种模式如表2-1所列。

▲图2-17 单词列表整体结构

表2-1 Vuforia定义的两种模式介绍

参 数 名

含  义

Black-list mode——黑名单

Vuforia 将识别当前单词列表中不包含于过滤列表中的所有单词

White-list mode——白名单

Vuforia 只识别当前单词列表中包含在过滤列表中的单词

 

 说明

制作过滤器列表所需遵循的规则与手动添加单词列表的规则相同,有需要的读者可以参考前面章节的内容,而过滤器模式的设置是在代码当中完成的,相关内容将在下面章节详细讲解。

例如在单词列表中包含cat、dog、fish、lion、zebra五个单词,而过滤器列表有dog和lion。当过滤器模式为黑名单时,Vuforia SDK只可以识别cat、fish和zebra三个单词。若过滤器模式为白名单时却只可以识别dog和lion。

User Defined Targets(用户自定义目标)实质上就是Image Targets(图片目标)。只不过这里用到的识别图片是用户在程序运行时使用摄像头拍摄下来的图像。它能够实现的功能和Image Targets大致相同,但是唯独不支持Virtual Button(虚拟按钮)。

这样在任何时间、任何地点用户都可以随时地选取需要被识别的图像,而不需要在游戏开发过程中预先选定好需要被识别的图像,这样能够更好地为用户提供丰富的增强现实体验。

为了保证应用程序追踪和识别的精度,用户也同样需要知道什么样的情况下效果最好。需要被用户捕获并设置为自定义目标的物体表面,不要产生强烈的镜面反射,周围环境应该自然明亮。下面笔者会列出几点选取目标时需要注意的事项,具体内容如下。

(1)丰富的细节,如街道、人群、体育场等复杂混乱的场景都十分合适。

(2)在光线和色彩上有很强的反差,比如颜色丰富并带有明暗效果的场景。

(3)没有大量重复的图案,比如棋盘,窗户布局相同的写字楼、居民楼和草地等。

(4)易用性,最好如名片、杂志等能够在生活中常见且具有丰富细节信息的物体。

Unity版本的Vuforia SDK插件中会包括一系列的预制件供开发人员使用,其中包括UserDefinedTargetBuilder(用户自定义目标生成器)预制件。该预制件上挂载着UserDefined TargetBuildingBehaviour脚本,如图2-18所示。

▲图2-18 预制件面板

UserDefinedTargetBuildingBehaviour脚本主要负责处理开启或停止对目标的扫描以及对新目标的创建。在该Inspector面板中有如下3种设置供开发人员选择。如果后两项没有被启用,那么扫描模式就不会被关闭,并且当目标被创建之后立即就会对它们进行追踪,这种情况下特别适合开发多目标识别功能,即能够同时识别多个存在场景中的目标,具体设置信息如下。

虚拟按钮是通过Vuforia SDK插件实现与现实世界交互的一种媒介。用户可以通过对现实世界中的一些手势操作从而影响到应用程序中场景的体现。本小节笔者将向读者介绍AR(增强现实)中虚拟按钮的具体实现细节。

虚拟按钮提供了一项很有用的机制,即基于图像的目标互动。当要为应用程序添加虚拟按钮来增强用户体验时,虚拟按钮的尺寸和摆放的位置都需要被慎重考虑。以下几个因素会影响虚拟按钮的响应性和可用性,具体内容如下。

用户自定义的虚拟按钮的矩形区域应该等于或大于总体目标区域的10%。摄像机中拍摄的画面中,当虚拟按钮下方的图像特征信息因被遮挡而减少时,就会触发相应的按钮事件。虚拟按钮的大小就是为能够很好地响应触发事件,例如一个需要被用户手指触发的按钮的大小就应该小于用户的手指。

而且虚拟按钮可以被设置不同的触发灵敏度,比如对射击游戏的开火键,高灵敏度的按钮的触发显然会高于低灵敏度的触发。而在AR中,虚拟按钮的灵敏度是通过虚拟按钮所需要的被遮挡的面积以及遮挡的时间来体现的。在开发过程中最好要对每一个按钮都进行灵敏度测试,以便达到最好的效果。

AR中影响虚拟按钮响应的因素不仅有虚拟按钮的尺寸,虚拟按钮与图像和其他虚拟按钮的相对位置关系也都是影响虚拟按钮响应效果的重要因素,下面将对虚拟按钮在开发过程中的位置摆放进行详细讲解,使读者能够明白其中的细节。

(1)将图片放置在特征信息丰富的图像上方

虚拟按钮的触发是由于虚拟按钮下方的真实世界中的图像目标的特征信息被遮挡或变得模糊而确定的。所以需要将虚拟按钮放置在拥有丰富特征信息的图像上,以便其能够正确地触发OnButtonPressed事件。读者可以在官网的Target Manager页面查看图片特征信息的分布情况,如图2-19所示。

▲图2-19 图像特征信息分布

(2)使虚拟按钮远离图像边框

虚拟按钮不应该被放置在目标的边界上,因为基于图片的目标有一个边框大约占整个图片区域的8%。在边框中的内容是无法被识别和追踪的,因此,如果虚拟按钮放置在边框区域,即使其下方的图片细节信息被遮挡住,按钮也不会被触发,如图2-20所示。

▲图2-20 图像边框区域

(3)避免按钮间的重叠

建议读者不要在用户面对目标时,将虚拟按钮堆叠在一起,因为用户在操作的时候程序无法识别用户需要触发哪个按钮,从而很容易引起误操作。如果需要将多个按钮堆叠在一起,那么就需要编写逻辑代码来决定哪一个按钮可以被触发,哪些按钮不能够被触发。

云识别服务是一项在图片识别方面的企业级解决方案,它可以使开发人员能够在线对图片目标进行管理,当应用程序在识别和追踪物体时会与云数据库中的内容进行比较,如果匹配就会返回相应的信息。所以使用该服务需要良好的网络环境,且除了Classic类型的许可密钥外都提供云服务功能。

云识别服务非常适合需要能够识别很多目标的应用程序,并且这些目标还需要频繁地进行改动。有了云识别服务,相关的目标识别信息都会存储在云服务器上,这样就不需要在应用程序中添加过多的内容,且容易进行更新管理,但目前云识别还不支持Cylinder Targets 和Multi-Targets。

开发人员可以在Target Manager中添加使用RGB或灰度通道的JPG和PNG格式的图片目标,上传的图片大小需要保持在2MB以下,添加后官方会将图片的特征信息存储在database中,供开发人员下载使用,关于图片目标的详细信息在前面的章节已经详细讲解。

云识别功能支持开发人员通过 Vuforia Target Manager和 Vuforia Web Services API这两种渠道来对云数据库中的目标进行管理和上传,由于本书主要针对Unity平台对Vuforia的支持,所以对Web Services有兴趣的读者可以查看相关专业资料进行学习,具体内容如下。

1.创建云数据库

云数据库用来支持云识别服务,在其中开发人员可以添加超过一百万张图片目标用来支持应用程序的识别追踪功能,下面介绍开发人员如何在Vuforia Target Manager中创建一个新的云识别数据库,具体步骤如下。

(1)首先进入到Vuforia的官方网站(https://developer.vuforia.com/),单击导航栏中的Develop选项,如图2-21所示,登录账户并进入到Vuforia Developer Portal的Target Manager界面,如图2-22所示。

▲图2-21 进入管理界面

▲图2-22 选择目标管理

(2)然后单击“Add Database”,并在弹出的窗口中选择Cloud选项,并在Name栏中添加自定义的数据库名称,需要注意的是,名称不可与其他数据库重复,最后在窗口的最下方选择开发人员申请的License Key,单击“Create”即可,如图2-23所示。

▲图2-23 创建数据库

2.添加图片目标到云数据库

云数据库创建完毕之后,开发人员就可以向其中添加所需要的图片目标。添加图片目标的方式有两种,一种是通过官网的Target Manager进行添加,另一种就是使用Vuforia Web Services提供的API接口进行添加,这里仅对前者进行详细介绍,添加的具体步骤如下。

(1)首先需要进入到Target Manager页面,在其中读者会看到自己账户下所创建的所有数据库,如图2-24所示。接下来单击创建好的云数据库,进入到目标上传界面。

▲图2-24 选择云数据库

(2)单击目标上传界面中的“Add Target”按钮,在弹出的窗口中开发人员可以选择需要上传的图片文件、设置目标宽度(目标的高度会被自动计算出来)、添加元数据(可选)以及为目标进行命名,完成后单击“Add”按钮即可上传目标,如图2-25所示。

▲图2-25 添加图片目标

 说明

元数据其实是一个Josn文件,Josn文件可以保存所有数据,包括图片链接、音乐链接等资源,云识别允许一个目标带有一个元数据文件,这样在应用程序识别该目标之后就能够获取对应的元数据,解析出其中所包含的数据加以使用,关于Josn文件的编写读者需要参考其他专业的资料学习了解。

智能地形的特点是可以突破人眼视觉的能力,对现实世界进行进一步的重建与拓展。智能地形的作用是能够重建和增强场景的物理环境,创建一个全新类型的可视化应用程序。官方的Penguin案例使用的便是智能地形技术,如图2-26所示。

▲图2-26 官方案例——Penguin

顾名思义,智能地形可以更加方便地制作地形,当开发者使用智能地形对现实场景进行扫描时,现实当中存在的物品都会生成地形。比如图2-26中的可乐罐是真实存在的,在智能地形中就会在手机端屏幕生成结冰的效果,这就是通过智能地形来实现的。

智能地形的子对象包括Primary Surface和Prop Template两部分。Prop Template是一个静态刚性几何体,而Primary Surface是一个实例化的表面,是智能地形跟踪和识别对象所需的模式和细节。智能地形通过所使用的其他Vuforia可追踪类型(如图片目标)寻找相同类型的自然物体,如图2-27所示。

▲图2-27 智能地形组成部分

props作为场景中独立的立方体对象,具有刚体组件和网格渲染组件。同样的,地形的主体——Surface表面也具有刚体组件和网格渲染组件。开发人员可以将props和Surface面的网格属性独立地运用到渲染技术中,从而来评估它们的应用程序的逻辑性能。

 说明

所识别的物体最好是有贴图的、大小适中的立方体或者圆柱体,小到罐装的木糖醇,大到一个礼品盒都可以。还有一点需要注意的是,智能地形对被追踪的props的数量并没有严格的限制,但是最佳效果是少于5个物体。并且这些物体的表面不能够反光或者透明,比如玻璃。

智能地形的子对象的作用是当程序被运行时,开发者会扫描到已经创建并配置好的目标体,目标体所在的表面即为surface面,目标体周围的所有现实存在的物体都会生成props,通过修改Surface和props的形象可以实现各种各样的地形的创建,如图2-28所示。

▲图2-28 智能地形效果图

 说明

官方案例中可乐罐为目标体,所在的桌面为Surface面,周围的物体生成的冰块即props。通过修改智能地形的子对象,即可实现不同地形的创建,使得地形这一本来复杂的实现变得十分简单。

智能地形能够对现实环境中的物体进行识别,所以对现实中的物体也有着一定的要求。对于物体来说,它们应该有着固定的几何结构,并且其表面图像能够提供丰富的特征信息,以便能够被智能地形追踪器识别和追踪。

智能地形技术在拥有明亮光照的静态环境下的近距离桌面上展示效果最好。而且因为智能地形案例中物体表面的特征信息是根据用户的位置决定的,位置不同,角度不同,追踪所得的精度也会有所不同。这也是为何在反射度强和较为透明的表面并不适合智能地形技术的实现。

对于智能地形Surface来说,理想的状态表面密度统一,并且在视觉上不同于相邻表面。智能地形只在多核设备上支持,并且对设备配置也有一些要求,苹果设备只支持iPhone 4以后的机型。而安卓设备最低配备要求如下:

智能地形的工作过程包括智能地形改造、识别物理对象表面和追踪物理对象表面特征信息3个步骤,最终的结果都会在Unity场景中通过3D网格表现出来。这些Surface面和对象的网格集合称为场景的地形。智能地形的3个阶段的详细说明如下。

(1)准备阶段:用户创建一个区域来添加props,并且初始化目标。

(2)扫描阶段:智能地形跟踪器将正在使用props捕获并重建。

(3)追踪阶段:将Untiy场景中已经开发的地形进行实时扩展。

 说明

扫描阶段是从一个预定义的并且用于初始化地形的目标开始,该目标可以是一个在设备或云数据库上初始化的图片目标、立方体目标或者圆柱目标。一旦地形初始化完成,智能地形追踪器将开始重建Surface表面和所有被追踪到的props,重建完成后将它们添加到地形上。

Vuforia官方插件中包含了智能地形的预制件,智能地形预制件上挂载了智能地形的实现代码,如图2-29所示。Reconstruction Behaviour脚本负责重建地形,并且在地形被实例化和更新时,管理场景中智能地形实例发出回调方法。下面是该组件上的一些可选项,其相关功能的具体介绍如下。

▲图2-29 智能地形组件

前面章节中向读者介绍了标记框架、扫描图片、多目标等技术,细心的读者会发现这些技术都是基于图片实现的。但是现实生活中有很多3D物体,比如玩具车、电子产品以及生活用品等,Vuforia也提供了一套技术来实现与3D物体的交互。本节中,笔者将详细讲解该技术。

官方提供了一款扫描App,利用该软件可以将3D物体的物理特性扫描成数字信息,该App所识别的3D物体是不透明、不变形的,并且其表面应该有明显的特征信息,这样有利于App去收集目标表面的特性信息。例如电子器件和玩具车,如图2-30和图2-31所示。图片目标与3D物体的对比如表2-2所列。

▲图2-30 玩具车

▲图2-31 电子器件

表2-2 图片与3D对象目标的对比

物体目标类型

目 标 源

使 用 建 议

基于图像的目标

平面图

出版物、产品包装

3D 物体目标

根据扫描仪扫描出来的目标特性

玩具、产品、复杂的几何图形

前面笔者提到官方有一款App(以下简称Vuforia扫描仪)可以扫描并收集3D物体表面的物理信息,将扫描的数据上传至官网并打包下载到Unity编译器即可,这样就完成了3D物体的扫描。进入Vuforia Developer Portal官网,在Downloads下的Tools页面中有一个Download APK字样,如图2-32所示。

▲图2-32 下载APK

在下载到的压缩包中,将其解压到任意文件夹中,在Media文件夹中有两个pdf文件,将其复制到和APK同一目录下,如图2-33所示。官网上提示该APK只支持Samsung Galaxy S5和Google Nexus 5,但是笔者在测试之后发现其他部分手机也可以安装并扫描成功。

▲图2-33 下载的APK文件夹

下载并安装Vuforia扫描仪后,就可以利用该App对3D物体进行扫描,扫描完成后会产生一个*.od文件,该文件包含了3D物体表面的物理信息。将其上传至官网打包下载数据源即可。下面笔者将详细讲解扫描3D物体的步骤。

(1)为了更好地对3D物体进行扫描,首先应搭建扫描环境。官网上建议将整个环境设置成灰色最为适宜,所以笔者搭建了一个箱子专门用来扫描3D物体,如图2-34和图2-35所示。将其放置于明亮的环境中,确保3D物体表面都被均匀照射。

▲图2-34 扫面环境内部

▲图2-35 扫描环境整体

(2)在开始扫描物体目标之前,需要将APK压缩包中附带的Object Scanning Target.pdf文件打印出来,如图2-36所示。将3D物体放置在该图片右上角的空白区域,并且与图中的坐标轴对齐。该图纸的作用是用来确定物体的精准位置和姿势。

▲图2-36 Object Scanning Target图片

(3)准备工作完成后,就可以开始3D物体的扫描。笔者采用的3D物体是一个无线鼠标。单击Vuforia扫描仪图标进入应用程序,如图2-37所示。单击“+”图标创建新的扫描会话,当物体位置摆放正确时,会出现一个矩形区域将物体包裹,如图2-38所示。

▲图2-37 扫描开始界面

▲图2-38 整个矩形包裹

(4)这里需要提醒读者的是,如果只将鼠标的一部分放在空白区域,Vuforia扫描仪就只会扫描收集位于空白区域的鼠标部分表面的数据信息,如图2-39所示。单击红色按钮开始对物体进行扫描,在扫描过程中不要移动3D物体,而是通过移动摄像机来对整个物体进行扫描。

▲图2-39 半个物体矩形包裹

(5)当一个表面区域被成功捕捉后,该区域会由白色变成绿色,如图2-40所示。可以适当改变摄像机和3D物体间的距离来对部分区域进行捕捉。当捕捉到大部分的表面信息后即大部分变为绿色时,再次单击录制按钮停止扫描。

▲图2-40 物体表面颜色变化

(6)输入一个扫描结果名称“shubiao”,保存后会出现一个信息摘要,如图2-41所示。在界面底部会出现Test和Cont Scan两个按钮。可以通过单击Test按钮对扫描结果进行测试,测试结果如图2-42所示。若对扫描结果不满意可以单击Cont Scan继续对物体进行扫描。

▲图2-41 扫描信息摘要

▲图2-42 扫描测试结果

(7)单击“+”旁边的设置按钮可以进行数据分享,将其分享到PC端会发现其是一个*.od文件,如图2-43所示。将其上传至官网,具体步骤将在后面章节中详细介绍。官网会对*.od文件信息进行处理,下载的DateBase数据包会缩小很多,开发人员无须担心*.od文件影响APK包的大小。

▲图2-43 .od文件

本章初步介绍了Vuforia的几项核心功能,学习完本章读者能够对Vuforia的相关功能有一个初步了解,包括扫描图片、圆柱体识别、多目标识别、文字识别、云识别、物体识别等。本章对核心功能的介绍较为简单,具体的案例将在下一章中进行详细介绍。

1.简述选择被扫描图片时的注意事项。

2.在圆柱体识别过程中,如何获取实际物体的具体参数?

3.简述多目标识别的原理。

4.云识别的两种管理方式是什么?

5.智能地形的工作原理是什么?

6.请自行尝试进行3D物体的扫描。


相关图书

Unity游戏开发入门经典(第4版)
Unity游戏开发入门经典(第4版)
Unity  3D游戏开发技术详解与典型案例
Unity 3D游戏开发技术详解与典型案例
从零开始:快速入门Unity 3D游戏开发
从零开始:快速入门Unity 3D游戏开发
Unity 3D脚本编程与游戏开发
Unity 3D脚本编程与游戏开发
AR开发权威指南:基于AR Foundation
AR开发权威指南:基于AR Foundation
VR与AR开发高级教程:基于Unity(第2版)
VR与AR开发高级教程:基于Unity(第2版)

相关文章

相关课程