研发实战:用Unity MARS快速迭代情景可适应的AR体验
减少AR应用程序开发的测试时间
(映维网 2020年08月17日)Unity MARS的Simulation(模拟)系统减少了AR应用程序开发的测试时间,因为它能够直接通过Unity Editor的Play Mode和Edit Mode提供诸如平面和图像标记检测等世界理解能力。
在这篇博文中,Unity的Amy DiGiovanni将向我们介绍Simulation系统,以及开发者可以如何利用这个工具来快速迭代情景可适应的AR体验。下面是映维网的具体整理:
你可以通过Unity MARS轻松创建能够智能地适应现实世界的复杂AR体验。我们设计这个创作工具是为了解决最常见的三个AR开发者痛点:为巨大的潜在数据空间进行创作;针对真实场景进行迭代和测试;以及提供能够响应环境的应用程序。
通过在Unity Editor中启用预览AR设备如何应对物理环境的测试,Simulation能够解决迭代时间问题。Simulation有助于针对模拟真实世界或直接是真实世界的各种环境进行测试。这能够帮助你更容易创建自适应和可访问的应用和体验。结合Unity MARS的代理和条件匹配系统,Simulation有助于创作者推动空间计算的发展。
作为一个系统,Simulation可以分解成两个概念不同,但可以彼此合作的核心功能,从而大大减少迭代时间:
- 在Edit Mode下单独预览场景的执行。
- 在Editor中设置一个环境场景,并基于所述环境提供AR数据。
下面我们将详细介绍它们是如何提升AR开发过程。
1. 执行预览
Simulation允许你在Edit Mode中预览场景的执行,并提供对表示真实世界对象的灵活代理在真实世界中的行为的即时理解。在执行预览过程中,Simulation将活动场景中的游戏对象复制到一个称为“Content Scene/内容场景”的预览场景中,并在Content Scene中的每个Monobhavior设置runInEditMode flag。关于如何编写与Simulation场景预览兼容的MonoBehaviours,请参见这个Unity MARS文档。
利用Simulation视图,你可以单独地与这个场景执行预览进行交互。Simulation视图是一个自定义的场景视图,它从第三者角度或从camera视角显示在环境场景渲染的内容场景。
在Unity MARS中,Simulation预览的默认行为是以Instant Mode运行。在这种模式下,整个执行过程发生在单个帧上,其中Unity MARS会尝试同时根据所有数据匹配代理。尽管这种行为并不现实,但在定义代理及其条件时可以提供即时反馈。
你同时可以手动启动和停止Continuous Mode预览。这个模式比较类似于Play Mode,即内容场景中的行为逐帧运行,直到预览停止。应用程序在Continuous Mode中的交互和行为有限,因为诸如物理和输入等Unity系统只支持Play Mode。Continuous Mode预览有助于查看应用程序如何响应随时间变化的数据,并同时快速修改场景。
Simulation系统跟踪内容场景相对于活动场景的状态,并在你进行更改时保持最新状态。如果对副本在内容场景中运行的对象进行任何属性修改,Simulation将接收所述更改并指示它不同步。这意味着在重新同步之前,最新的更改不会应用于预览。在重新同步过程中,Simulation会销毁内容对象,并用活动场景中的新副本替换它们,然后开始运行新副本。
Simulation有一个自动重新同步预览的选项,所以你可以在代理上进行迭代,并立即在模Simulation图中看到更改。结合Unity MARS的视觉创作功能,这一功能尤其强大,因为它不仅适用于标准场景视图,同时适用于Simulation视图。你可以在环境的情景中更改代理条件,并立即看到调整条件参数如何更改结果。对于复制成本高昂的大型复杂场景,建议你禁用自动同步选项,并在必要时手动重新同步。
2. Simulation如何提供AR数据
环境构造是Simulation的基础。环境是一组独立于在Simulation中运行的应用内容的对象。实际上,环境是一个具有独立物理和照明的场景。这种分离的存在使得Editor中的测试可以尽可能地接近AR设备测试,因为环境可以在Editor中充当真实世界。
数据提供器是环境和内容之间的关键环节。与其他类型的AR数据提供器一样,Simulation提供器与应用程序内容一起存在,但它们可以访问环境中的信息。为了支持执行预览,提供器必须同时兼容Play Mode和Edit Mode。Simulation提供器可以通过多种方式来使用环境信息并提供数据,但数据源主要有三类:合成、录制和实时。
2.1 合成数据
合成数据是人为创建的,而不是根据真实世界事件生成的数据。这种数据来自于在环境场景中实例化的预置。Unity MARS提供了一组默认的环境预设,包括房间、建筑和室外空间。你同时可以创建自己的模拟环境。
我们已经在运动追踪、地理定位、平面定位、点云检测、图像标记检测和光照估计等方面推出了具有合成AR功能的Simulation。大多数数据都是由环境预置中的合成对象即时提供。
Simulation同时可以通过模拟数据发现过程来为运动追踪、点云检测和平面查找创建数据。这个发现过程会根据环境预置的内容(模拟的“真实世界”)和主camera(模拟的“设备”)的状态来动态提供数据。为了在移动设备模拟数据发现,我们只在camera移动时检测数据,并且只使用camera视锥内的部分环境来增加我们对世界的模拟理解。
2.2 录制数据
Simulation可以通过播放AR会话的记录来提供数据。所述记录可以使用即将发布的Unity MARS app或使用Simulation本身进行创建。Unity MARS同时提供人脸追踪数据的样本记录。
录制的会话数据存储在Timeline asset中,其中每种类型的数据都有一个track。环境中的Playable Director播放会话录制Timeline,而应用程序内容中的提供器对象绑定到数据track,以便它们能够提供实际数据。有关会话记录对象的更多信息,请参见这个Unity MARS文档。
因为会话记录是用Timeline表示,所以你可以像处理其他Timeline一样使用它们。例如,你可以修改循环行为或调整数据track的内容。
对于Edit Mode,你可以在Timeline窗口中清除录制内容。但需要注意的是,代理系统和其他Unity MARS行为不能及时向后运行,所以Simulation系统会将时间清除视为需要重新同步执行预览的更改。当执行重新启动时,录制将重新开始,而且为了赶上新的时间,执行将以更快的时间尺度运行。有关如何编写与时间重新同步兼容的行为,请参阅这个Unity MARS文档。
2.3 实时数据
这种数据来自实时的、真实的事件。Simulation能够通过网络摄像头设备提供实时摄像头图像。本例中的环境包括视频播放器对象和camera image quad,而应用程序内容中的数据提供器会提供原始纹理。注意,从所述纹理获取人脸追踪数据需要第三方许可。
3. 抽象层
Unity MARS可以使用AR Foundation、Simulation或自定义提供器提供的数据。所有这些数据都经过一个抽象层,其中所述抽象层包括代理匹配系统使用的Unity MARS数据库,以及一个用于一般AR功能的层。这样,应用内容和使用相关数据的系统就不需要知道数据来自于哪个设备,或者数据是否来自于Simulation。
我们知道Simulation对AR开发而言是一个强大的通用工具。我们很高兴宣布,在今年晚些时候,Unity MARS用户无需代理系统即可使用Simulation系统。通过将Simulation作为自己的XR子系统,你将能够利用中Edit Mode预览的优势和Editor中的AR功能,从而为你的XR项目增加灵活性和模拟支持。当然,所有的Unity Mars功能(包括Simulation)将一如既往地支持AR Foundation。