Unite 2019:谷歌ARCore全新功能及开发技术深度解析
5月10日,Unity一年一度的开发者盛会Unite 2019正式开幕。在结合VR/AR等新兴技术的同时,不断更新迭代且具有高灵活、实时、可扩展以及丰富的互动性的Unity,已于无形之中打破了常规的工业设计并为不同的领域带来了与众不同的沉浸式体验。Unite 2019超过百场的技术分享也向各行业展示了一年以来Unity经历的蜕变。
在本次Unite大会上,谷歌由其美国本部AR部门的软件工程师杨橙分享了ARCore的全新功能以及开发技术的深度解析。
ARCore全新功能
AR主要功能就是运动跟踪、环境理解和光估测,此外杨橙还分享了一些ARCore具有的新的特有功能。
1.运动跟踪,利用摄像头图像中的视觉差异,利用平行测距与映射的算法,结合涉及当中的惯性传感器,把这两个传感器结果结合在一起,就可以计算出手机的POSE,这样可以渲染出准确的AR效果。
POSE就是位置和旋转,它基于某一个坐标空间的姿态,ARCore提供所有的POSE都是基于视觉坐标,每一帧都根据环境的变化不停计算。
2.光估测,检测其环境光线的相关信息,提供给定摄像头图像的平均光强度和色彩校正。
3.环境理解,对物理环境的理解,找到平面,不管是水平的还是垂直的,我们会把这些平面估测出来,大小、位置、旋转是非常重要的概念。
4.锚点,ARCore会根据环境变化不停更新,如果这个点非常重要,那么用户就可以放一个锚点,确保虚拟的物体不会因为自身位置修正而发生偏移。
5.可跟踪对象,ARCore会跟着时间的推移来追踪一类物体。
6.云锚点。用户可以把锚点和特征点传到云上,ARCore则利用利用Cloud API,实现两个不同办公室的AR工程实现同步。通过镜头看到的景象和托管的进行对比,两个结合在一起的时候,可以实现非常丰富的AR游戏(但在国内目前不太好用)。
此外杨橙还提到,在最新版本的ARCore中,增加了30%准确度和15%的检测召回率,可以准确追踪多个图像,最重要的一点是可以追踪移动的图像。
在Unity使用增强图像
首先要把所有想要识别的图像,加载到一个数据库里面,然后设置ARCore,直接运行ARCore。加载图像有两种方式:
1.运行之前把所有的图片加载进去,或实时在线加载。
2.新开一个线程,避免无法响应。ARCore对于Playfab有了很多优化,可以直接用菜单选择加载想用的图片。
只要设置好ARCore,直接开始运行,ARCore会自动检测并提供一个可靠的POSE。当找到了POSE,用户可以在POSE添加很多你自己的虚拟层。
杨橙哈提供了一些帮助用户快速识别图像的建议:“我们建议你使用质量分数高于75的,会直接先为你的图像进行评分,避免大量的压缩,比如说图像本来是非常大的图像,放在ARCore上变得很小,这也是不便于training的,最小要求是300×300的分辨率。”
“UX建议,当你需要用户寻找的时候,我们建议你用动态UI框,检测到的哪一个瞬间,我们希望图像占有整个相机视野的25%。”
增强面部API
这个API提供三个要素,首先是中心position,第二个是区域position,用户可以在上面分别加载一些3D模型,第三个是如果需要全脸的匹配,用户可以拿到468点的3D面部网格。一般是两种不同的效果,第一种是可以加载局部的耳朵和鼻子,其实是针对面部某个区域的轮廓,还有一种是全脸网格效果。
杨橙详细解释了它的效果和用法:“首先在你的app层需要你提供这样一些素材,然后交给ARCore做的事情,就是ARCore提取相机的图像,告诉你每个区域的position在什么地方,然后Unity或者说其他的渲染引擎里面可以结合起来。”
“如果说是2D效果,我们会需要你提供面部贴图,面部网格分布是这样的,如果是眼睛和嘴巴的区域点会分布的更加密集一些,这样会和面部肌肉结合,会得到更多的细节。每个点我们提供XYZ,让你来渲染位置,以及渲染材质,做一些真实的光照效果。”
ARCore的面部增强功能利用了用了谷歌AI,使用大量的数据集来训练,推测面部轮廓和面部网格的神经网络,再将神经网络模型加载到手机上,这样用户可以直接离线,使手机生成脸部的推测。
它还使用了深度学习的机器学习方式,用合成的3D网格数据,以及真实注册好的2D轮廓数据,把这些数据集同时给神经网络去训练,利用这个神经网络推测当前面部的2D轮廓和3D网格,最后得出来的结果是合成的数据和真实数据的采集,而且是不带任何偏见的真实数据。
尚未登场的功能:HRD光照
ARCore提供的API,给用户平行光光源和强度。然后再模拟环境光,这也是当前非常流行的模拟全局光照的做法,之后提供一个合理的16bit立体方贴图。
在Unity里面使用非常简单,只要在模板上设置即可。