摘要 AR,增强现实,这项技术离我们并不遥远。从AR游戏到AR红包,我们已经开始体验到这项技术的魅力,而AR在商业方面也已经开始崭露头角。这场演讲将从团队构成、迭代流程、设备、开发工具、技术、以及项目各环节的注意点和优化等方面,为您带来一场基于Unity平台打造AR商业应用的旅程。
头脑风暴
真实的情境
AR项目的头脑风暴一定要在真实情境中去做,因为AR应用是基于现实基于情境的。
只有在真实使用的情境中才能发掘信息,去进行需求收集、用户访谈、用户流程、创意产生等等的这一系列流程。
设备
根据场景需求,基于设备和设备所能提供的API选择设备。
我们的应用可以是2C,供消费者自己使用;可以是2B,在商业环境中给工作人员用;也可能是2B2C,需要工作人员指导消费者在商业场里景使用。
设备可以大致分为手机AR和头戴式AR两大类。
手机AR是用手机摄像头捕捉到真实世界的景象,并在上面叠加虚拟的物品呈现出的AR。
头戴式AR是一个穿戴设备。比如微软推出的HoloLens设备,他们和各行业企业合作推出了很多AR范例应用。
考虑设备能力
内容要由合适的设备来承载和展现。
渲染能力:设备是否具备我们需要的场景复杂度的需求;
续航时间:产品是短时间的应用还是长时间的应用,使用频率是怎样的;
网络能力:是否需要联网;
在室内还是室外;
场景的规模有多大……
这些都是我们需要考虑的方面,为优化做准备。
原型
纸盒原型
我们用一些纸盒、乐高或者是真实的物品代替,在真实的3D空间、实际场景中做实验,检测我们的原型设计是否可用有效,用户使用是否方便。
交互设计
设计师与程序员合作,使用几何模型(而不是高精度模型)进行开发实验。
这个阶段还要进行交互范式探索。
最后产出故事板,借助故事板来描述3D的情景。
设定优化目标
为场景和设备设定合适的优化目标和指标,要考虑的是帧率、内存消耗、耗电量和设备温度等等。
高保真设计
设计工具
高保真设计会用到一些设计工具,比如用3DS Max、Maya、Blender进行模型的制作和动画,Substance用来做材质纹理,等等。
制作适合设备的素材
素材中在场景中渲染出来后看不见的面,可以去掉,降低渲染的损耗。
控制点和面的数量,超过限制性能会降低很多。
拆分大的素材,没被看见的部分就不用渲染。
开发
Unity
我们的开发平台选用Unity 3D引擎。它的出身是一个游戏引擎,在当前AR、VR飞速发展的环境下,它已经一个通用的3D开发平台,可以适配到超过30个平台做构建,在AR、VR方面,Unity占的份额非常高。
设备API丨开源工具库
开发是基于设备API去做的,利用开源工具库丰富我们可以提供的其它功能。
用户输入输出
输入一般会用到注视和手势。在手机VR上的视角中心有一个点,这个点会跟随用户头部的移动而移动。从AR技术实现上,我们会在用户的视角中间打一个光束,和它交叉的点就是光标所在的位置。利用那个点去跟所选取到的虚拟物品进行交互,交互的方法就是用手势,如果是基于手机上的AR app,我们会用屏幕点击来进行。
输出方面物体的渲染交给Unity去做,构建虚拟场景,然后把虚拟的物品渲染出来。除了视觉上的物体渲染,还需要有听觉上的感受。空间声音就是很重要的一方面。空间声音就是声音具有空间感,使用户体验感受更加真实。
环境空间感知
这是AR区别于VR的地方,它会和真实世界结合起来,把虚拟世界变为现实世界。分为空间建模、空间分析理解以及图像和物体识别。
空间建模:如图可见,用户所在空间被扫描叠加了一层建模的样子,是通过设备传感器所做到的。建模可以被渲染出来,它的渲染和物理部分是分开的。图中渲染后用不同颜色表现出距离信息。建模包含了物理信息,它有一个碰撞机,能让虚拟物品叠加上去。
空间分析理解:建模后拿到模型,经过空间分析理解可以知道哪里是地面、哪里是墙、哪里是天花板。
图像和物体识别:图像和物体识别可以用第三方服务做到,比如Vuforia,开源的ARToolkit,等等。识别出来后再进行叠加处理。
AI:AI服务完全可以融入AR应用中,为AR增添色彩。例如微软、谷歌、IBM的服务,都可以通过接口的方式把数据传输给它们处理,再拿回来进行使用。这样AR的服务就可以做到语音识别和对话,UI不再是一个对话列表,而是可以真的有一个虚拟人在和用户进行交流。
共享协作:根据场景需求,与相同或不同设备协同合作。可以与其它设备做到同步的交互,也可以头戴设备与平板结合做演示,远程控制用户的体验。
代码管理与协作开发:Git是我们常用的。Github for Unity是直接放在Unity里的一个插件,进行图形化的管理。Unity也推出了服务Collaborate。
Unity和代码优化:首先要做Unity player settings和quality settings,不同设备需要不同的设置。根据应用内容设置摄像机的clipping plane,避免过多渲染。设置stabilization plane,添加spatial anchor,增加稳定性。放置物体在合适的位置,观看舒适度更高。把spatial mapping的精度降低到Low。写着色器,或者使用HoloToolKit之中的着色器。使用draw call batching和instancing,一次性渲染多个对象。使用纯GPU绘制大量的物体。
测试
Unity Test Runner
Unity Test Runner是Unity集成的工具。Edit mode用于做unit test,play mde可做integration test。要注意Undo或在新场景中测试。
Unity 中预览
可以在Unity中直接进行预览。在editor中有一些预设的空间模型可以预览,也可以远程连到你的设备。
监视数据
帧率一定要保证在60帧或者以上,如果低于60帧可能会产生抖动或者不稳定,用户会感到晕眩。
HoloLens上内存如果超过900兆会被直接关掉,也是我们需要关注的问题。
耗电量取决于应用的强度和帧率。
设备温度要关注的是环境处于室内还是室外,还有使用时间等因素都和温度有着密不可分的关系。这对用户的舒适度会有很大影响,尤其是头戴式AR设备,如果设备温度过高,用户体验会很差。
本地构建
部署到模拟器,再部署到设备上进行使用。
CI/CD
用Jenkins启动Unity命令行工具,可直接使用Unity的接口。可以用Unity的Unity Cloud Build服务,构建手机应用。
迭代循环
迭代循环的流程是头脑风暴-原型设计-高保真设计-开发-测试-部署,最重要的是优化。
我今天的演讲就到这里,谢谢大家。