在上节课中,我们对 AR 目前面临的五大挑战进行了梳理。这些技术挑战的解决方案仍在完善中,功能不断强大的 ARCore 让技术难题迎刃而解,同时也为开发者打造体验更好的 AR 应用插上了翅膀。本文将带你起步,开始 AR 应用开发之旅。

ARCore 实际开发前提:扬长避短

优势:海量用户期待优质 AR 体验

全球超过 85% 的移动设备搭载的是 Android 操作系统。在 2018 年初,支持 ARCore 的 Android 智能手机达 1 亿部。截止到 2020 年,已经增加到了 7  亿部。但是因为 ARCore 需要使用强大的算法支持,所以不是所有 Android 平台设备都满足打造 AR 体验的必要规范。不过,正如过去十年我们看到的那样,技术会围绕着贴合用户需求的系统和功能迅速发展。越来越多的手机搭载了强大的处理器和创新的处理单元(简称 VPU),这些创新型移动处理单元将让 ARCore 功能变得更加强大。

2017 年 Android 在全球至少有 20 亿的装机量,是全球使用最广泛的智能操作系统,也就是说 ARCore 的应用拥有了庞大的潜在用户,他们在期待着获得更沉浸式的 AR 体验,开发者们快行动起来吧。

目前, ARCore 在中国地区支持的设备列表如下:

数据来源:谷歌开发者官网(最新)

局限:弱光环境和光滑平面识别困难

对于智能手机来说,AR 仍然是一项新兴的技术。ARCore 平台的功能十分丰富,但它目前仍存在一些局限。比较主要的局限现存于弱光环境和光滑平面下的识别。

就像眼睛一样,AR 需要光才能识别现实环境中的物体。为了找到特征点和平面,手机摄像头和其他传感器需要实时、流畅地探寻空间中所有的事物。这意味着,在昏暗的环境中,大多数增强现实设备难以正确理解所处的环境,因此无法准确地渲染体验。弱光环境是现有每个 AR 跟踪系统都面临的挑战。解决这个难题的关键在于看见和理解真实环境并确定自身朝向。要做到这一点,真实环境需要有良好的照明条件和可见度。

AR 会不断尝试寻找鲜明的特征点来观察、跟踪并记忆,从而在 AR 体验中确定设备和数字对象的朝向。这意味着 AR 跟踪系统在处理某些平面时会更加吃力。比如,在处理白色木质咖啡桌时,平面特征点很难抓取。相比较而言,放有咖啡杯、纹理粗糙的木桌更容易被 AR 识别。咖啡杯与粗糙的纹理所形成的高对比度可以方便系统创建特征点,可见鲜明的纹理结构至关重要。

简单来说,物体表面和周围空间的差异化特征越明显,AR 应用的效果就会越好。如下图中花园里的桌子, ARCore 很容易就识别到了桌面,然后让安卓小人出现在了桌子上。

然而, 摄像头技术的升级和计算机算法领域的不断进步, 让过去许多无法辨认的场景也在不断改善。

AR 应用开发需要哪些准备工作?

第一步:站在用户的角度思考问题

在思考 AR 应用要面对的用户时,不妨从“场景”这个角度切入。简单来说,就是开发者要写出用户可以看到的东西,运用第一人称,站在第一视角。这么做可以提前、直观且高效地把握用户体验。在这里,我们要介绍几个概念,帮助你更好把握用户心智。

  • 输入选项(Input Option)

    输入选项指的是在任一个场景中用于互动的选项。作为开发者,需要充分了解输入选项的特点以及使用场合。

  • 用户操作(User Action)

    顾名思义,它指的是用户需要做些什么,进行哪些操作才能在一个场景内移动,或者在不同的场景间转换。虽然这个问题至关重要,但是没有一个统一的答案。归根结底需要开发者根据应用的场景打造最佳的个性化体验。

  • 图标含义(Icon Key)

    这是最重要的一点。开发者需要写出图标的图例信息,解释所有图标的含义,给用户明确的解释。整个 AR 系统,从初始场景的呈现到可用的输入选项,再到音频提示,开发者需要提前帮用户进行规划,才能打造沉浸式 AR 体验。

第二步:克服技术局限

正如前文提到的那样,AR 技术目前仍存在诸多局限。例如,开发者无法在 AR 体验中加入很多逼真的资源和元素。因为大多数 3D “角色”都会引发所谓的 “恐怖谷(Uncanny Valley)” 效应。如果你对这个术语没有概念,看看下面两个例子。

左图中,开发者在现实环境中放置了一个一比一还原的“虚拟人物”。想一想,如果你利用移动设备体验 AR 时,突然有一个“真”人出现在你面前,但是看起来行动僵硬,你可能会觉得怪怪的。这种虚拟对象给用户的体验感并不好。相比较而言,选择卡通化的设计和光照会让用户感觉沉浸感更强。如同右图这个可爱的卡通狮子,它并不会让用户瞬间出戏,反而会觉得生动有趣。

由此可见,试图模仿真实物体效果往往会适得其反。所以开发者想要避开这个“坑”,就需要考虑如何在用户体验中增加并运用艺术设计,打造出理想效果。

第三步:提醒用户:不可“越界”

在玩游戏时,爱探索的玩家会试图跑出某个关卡的边界,或者直接跳转到最后一个关卡一试身手。用户对于新鲜的事物总是跃跃欲试,对于 AR 也不例外。比如,有不少用户会想走进虚拟对象或者与之互动,这种做法是不符合逻辑的,就如同下面这个例子:

例如你的 AR 场景是想要在真实世界中加上一盏“以假乱真”的灯,我们就需要考虑,如果这盏灯真实存在于现实生活中,图里这种操作还能实现么?答案是否定的。因为手机会和真实灯盏“亲密接触”,不可能出现图中的“破壁”效果。我们无法直接透过手机看到里面的结构。但是,虚拟的 AR 对象无法阻止用户进行图中的操作。这就需要开发者对用户进行引导和提醒。

第四步:打造 3D 数字对象,请备齐工具

部分 AR 资源是 2D 的展现形式,但沉浸式 AR 体验往往搭配的是 3D 数字对象,这样才能给用户更真实的体验。出色的 3D 建模工具如 Maya、ZBrush、3DS MAX 等是面向专业人员的,所以对于新用户来说,在最开始上手时有畏难情绪是很正常的。每种工具都有专门的课程,年轻的开发者只有不断学习、积累经验才能掌握这些工具的各种特性和功能。

在 ARCore 的入门阶段建议先使用 Google Poly 这个资源库。它汇集了各种 3D 资源和设计,几乎涵盖了全球用户构建的模型。通过 Poly,开发者可以从现有的庞大的资源库中挑选所需资源,下载后即可在自己的 ARCore 体验中应用。以此为基础,便可以快速打造自己首个 ARCore 体验。

比如,你只需要在 Poly 中搜索“汉堡”,选择并下载这个资源,就可以为自己的 ARCore 应用获得一个现成的汉堡,是不是非常方便。

第五步:模拟用户体验,提前起草设计

在用户流这部分中,我们与大家讨论过提前起草设计的重要性。一定要预先勾勒出想要为用户打造的体验,尽量避免可能出现的问题。想要做到这一点,分镜脚本、草图和文本大纲都是不错的展现形式。

具体哪种方式取决于团队的选择,以及想要打造哪一类 AR 应用。一般而言,建议编写一份带有注释的设计文档,方便团队成员及用户快速理解你的想法。

概念解析:设计文档(Design Document)在这里指的是想要构建的应用或体验的完整大纲。它应涵盖一份调查清单,详细说明了开发者期待用户发出的所有互动。同时,能够将应用体验具象化,呈现展示界面,阐释在现实空间中放置虚拟对象的方法。

参考示例

在编写这份文档时,开发者应采纳声音设计师、3D 模型专家和团队内其他专业人员的意见。确保文档中包含所有计划使用的元素和 3D 资源。在用户开启体验到停止使用的这段时间内,所有的互动都应有详细的规划。即使团队中只有一位成员,也能从这个具有“前瞻性”的神操作中获益。

第六步:组建团队,实现愿景

千军万马总好过单打独斗。在开始界定 ARCore 的体验并进行规划时,总会需要高手帮助你实现愿景。在预算允许的情况下,聘请专业人员会更加省时省力。这里给你一些参考。

  • 软件开发者

    熟练运用计算机知识、有编程经验的软件开发者,可以帮助你细化一些宽泛的概念并实现具体的构思。不过,顶尖的计算机专家往往收费比较高,所以还要按照预算合理选择。

  • 3D 设计师

    如果在 Poly 中不能找到所需的资源,也没有能力从头开始设计模型,专业的 3D 设计师是团队必要的人才储备。这样,不仅可以为自己的内容搭建独有的资源,而且能够在打造 AR 体验中不断进行调整。

  • 纹理设计师

    独特的纹理如同 3D 模型的皮肤,而纹理设计师可以为 3D 设计师的成果添砖加瓦。

如果你对 AR 领域有兴趣,想要乘上未来科技的新浪潮、打造属于自己的 AR 应用,相信读完这篇文章你能获得一些思路和想法。如果你对文中提到的工具仍然存在疑惑,请期待下一讲内容。我们将手把手教你如何利用 ARCore 来优化 AR 体验。

如需 ARCore 入门课程系列视频教学,请前往中国大学 MOOC 官网搜索【Google ARCore 入门开发课程】。点击“阅读原文”也可进入学习哦。

延伸阅读:

  • ARCore 开发入门课程系列】解密 AR 增强现实

  • ARCore 开发入门课程系列】AR 核心概念及技术解析

  • 【ARCore 开发入门课程系列】AR 技术让想象力成为“现实”,距离还有多远?

【ARCore 开发入门课程系列】六步带你着手打造优秀的 AR 应用相关推荐

  1. UWP开发入门(十六)——常见的内存泄漏的原因

    原文:UWP开发入门(十六)--常见的内存泄漏的原因 本篇借鉴了同事翔哥的劳动成果,在巨人的肩膀上把稿子又念了一遍. 内存泄漏的概念我这里就不说了,之前<UWP开发入门(十三)--用Diagno ...

  2. 【Arduino】开发入门教程【六】数据类型转换函数

    Arduino数据类型转换函数有 char() : 将任意类型的值转换成char类型; byte():  将任意类型的值转换成byte类型; int():  将任意类型的值转换成int类型; long ...

  3. 云计算是什么意思?新手怎么学云计算开发入门课程

    云计算是什么意思?云计算就是将处理数据这个步骤放在网络的远程端进行,因为手机.平板和个人电脑等个人设备的数据处理性能(CPU.内存.硬盘和GPU等)是非常有限的,而让用户购买十几万甚至上百万的高性能服 ...

  4. 区块链DAPP开发入门课程(PHP版)

    1.前言及环境部署 1.1 课程说明 为什么有这个课程? 入门区块链开发已有些时日,走过的坑实在是太多了,对于像我这种从事互联网软件开发多事的老兵来说,上手都有些吃力,可想而知对于新手来说就更难了,尤 ...

  5. 【D类】编程开发视频课程系列

    一.PHP课程集 1.1 PHP100 经典                                                    试看下载:http://pan.baidu.com/ ...

  6. 小飞鱼 通达OA二次开发网络课程 系列视频课程在CSDN发布

    小飞鱼通达OA二次开发网络课程  (上传完毕) http://edu.csdn.net/course/detail/4479 小飞鱼通达OA二次开发程序设计基础 http://edu.csdn.net ...

  7. 腾讯GAD的游戏开发入门课程

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012999985/article/details/79118198 进入游戏行业两年多了,处于一边 ...

  8. C++入门课程系列:基础知识篇(1)

    C++是一种静态数据类型语言. • 在C++语言中,变量是计算机编程的一个重要概念,它是一个存储值的字母或名称 • 有几种基本类型的变量: string ("一组词"). char ...

  9. 【转】WPF入门教程系列六——布局介绍与Canvas(一)

    从这篇文章开始,我们将对WPF中的界面如何布局做一个较简单的介绍,大家都知道:UI是做好一个软件很重要的因素,如果没有一个漂亮的UI,功能做的再好也无法吸引用户使用,而且没有漂亮的界面,那么普通用户会 ...

最新文章

  1. 初识CISCO_DHCP Server
  2. centos6.x安装mysql5.6及启动多实例
  3. Insertion Sort List
  4. OpenMap教程第2部分–使用MapHandler构建基本地图应用程序–第1部分
  5. python数据分析笔记中panda(2)
  6. YMP框架学习笔记(二)------基于YMP框架搭建WEB应用程序
  7. 关于数据权限的几个问题
  8. Android学习小Demo(11)一个显示行线的自定义EditText
  9. win7计算机用户配置文件存储路径,Win7用户配置文件夹位置怎么修改?
  10. Backend Qt5Agg is interactive backend. Turning interactive mode on.
  11. 计算机组成原理总概括(转)
  12. IEC104 规约详细解读(一) 协议结构
  13. Dialog确认按钮不dismiss
  14. 使用端到端深度学习模型完成PPI任务两篇论文笔记
  15. 苹果电脑上不错的几款计时软件
  16. 国内半导体企业进军市场拉开序幕
  17. MacM1 AndroidStudio 自带模拟器安装不上apk
  18. 程序员分析:99%的创业公司都不值得加入
  19. 一份Hive面试题及答案
  20. 理解 PHP 8 的 JIT

热门文章

  1. 关于mp3 tag的一些补充(关于tag的编码方式)
  2. 监控RecyclerView有效曝光数据
  3. Python开发工具PyCharm使用教程:如何调试python应用程序
  4. 腾讯音乐娱乐集团与索尼音乐续签长期版权合作协议
  5. 软件项目管理考点整理(Software Project Management)
  6. ubuntu 下开启背光键盘灯
  7. jQuery实现Ajax异步请求的三种方式
  8. 长城台式微型计算机开不了机,台式电脑开不了机怎么办?六个秒招教你排查电脑无法开机的故障所在...
  9. linux利用whereis,which查找文件
  10. whereis 查找不到软件安装位置解决办法