Unity展示ARKit 2插件的最新技术细节及示例

文章相关引用及参考:映维网

本文来自Jimmy Alamparambil

映维网 2018年06月22日苹果在WWDC上宣布了令AR开发者感到兴奋的消息,这其中就包括ARKit 2。Unity正在与苹果进行密切的合作,帮助开发者通过Unity ARKit Plugin的新版本访问所有的新功能。在这篇博文中,Unity的Jimmy Alamparambil介绍了ARKit 2新功能的技术细节,以及如何通过Unity ARKit Plugin访问它们。下面是映维网的具体整理:

1. ARWorldMap

ARWorldMap是ARKit 2一个非常有用的新功能,可支持AR体验的持续性和多人AR体验。

请参阅插件中的示例:Examples/ARKit2.0/UnityARWorldMap/UnityARWorldMap.unity

随着你移动并检测到更多的特征点,每次会话都将建立一个ARWorldMap。你可以从C#的会话中获取当前的ARWorldMap,并将其保存到Application.persistence DataPath上的某个位置。

你同时可以从保存的地方加载保存的ARWorldMap。这允许虚拟对象维持在相同的坐标空间中。

ARWorldMap可以序列化为一个字节数组,并通过WiFi,蓝牙或其他共享方式发送至另一台设备。它同时可以反序列化,并用于将其他设备重新定位到与第一个设备相同的世界映射,这样你就可以拥有一种共享的多人游戏体验。

无论通过加载,还是说从另一个设备接收,一旦拥有了ARWorldMap,设备就可以利用这个ARWorldMap共享坐标系,方法是将其设置为配置中的参数,并使用这个配置来重置ARSession。

这将重设会话,而随着你的移动,它将尝试匹配ARWorldMap中的特征点与其在环境中检测到的特征点。当彼此匹配时,它将重新定位你的设备坐标,从而匹配保存在ARWorldMap中的坐标。

下面这个视频提供了更为完整的示例。这个名为SharedSpheres的示例利用了Unity的Multiplayer Networking feature UNet来将ARWorldMap传输至另一台设备,从而同步它们的坐标系。

2. ARReferenceObject and ARObjectAnchor

与ARKit 1.5中用于图像识别的ARReferenceImage和ARImageAnchor类似,我们现在有了ARReferenceObject和ARObjectAnchor来进行对象识别。这是乐高在WWDC主题演讲中突出演示的功能,它们可以识别真实的玩具组,并通过叠加的虚拟玩具来增强体验。

3. UnityARObjectAnchor示例

如何在Unity中使用它:请参见插件中的Examples/ARKit2.0/UnityARObjectAnchor/UnityARObjectAnchor.unity场景。

这个示例假设你已经拥有了.arobject文件来描述希望识别的对象。你可以通过下面介绍的UnityObjectScanner示例,或者是苹果的ARKit Object Scanner应用程序来创建.arobject文件,这两者都可以生成相同格式的文件。

与ARReferenceImage非常相似,我们将设置一个ARReferenceObjectsSetAsset,它包含对ARReferenceObjectAssets的引用。接下来,我们将为ARSession的配置添加对ARReferenceObjectsSetAsset的引用,从而在会话中尝试检测集合中的ARReferenceObjects。

所有这一切都可以通过Unity Editor来完成。

每当识别出一个对象时,系统将创建一个ARObjectAnchor,而就像是其他锚定一样,你可以订阅一个告诉你什么时候添加,更新或删除了锚定的活动。

当活动触发时,你可以自行决定要执行的操作(比如在这个位置创建一个预制件)。

4. UnityObjectScanner示例

Examples/ARKit2.0/UnityARObjectScanner/UnityARObjectScanner.unity是一个更为完整的示例,它既可使用可选边界框来创建对象,也使用进行对象检测。

你可以保存使用该示例扫描的.arobjects,然后使用iTunes FileSharing将它们传输至Mac。当文件出现在Mac时,你就可以重命名它们,然后再放入Unity项目之中。

这个示例有不同的模式:扫描模式和检测模式。对于扫描模式,我们菜肴能够ARKitObjectScanningSessionConfiguration,这将能对场景进行更为详细的探索,但会使用更多的CPU和功率。

利用这个配置,对于你希望扫描的对象,你可以轻触其附近的平面以生成一个红色的边界框。你可以操作方框来覆盖目标对象。接下来,扫描方框的周围,尽可能多地获取对象上的特征点。然后通过轻触按钮来创建一个ARReferenceObject。创建的对象将保存到一个列表中。

按下Detect按钮将进入检测模式,而这个模式的工作原理与上面的对象锚定示例类似,但采用一种将arreferenceobject动态添加到被检测对象列表中的函数。

按下Save按钮,将至今扫描到的所有对象都保存至设备上的文件夹。这会把它们保存为.arobjects,并可以使用iTunes FileSharing将它们传输到Mac上。当文件出现在Mac后,你就可以重命名它们,然后再放到Unity项目中。

5. AREnvironmentProbeAnchor

AREnvironmentProbeAnchor是一种新的锚定,它可以自动生成,而你也可以指定在哪里创建它。这个锚定将根据ARKit视频帧和世界追踪数据来创建,并更新区域的反射环境映射。它同时采用了机器学习算法,对尚未看到的场景部分近似算出环境纹理。

如何在Unity中使用:请参见Examples/ARKit2.0/UnityAREnvironmentTexture文件夹中的示例。

会话配置中有一个新的参数来控制这个功能,而它将有以下三个值中的一个:UnityAREnvironmentTexturingNone、UnityAREnvironmentTexturingManual或UnityAREnvironmentTexturingAutomatic。

对于UnityAREnvironmentTexturingManual模式,你必须自行创建一个AREnvironmentProbeAnchor,但ARKit将更新从环境中捕获的纹理。

如果你使用的是UnityAREnvironmentTexturingAutomatic模式,ARKit将根据它从会话中输入的数据和你在空间中的运动,以空间间隔地生成AREnvironmentProbeAnchor。

这两个示例都生成一个包含Unity ReflectionProbe组件的预制件,并使用来自AREnvironmentProbeAnchor的环境纹理更新它。这个ReflectionProbe现在加入至标准的Unity渲染管道,并将增强使用它的任何GameObject。

6. 图像追踪

参考图像与ARKit 1.5中的工作原理相同,但现在ARKit不仅只是识别图像,它同时允许你追踪它们:当你移动参考图像时,与它们相关的ARImageAnchor将与图像一起移动,这样你就可以移动与这些移动图像锚定的内容。

会话配置中有一个额外的参数,它可以通过说明你希望在会话期间同时追踪多少图像来实现这一点。现有的示例已经进行了更新以支持使用这个新功能。

7.面部追踪优化

ARKit 2同时优化了iPhone X的人脸追踪功能。首先,有一个名为TongueOut的额外混合变形系数。取决于ARKit 2人脸追踪所能感知的舌头伸出程度,这将返回0.0到1.0之间的值。苹果在WWDC上展示了他们的Animojis,而这看起来很受观众的欢迎。

另一项改进是,它现在可以追踪眼睛注视点。你会接收到一个描述每只眼睛指向的变换,以及注视对象的位置。

关于如何利用来自面部锚定的新数据的示例,请参阅Examples/ARKit2.0/UnityTongueAndEyes/UnityTongueAndEyes.unity。

8. 开始创建更多优秀的AR应用吧

有关上述功能的更多技术细节,以及如何在Unity中使用它们,请参阅这篇文章。请从Bitbucket下载最新版本的插件,并尝试为iOS设备构建示例。如果你有任何问题,你可以在Unity论坛中自由提问。然后,利用Unity提供的工具来创建优秀的AR体验。但最重要的是,要享受其中的乐趣。

本文链接https://news.nweon.com/47130
转载须知:转载摘编需注明来源映维网并保留本文链接
素材版权:除额外说明,文章所用图片、视频均来自文章关联个人、企业实体等提供
QQ交流群苹果Vision  |  Meta Quest  |  微软HoloLens  |  AR/VR开发者  |  映维粉丝读者

更多阅读推荐......

资讯