创建适用于 HoloLens 2 的 Galaxy Explorer

New Galaxy Explorer logo

欢迎使用适用于 HoloLens 2 应用程序的更新后的 Galaxy Explorer! Galaxy Explorer 最初是通过“分享想法”计划为 HoloLens(第一代)开发的开源应用程序,是许多人最早的混合现实体验之一。 现在,我们正在针对 HoloLens 2 令人兴奋的新功能对其进行更新。

作为 Microsoft 混合现实工作室之一,我们通常开发商业级解决方案,并在整个创新和开发过程中在目标平台上进行开发与测试。 我们将使用框架和工具(如 MRTK)开始此项目,因为它们可供我们和社区使用 - 我们想要教你如何使用它。

就像最初的 Galaxy Explorer 一样,我们的团队在 GitHub 上通过开放源代码创建项目,以确保社区拥有完整的访问权限。 我们还将在此处以完全透明的方式记录关于如何从 MRTK v1 移植到了 MRTK v2、通过 HoloLens 2 中提供的新功能增强了体验,以及确保了 Galaxy Explorer 仍可在多平台上使用的旅程。 无论是在 HoloLens(第一代)、HoloLens 2、Windows 混合现实头戴显示设备还是 Windows 10 桌面上查看 Galaxy Explorer,我们都要确保你和我们一样享受这段旅程!

此页面将随项目进展而不断扩展,并提供了指向更详细的文章、代码、设计项目和其他 MRTK 文档的链接,以便你能够深入了解该项目。

在 HoloLens 2 中从 Microsoft Store 下载应用

如果你拥有 HoloLens 2 设备,可以直接在该设备中下载并安装该应用。

English badge

考虑交互功能

作为一家有创意的工作室,我们为有幸将 Galaxy Explorer 移植到 HoloLens 2 而感到欣喜。 我们从一开始就知道,我们希望该体验成为新设备的全新体验,并证明混合现实支持仅受到想象力的限制。

HoloLens 2 允许用户以感觉自然的方式触摸、抓取和移动全息影像 - 它们的反应就像真实物体一样。 完全铰接的手部模型令人惊叹,因为它可以让用户做自然的动作。 例如,每个人拿起一个杯子的方式都略有不同 - HoloLens 2 并没有强制执行一种特定的方法,而是让你按照自己的方式去做。

这是第一代 HoloLens 设备上基于隔空敲击的界面的重大变化。 用户现在可以实现“近距离和个性化”交互,而不是与全息影像进行远距离交互。 当将现有体验移植到 HoloLens 2 或规划新体验时,务必要让自己熟悉全息影像的直接操纵。

直接操纵与遥远的太空距离

伸手抓住一个行星并将其握在手中是一种神奇的体验。 这种方法的挑战在于太阳系的大小 - 太阳系是十分巨大的! 用户需要在他们的房间里四处走动,以接近每个星球,才能与之互动。

为了让用户与距离更远的物体进行交互,MRTK 提供了从用户手掌中心发出的手部射线,该射线作为手的延伸。 一个圆环形光标连接到射线的末端,以指示射线与目标物体相交的位置。 然后光标所指向的对象可以接收来自手的手势命令。

在最初版本的 Galaxy Explorer 中,用户将使用凝视光标瞄准一颗行星,然后隔空敲击以使其距离更近。 将体验移植到 HoloLens 2 的最简单方法是采取这种行为,并使用手部射线来选择行星。 虽然这很实用,但它让我们想要实现更多功能。

从头开始

我们聚在一起思考可以在现有交互之上构建哪些功能。 思路是:尽管 HoloLens 2 允许用户以一种自然、逼真的方式与全息影像进行交互,但根据定义,全息影像并不是真实的。 只要交互对用户来说是合理的,那么该交互是否可与真实物体进行交互并不重要 - 我们可以使其成为可能。

我们探索的一个概念基于心灵遥感,也就是用意念操纵物体的能力。 在超级英雄电影中经常出现,一个人伸出自己的手,用意念把一个物体召唤到张开的手中。 我们对这个想法进行了更多尝试,并快速勾勒出该概念如何运作的草图。

Concept for the force grab interaction

用户将手部射线指向一个行星,这将提供目标反馈。 当用户伸出他们张开的手时,行星会被一种神奇的力量拉向用户,直到距离近到足以让用户抓取它。 因此,我们将该交互称为:力抓取。 当用户张开手将行星推开时,它会再次返回其轨道。

力抓取原型制作

然后,我们创建了多个原型来测试此概念:整体交互感觉如何? 被召唤的物体应该停在用户面前还是粘在他们的手上直到放置? 被召唤的物体在被召唤时是否应该改变尺寸或比例?

在应用中实现力抓取

当我们尝试对行星进行力抓取时,发现必须改变太阳系的规模。 事实证明,用户很难通过精确、中等大小的表示形式来理解和导航太阳系,他们不知道去哪里寻找。 然而,小尺寸的表示形式使得一些行星太小,不容易进行选择。 因此,行星的大小和太阳系物体之间的间距被设计成在中等大小的空间内会比较舒适,同时保持相对精度。

在开发冲刺的后期阶段,幸运的是内部有 MSFT 混合现实专家同行,因此我们开始以专家测试人员的身份获取他们的意见,并对力抓取交互进行快速迭代。

Jenny Kam testing a preview build of Galaxy Explorer

图中:高级设计主管 Jenny Kam 正在测试预览版 Galaxy Explorer。

添加定位功能的启示

当我们在 HoloLens 2 上进行实验时,我们发现即使新的交互功能是自然且直观的,但全息影像仍保持不变:没有重量或触觉。 由于全息影像并不能提供人类在与物体交互时通常接收到的自然反馈,因此我们需要创建它们。

鉴于用户在交互的各个阶段会获得的视觉和音频反馈,并且由于力抓取机制是与 Galaxy Explorer 交互的核心,我们对此进行了多次迭代。 目的是为交互的每个阶段找到音频和视觉反馈的适当平衡:专注于目标对象,将其召唤给用户,然后释放它。 我们所了解到的是,与常用的 HoloLens(第一代)相比,需要更多的音频和视觉反馈来加强交互。

Visual affordances on planets

添加力抓取的启示

  我们有了具有音频和视觉启示的基本力抓取机制后,将研究如何使选择行星对用户更加友好。 有两个主要问题需要解决:由于太阳系是一个 3D 移动界面,因此用户学习如何一致地瞄准物体会更加复杂。 由于手部射线在选择物体时速度很快,使行星迅速向用户移动,这使得情况变得更加复杂。

我们采用一个三管齐下的解决方案来解决此问题。 第一个部分相当直观:放慢选择过程,让行星以更自然的速度接近用户。 调整速度后,我们必须重新审视音频和视觉启示,并在行星朝用户移动时添加音频反馈。

解决方案的第二部分是使整个力抓取交互的可视化效果变得更加直观。 假设有一条粗的线条,当手部射线与目标物体连接后,它就会向目标物体移动,然后将该物体带到用户跟前,就像套索一样。

Visual

最后,我们优化了太阳系的规模,使行星大到可让用户的视线和手部射线瞄准它们。

这三项改进使用户能够做出准确的选择,并以一种直观的方式召唤行星。 总之,最终力抓取的效果在太阳系中是一种更具交互性的沉浸式体验。

聚焦木星

创造银河系的太阳天体是一种震撼人心的体验。 特别是,木星的独特特征使它成为一个值得一看的景象。 它是气态巨行星中最大、色彩最丰富的行星,其质量比所有其他行星的总和还要多。 其巨大的规模和令人着迷的湍流和云流动性具有独特的艺术魅力。

几何图形和网格

作为一个气态巨行星,木星的外壳由气态层组成。 其快速旋转、内部热交换和科里奥利力相结合,形成了五彩斑斓的层和流,形成了旋转的云带和漩涡。 捕捉这种错综复杂的美丽是创造我们太阳系的关键。

显然,使用具有预计算流的流体模拟和动画纹理等可视化技术是不可能实现的。 将其与同时发生的所有其他事情结合起来进行模拟所需的计算能力会对性能产生重大的不利影响。

Overview of Jupiter object

另一种方法是“烟与镜”解决方案,该解决方案由叠加的透明纹理层组成,其中每个层都涉及大气运动的一个特定方面,在旋转网格的构成上进行编译。

在下图中,可以在左侧看到内壳。 该垫层为构图提供了背景,以防止构成云的多个层之间出现任何小间隙。 由于该层旋转速度较慢,它还充当了快速移动的云带之间的视觉缓冲区,以帮助在整个图层中形成视觉统一。

将此定位点设置到模型后,移动的云层随后被投影到下面所示的中间和右边的网格上。

Overview of Jupiter object with separated shells

纹理

现有的纹理被分成一个由三部分组成的纹理图集:上三分之一包含一层静止的间隙云,以提供视差效果,中间部分包含快速移动的外部流,下三分之一包含一个缓慢旋转的内底层。

特有的大红斑也被分成了不同的移动部分,然后插入到纹理的一个原本不可见的区域中。 这些组成部分可以看作是下图中间部分的红色斑点。

因为每个云带都有特定的方向和速度,所以纹理单独应用于每个网格。 网格有一个共同的中心和枢轴点,这使得可以同心地对整个表面进行动画处理。

Overview of Jupiter textures

自转和纹理特性

确定了木星的视觉构图,我们就需要确保正确计算并相应地应用自转和轨道速度。 木星完成一次完整的自转大约需要 9 个小时。 由于其较差自转,因此这是一个定义的问题。 因此,赤道流已被设置为“主流”,需要 3600 帧实现完整的自转。 其他每一层都需要将自转速度作为 3600 的系数才能匹配其初始位置,例如允许 600、900、1200、1800 等。

Jupiter shell textures

大红斑

单独旋转的流提供了良好的视觉效果,但在近距离观察时缺乏细节。

最引人注目的部分是木星的大红斑,因此我们专门创建了一组网格和纹理来展示它。   我们使用了与木星云带类似的机制:一组旋转组成部分相互叠加,同时也被分组在其“主层”下,以确保无论其余组成部分移动得多快,它们都能保持原位。

当网格设置好并就位后,将应用风暴漩涡的不同层,然后单独对每个圆盘进行动画处理,中心部分移动速度最快,其余部分在向外移动时速度逐渐减慢。

Jupiter Great Red Spot mesh

该构图还具有与所有其他网格相同的枢轴,同时还保持其与原始 y 轴 (!) 的倾斜度,以允许随意对自传进行动画处理。 3600 帧是基本速率,每一层都有一个相应的系数作为自转周期。

Jupiter Great Red Spot texture

在 Unity 中正确使用此功能

在 Unity 中实现此功能时,需要记住以下几项要点。

Unity 在处理大量透明层时很容易产生混淆。 解决方案是为每个网格复制纹理材质,并将递增的渲染队列值从内部到外部以 5 递增的方式应用于每个材质。

结果是内壳的渲染队列值为 3000(默认值),静态红色外层的值为 3005,快速旋转的白色外层云的值为 3010。 大红斑(从内层到外层),在此模型中以 3025 的值结束。

Jupiter final object

最后的处理

带纹理的木星层是首先建立起来的,但事实证明这不足以实现。

原始的 Planet Standard 着色器及其所有变体通过 MRTK Standard 着色器不支持的脚本 SunLightReceiver 接收光照信息。

仅交换着色器不是一种解决方案,因为 Planet Standard 着色器不支持透明的纹理贴图。 我们编辑了该着色器,以使木星构建按预期方式工作。

最后,需要通过将源混合设置为 10 并将目标混合设置为 5 来设置 Alpha 混合。

Jupiter Unity properties

可以在 Galaxy Explorer 中查看木星的最终渲染图!

认识团队

我们的混合现实工作室团队由设计师、3D 艺术家、UX 专家、开发人员、项目经理和工作室负责人组成。 我们来自世界各地:比利时、加拿大、德国、以色列、日本、英国和美国。 我们是一个来自不同背景的多学科团队:游戏(传统和独立)、数字营销、医疗保健和科学。

我们很高兴能创建适用于 HoloLens 2 的 Galaxy Explorer,并更新 HoloLens(第一代)、VR 和桌面版本。

The Galaxy Explorer team

从左到右:依次为 Artemis Tsouflidou(开发人员)、Angie Teickner(视觉设计师)、David Janer(UX 设计师)、Laura Garrett(交付与生产主管)、Yasushi Zonno(创意指导)、Eline Ledent(开发人员)和 Ben Turner(高级开发人员)。 从左到右:依次为 Amit Rojtblat(技术美术师)、Martin Wettig(3D 艺术家)和 Dirk Songuer(工作室负责人)。 未在图中出现的团队成员:Tim Gerken(技术主管)和 Oscar Salandin(视觉设计师)。

其他信息

混合现实工作室

Microsoft 混合现实工作室团队(位于美洲、欧洲和亚太地区)是用户体验设计、全息计算、AR/VR 技术和 3D 开发方面(包括 3D 资产创建、DirectX、Unity 和 Unreal)的专家。 我们帮助构想所需的未来、设计、构建和交付解决方案,同时使客户能够在整个组织中产生可衡量的影响。 工作室与超过 22,000 名 Microsoft 服务专业人员密切合作,以实现企业应用程序集成、采用、运营和支持。