轻松制作智能化AR体验,Unity MARS Simulation系统原理介绍
Unity MARS的Simulation系统具备编辑器内(播放与编辑模式)的环境感知功能,可识别如平面和图像标记等内容,极大地减少增强现实(AR)应用开发时的测试时间。本文将介绍Simulation模拟系统及其使用方法,帮助创作者们加快环境适应性AR体验的开发迭代。
Unity MARS 是Unity发布的业内首款智能化MR及AR内容创作工具,各行各业的创作者都能基于MARS无缝创作AR体验(点击回看)。该工具在设计时主要针对了三个AR开发者最常遇到的难题:空间数据具有极大的不确定性;针对现实进行迭代、测试的难度较大;应用难以有效适应周遭环境。
Simulation系统可以在Unity编辑器内测试AR体验,预览AR设备与周遭环境的互动,从而减少迭代时间。该系统还可以在拟真或扫描得到的环境中进行测试,帮助开发者高效开发具有适应性与广泛性的AR应用与体验。Simulation与MARS的代理系统、条件匹配系统组合使用时,可以帮助创作者们进一步推进空间计算的边界。
Simulation系统主要有以下两个核心功能,两者虽然概念上有所分离,但是一同使用时就可以大幅减少迭代时间:
在编辑模式下单独预览场景的运行。
在编辑器中建立环境场景,根据环境生成AR数据。
本文,我们将深入介绍Simulation系统是如何改善AR开发体验的。
应用运行预览的原理
Simulation可以在编辑模式中预览场景的执行,加快迭代速度,即时显示出物体在现实中的行为。在运行预览过程中,Simulation会将活跃场景的游戏对象复制到一个预览场景(称作内容场景)中,并且在每个运行的MonoBehaviour上设置runInEditMode标签。请参阅Unity MARS说明文档来详细了解如何编写与Simulation场景预览功能兼容的MonoBehaviour。
在Simulation视图中,用户可以跳出Unity场景,单独与预览场景互动。Simulation视图是一个单独的自定义场景,其中展示了渲染于环境场景之上的内容场景(关于环境场景将在下一节讨论),视角为第三人称或摄像机视角。
在Unity MARS中,Simulaiton预览的默认行为都为即时模式(Instant Mode),即整个运行都在单帧上发生,而MARS会尝试一次性将所有代理匹配起来。虽然该行为并不贴近现实,但它能在代理和运行条件加入后即时地提供反馈。
用户也可以手动启用/停用Simulation预览的连续模式(Continuous Mode)。连续模式类似于播放模式,内容场景中的行为会逐帧运行,直到预览停止。由于物理和输入等部分Unity系统只能在播放模式中运行,连续模式下应用的互动与行为将有不少限制。连续模式预览可以查看应用如何随数据变化而变化,也允许用户快速修改场景。
Simulation系统将跟踪内容场景相对于活跃场景的状态,在有场景修改时同步数据。如果某个对象的属性有了改动,Simulation会指出改动并提示对象失去同步,表明改动需要重新同步后才能应用到预览中。在重新同步时,系统会用新的复制来取代该对象后再运行。
Simulation有一个自动同步预览的功能,代理一经修改就能在视图中立即反映出来。而Unity MARS的可视化制作功能不仅能在标准场景视图中使用,也能在Simulation视图中使用。两者结合使用时,用户一旦更改代理在环境中的条件,就能立即看到调整后的成果。然而对于难以复制的大型复杂场景来说,我们建议禁用自动同步选项,在必要时手动完成重新同步。
Simulation生成的AR数据
环境构造是Simulation的基础。环境指的是区别于应用内容的对象。从实际效果上来说,环境是一个单独的场景,在Simulation视图和播放模式的Game视图中计算独立的物理和光照,渲染发生在内容的底层。为了让编辑器中的测试能尽可能贴近实际AR设备测试,编辑器中的环境将充当现实世界。
数据传输器则是环境和内容间的数据连接。类似于其它AR数据传输器,Simulation的传输器与应用内容并行存在,并且能访问环境中的信息。传输器同时兼容播放模式、编辑模式与运行预览功能,具备多种数据生成方式,而数据源主要为合成、记录和实时三种数据。
01 合成数据
合成数据是人工生成的数据,源自一种于环境场景中实例化的预制件,并非现实数据。Unity MARS默认带有一套房间、建筑和户外空间等环境的预制件,而用户也可自行搭建模拟环境。
Simulation在发布时就已带有处理合成AR数据的能力,包括动作捕捉、地理定位、平面搜寻、点云检测、图片标识检测和光照估量等,未来还会有更多功能加入。大部分功能可即时捕捉环境预制件中合成对象生成的数据。
Simulation系统也能模拟数据探测流程,为动作捕捉、点云检测和平面搜寻创造出数据。模拟的数据探测可以根据环境预制件(模拟出的“真实世界”)和主摄像机在内容场景(模拟出的“设备”)中的状态,来动态地生成数据。为了模仿移动设备上的数据探测,我们仅在摄像机移动时检测数据,并且仅检测位于镜头内的环境,来提高模拟的精确度。同时移动设备上的平面经常会结合成“一块”,我们也创建了类似的平面,但平面的朝向只能局限于上、下、左、右、前方和后方。
02 记录数据
Simulation还能通过回放AR的运行记录来捕捉数据。记录可使用即将上线的Unity MARS智能助手APP(点击回看)或Simulation系统录制。MARS本身也提供有面部捕捉数据的示例记录。
运行记录数据将储存在Timeline资源内,每种数据类型都有各自的轨道。记录经由环境场景中的Playable Director播放,而应用内容中的模拟对象会与数据轨道绑定,以生成实际的数据。若想详细了解运行记录的使用,请参阅Unity MARS说明文档。
在Timeline上的运行记录使用方法与普通时间轴相同,用户可以修改循环行为、微调轨道上的数据内容。
在编辑模式下,用户可在Timeline窗口中拖动记录的播放头。需要注意的是代理系统和MARS的其它行为并不能逆时间轴播放,Simulation系统会将播放头的拖动视作一次更改,会要求重新同步运行预览。在运行重启时,记录也会重新开始,运行速率会加快,以跟上新的时间轴。想要详细了解如何编写支持时间轴再同步的行为,请参阅Unity MARS说明文档。
03 实时数据
此类数据源自实时的现实事件。Simulation在发布时自带用网络摄像头捕捉实时图像的功能。此处的环境便为视频播放器对象和摄像机四方图像,应用内容中的数据传输器可传输原始的图像纹理。要想从纹理中获取面部捕捉数据,需要有第三方应用的许可。
Unity MARS与AR开发的多层次处理
Unity MARS的数据可以源自AR Foundation、Simulation或自定义的数据生成器。
所有数据须经过抽象层(包括代理匹配系统使用的Unity MARS数据库),及泛用AR功能层处理,因此应用和系统可以无视数据的来源设备或软件直接使用数据。
Simulation是一个强大的AR开发泛用工具。在今年晚些时候,Unity MARS的Simulation系统将不再依赖代理系统。Simulation将成为一个单独的XR子系统,创作者将能自由使用编辑器的预览和AR功能,在任何类型的XR项目中增加开发灵活性、增添模拟功能。当然,包括Simulation在内的所有Unity MARS功都将兼容AR Foundation。
来源:Unity