研发实战:将HoloLens应用从MRTK2迁移到MRTK3

HoloLens QQ群493967447

查看引用/信息源请点击:映维网Nweon

MRTK2到MRTK3的应用迁移

映维网Nweon 2022年07月28日)位于荷兰的Velicus是一家专注于提供高效MR培训解决方案的创新工作室。其中,团队的资深混合现实软件架构师约斯特·范斯海克(Joost van Schaik)自1985年以来就一直在开发尖端软件,在2015年底首次穿戴HoloLens之后,他开始投身于第三维度。他不仅是一位多产的混合现实技术博客作者,并且已经为微软应用商店带来了三个成功的HoloLens应用程序,同时帮助客户完成了多个HoloLens客户端项目。

对于HoloLens应用程序的开发,一个重要的工具是Mixed Reality Toolkit(MRTK)。这个开源项目提供了丰富的组件,而用于手和眼追踪、输入、解算器、诊断工具、场景管理等的组件可以帮助你用更少的时间来搭载更出色的混合现实体验。通过MRTK构建的体验可以兼容任何支持OpenXR运行时的设备,例如HoloLens和Meta Quest。目前,这个开发工具正以MRTK3 公共预览版的形式来帮助社区继续构建优秀的MR内容。

日前,范斯海克介绍了从MRTK2到MRTK3的应用迁移,尤其是MRTK 3的跨平台功能(例如同时支持HoloLens和Meta Quest):

2016年,我在微软应用商店发布了我第一个真正的HoloLens应用《HoloLens 1:AMS HoloATC》。自那起,这个应用一直是我在混合现实进行实验的试金石,因为它相对简单,但几乎涉及混合现实的所有方面。所以,当一个全新的平台/工具包/设备出现时,我都会首先运行这个应用,并进行相应的调整。WMR头显时是这样,MRTK 1是这样,然后MRTK 2同样是这样。

快进到今年年初,我受邀请体验MRTK 3的预览版本,但这一次与过去完全不同。我一开始沿用了通常的方式:拿出《AMS HoloATC》,将MRTK 2抽出来,然后再放到MRTK3。任何熟知编码的人士都知道这往往会产生一系列的问题。Visual Studio遇到了诸多错误,但这并不奇怪。

然而,这种方法的有趣之处在于:它可以清楚地告诉你什么地方出现了问题或发生了变化,但你想要实现的事情显然是有限的。你如何处理这里的空间映射?这里的交互是如何工作?如何使用新组件构建用户界面?在数天的时间里,我的应用再次成功运行。请注意,几乎没有文档帮助,我只是浏览了一下MRTK3的代码和它附带的几个示例。

然后,一个决定性的时刻到来了:微软在今年的混合现实开发者大会展示了一款有趣的应用:《Zappy’s Playground》。如果你没有玩过,这是一款非常简单的游戏,你只需给机器人提供足够的动力即可。你可以通过拾取、放置和定向小型风力发电机来实现这一点。这听起来可能有点奇怪,甚至有点蹩脚,但它的重点不是游戏本身,而是演示如何使用MRTK3实现各种典型技术、交互和其他“构建块”。

最有趣的是,这款应用能够同时支持HoloLens和Meta Quest 2。没有任何改动。要知道,HoloLens是基于Windows,而Quest是Android。我有一台Quest 2,当时是用来进行WebXR开发实验。在成功之后,它基本就在原地积灰。

为了弄清楚微软关于《Zappy’s Playground》跨平台玩法的说法是否属实。所以,我擦掉了Quest 2的灰尘,看看能够做到这一点。剧透警报:事实证明,整个操作中最具挑战性的环节是为Quest 2启用“开发者模式”。

一旦你知道应该做什么,过程实际上并不复杂,但这依然需要数个步骤。首先,你需要在手机端使用Oculus app将设备设置为开发者模式,这需要你创建一个“Organization”来将你的帐户与之关联,你的帐户需要验证,驱动程序需要安装……这是一个相当复杂的过程,有时会有点令人困惑,但最后,我成功将Quest 2设置成开发者模式。我已经从GitHub克隆了《Zappy’s Playground》代码,并在HoloLens运行。我需要在UWP工具旁边安装Android工具,然后我在Unity中打开应用程序,切换到Android build,点击“build and run”……基本就是这样。它能够成功在Quest运行,无需任何改动。

所以,当时的演示绝对没有造假,一切都是真的,就在我的眼前发生。然后,我决定把我的《AMS HoloATC》带到Quest。

我重复了上面的过程。切换到Android build,复制了《Zappy’s Playground》的所有Android设置,然后部署。耶!成功了。但它是以平面浮动窗口运行,而不是VR应用程序中。所以我仔细检查了我的设置,结果发现我忘了一个地方。

所以再来一遍之后,我看到我的应用程序能够以VR应用的形式出现,我可以看到我周围的机场,飞机。但我无法与它交互。我不能触摸飞机。

经过仔细研究,MRTK3开发者似乎为XR Interaction Toolkit的所谓“输入设置”创建了诸如额外设置,MRTK3就是建立在这个工具包之上。这是一个我仍然很熟悉的概念,但我可以确定涉及哪些文件。我同时将这些从《Zappy’s Playground》复制到了我的应用程序之中。我检查了一遍又一遍。一切都井然有序。然后我进行了第三遍操作。

一切顺利。这时,我可以用控制器射线选择飞机。在这段时间里,我学会了如何将Quest设置成开发者模式,如何为其部署应用程序,以及如何将MRTK3 HoloLens应用调整成Quest 2应用。整个过程只有配置,零行额外代码。这给我留下了深刻的印象。

我意识到,对于更复杂的应用程序,你可能需要更多特定于设备的代码。事实上,在第一次运行后不久,为了令内容看起来更大,我添加了特定于平台的代码行。Quest 2是一款虚拟现实设备,基本上是一个靠近眼睛的屏幕,而它的分辨率远不及HoloLens。如果你要展示10厘米(约4英寸)的飞机,它们看起来会非常糟糕,而且会是像素化的画面。我的经验法则是,与HoloLens相比,你在虚拟现实中最好将一切相对于放大3.5倍。所以,我可以简单地重用我为WMR头显编写的代码。因此,尽管我添加了特定于平台的代码,但它并不是任何新代码。

长话短说:要将你的应用程序从MRTK2转到MRTK3,你需要付出一定的努力,这取决于你构建应用程序的方式,特别是如果你主要用MRTK2中的按钮和面板来构建用户界面。然而,如果你使用了某种相当不错的架构,移植功能是完全可行的。毕竟,其中大部分是Unity和简单的C#。另外,MRTK2中的自定义代码要少得多,它们在很大程度是建立在标准Unity的基础之上。一旦用上了MRTK3,支持Quest的步骤就小得离谱。

我认为这非常好。但当然,它依然存在不完善的地方,毕竟MRTK3目前依然只是预览,但它已经比我第一次看到它时要好得多。

MRTK3的目标看起来像是为了实现OpenXR的承诺:一种用于构建跨平台应用的通用方式。对于希望开发商业,但其客户又无法承担大量HoloLens的开发者来说,这显然是一个好消息。它同时为未来支持更先进的设备铺平了道路,例如Meta Cambria。相信在不久的将来,混合现实的领域将比今天更加令人兴奋。

HoloLens QQ交流群493967447

您可能还喜欢...

专栏