Magic Leap One开发经验与教训:如何正确地进行网格划分
开发Create时的经验教训
(映维网 2019年10月16日)Magic Leap于一年多前正式发售Magic Leap One,并为其带来了Magic Leap Studios的旗舰应用程序Project Create。为了庆祝Create的一周年纪念,Magic Leap日前分享了开发过程中的经验教训。下面是映维网的具体整理:
Create是一款可在现实环境中进行的物理游戏。令人兴奋的一点是,你能够熟悉的空间中构建神奇的元素。允许火箭撞到天花板或霸王龙在沙发追逐圆球是我们希望探索的一种全新体验。空间映射(或者说“世界网格”)的质量对于游戏体验而言至关重要。
1. 前期的限制
早前的技术限制是缺乏实时网格划分。应用启动时设备将扫描用户的空间,而Create则会利用扫描的网格。由于我们的AI路径系统所致,在将任何虚拟对象放置到真实世界之前,我们需要一个高质量的网格。在解析数字内容时同样存在一定的设计问题,而它们在空间映射更新时可能会隐藏起来。最后,在开始之前,我们希望利用初始扫描网格满足最低质量要求。
2. 常见的网格划分系统误解
当一款Immersive应用发布时,其空间映射不是一片空白状态。相反,当应用程序请求空间映射时,它会从操作系统继承当前的世界表示。如果用户在不环顾四周的情况下启动头显并打开一款Immersive用程序,则空间映射将继承用户正前方的任何世界网格。在大多数情况下,这确实非常有效,并且这是你起步所需的一切,因为世界碰撞可以出现在用户所关心的空间中。
对于Create,初始网格带来了一个特殊的挑战,因为用户似乎以为房间映射的工作已经完成。我们尝试了各种不同的方式来告诉用户环顾四周,包括文字说明和特定位置指向。最终,我们采取了进一步的指导性体验,要求玩家只有在拥有足够的网格后才可以开始畅玩Create。
3. 引导性体验
对于Create的网格划分技术,其核心是围绕用户,并于随后邀请其查看的一组硬编码点。当用户进行查看时,深度传感器就有时间采集世界网格数据并建立空间映射。我们不需要特定的查看顺序,不需要最低质量,我们只需要用户朝目标方向望去。我们将这种硬编码位置称为“Waypoints”。
4. Waypoints
Waypoints是一组相对于中心点的硬编码偏移量。它们常常漂浮在离用户起点不远的地方。Create的Waypoints包括玩家站立位置朝外的每个基本方向各一个,天花板四个,地板一个。选择这种集合是因为我们需要一个天花板,墙壁和地板网格来包含和支撑我们创建的对象。仅需要地板的应用程序可以调整其Waypoints位置,这样系统就只会采集地板数据。
这样当Create开始的时候,系统将跳过用户已经看过的方向的Waypoints。
随着新人引导过程的运行,我们将Waypoints推到与轴对齐的边界框。边界框是通过结合头部姿态位置和Control位置,以及深度传感器摄像头的世界网格结果进行定义。在整个新人引导过程中,边界框用于在缺乏世界网格的情况下定义Waypoints的位置。如果世界网格比边界框更近,我们则将Waypoints拉入世界网格。每个Waypoints都定义为一个方向(上,前,右,左)。要从Waypoints方向导出世界网格位置,我们会对所述方向进行光线投射,直到其到达世界网格或边界框。
5. 十字线, 锁定,完成
我们通过提供一个数字十字标线来要求用户查看每一个点。十字线指向最接近用户正向姿态的缺失Waypoints。当玩家予以查看时,我们将其变为锁定状态并显示计时器。只要计时器保持在距用户视图中心最短距离的范围内,它就会一直运行。如果Waypoints后面没有任何网格,则计时器以较低速度运行。这样可以优化系统的扫描时间,并帮助我们为所述位置构建更优的空间映射。
计时器结束后,我们告诉用户他们已经完成并将Waypoints从活动列表中删除。然后,十字线指向下一个最接近的Waypoints。
6. 迭代
我们在开始时采取了一些错误的做法。在构建系统时,我们尝试生成引导用户仅查看世界网格中的缺孔的Waypoints。在大多数情况下,存在缺孔是因为系统永远无法解析它们。深度摄像头受镜子,窗户和深色表面所限制。我们无法予以解析,而要求用户看看它们是一次非常痛苦的经历。
我们同时尝试了这样一个版本:当我们无法在特定时间段内找到其背后的网格时,我们以信息告知用户哪个Waypoints失效。这导致用户无休止地追逐“缺失”的Waypoints,并对我们的系统和任务执行感到越来越沮丧。宣布成功证明是一种更好的体验。
我们短暂地尝试填充网格中的间隙,例如采用默认的地板或墙壁。事实证明,即使是最简单的房间,具体的情况都十分复杂。添加假地板会令我们的数字内容迷失在物理世界和估计世界之间。在这一领域存在很多进一步探索的机会,而我们非常期待其他人将如何解决这些问题。
最后,我们无法找到一种很好的方法来引导用户在网格构建过程中查看对象的背面。但我们同时知道我们想要启用一个就坐式和静止固定选项,并且可以想象你希望无需走动就能体验Create的众多场景。我们最后选择了妥协,并允许用户以就座姿态完成引导式网格划分。这行之有效,因为从坐姿开始,你永远都会不在乎对象的背面。但对于一个开始时坐着或站着,然后起身在房间里四处走动的用户,我们的网格中会有更多的空隙。然而,这是我们可以忍受的妥协。
7. 今天
我们在2018年发布了一系列的新手引导版本,根据测试和用户反馈不断调整。最大的改进之一是软化了每个需求。现在,引导式网格划分体验提供了如何进行空间映射的教程。它向用户显示了数据的原始视图,然后说明了他们应如何环顾四周以帮助系统理解周围的环境。
一旦用户理解了系统,他们就可以自行定向并进行网格划分,从而达到他们想要的体验。我们通过预先加载有关用户可以执行的操作指南来解释具体的步骤,然后为他们提供进行非引导式网格划分的选项。
我们希望这可以为你设计新人引导体验时提供一定的参考。并非每种体验的要求都与Create相同,但我们希望这可以提供一定的借鉴。