MRTK是一款面向WMR、HoloLens开发的MR开源工具


Qualcomm & Pico XR创新应用大赛获奖作品

文章相关引用及参考:映维网

本文来自于设计师Dong Yoon Park

映维网 2018年05月17日)Mixed Reality Toolkit-Unity(MRTK)(点击前往)是一款用于共享基础组件的开源项目,是常用交互和用户界面控件的构造块,可以帮助你在Unity中开发混合现实体验。

对于Mixed Reality Toolkit-Unity,我拣选了一些最常用的构造块和交互模式。对于每个构造块,我都会告诉你如何在存储库中找到示例场景,以及如何在项目中使用它们。

当你为HoloLens或其他WMR开发应用程序时,你需要为场景设置合适的输入模块,摄像头,光标或运动控制器,以便用户与内容进行交互。Mixed Reality Toolkit令这一切变得更加轻松。

一. 输入

1. 1示例场景

当你第一次开始开发混合现实应用程序时,这两个示例场景是你上手的理想之选。

  1. HoloToolkit-Examples/Input/Scenes/InputManagerTest.unity(点击前往)

  2. HoloToolkit-Examples/Input/Scenes/MotionControllerTest.unity(点击前往)

  3. 技术细节(点击前往)

InputManagerTest和MotionControllerTest场景

通过这些场景,你可以学习如何使用MRTK的InputManager,并且从运动控制器按钮访问数据处理事件

1.1 如何使用:自动场景设置

当你导入MRTK release Unity packages(点击前往)或者从GitHub资源库中克隆项目时,你将会在Unity中发现一个名为“Mixed Reality Toolkit”的新菜单。

在“Configure”菜单之下,你会看到“Apply Mixed Reality Scene Settings”的选项。

点击后,系统将移除默认的camera,并且添加基础组件:InputManager,MixedRealityCameraParent和DefaultCursor。

你同时可以从项目面板中手动添加它们。你可以将这些组件查找为预制件。当你搜索MixedRealityCamera时,你将能够看到两个不同的camera预制件。

不同之处在于,MixedRealityCamera仅用于camera的预制件,而MixedRealityCameraParent则包含用于WMR的附加组件,例如Teleportation,Motion Controller和Boundary。

MixedRealityCamera支持HoloLens和WMR头显。它检测设备类型并优化Skybox等属性。

下面你可以看到一些可以自定义的有用属性,如Cursor,Motion Controller模型,以及Floor。

二. 可交互对象

Interactable Object示例说明了如何为任意对象添加交互属性,并使其响应标准的输入状态,如注视,定位和按下。在混合现实中,按钮可以是从咖啡杯到气球的任何对象,它不一定是我们在2D屏幕中使用的扁平矩形。提供清晰的视觉反馈非常重要,这样可以方便用户判断什么属于可交互的对象。

2.1 示例场景

你可以在这个场景中找到Interactable Objects的例子:

  1. HoloToolkit-Examples/UX/Scenes/InteractableObjectExample.unity(点击前往)

  2. 技术细节(点击前往)

2.2 如何使用

要为对象添加交互属性,你可以使用名为CompoundButton(点击前往)的系列脚本。它们是各种交互元素的模块化脚本,如网格,文本,动画,图标,声音和语音。

你可以按需混合和匹配这些脚本。

2.3 交互状态

  1. Disabled: 对象没有激活
  2. Observation: 光标不在对象之上,手没有抬起
  3. Observation Targeted: 光标在对象之上,手没有抬起
  4. Interactive: 光标不在对象之上,手准备做手势
  5. Targeted: 光标在对象之上,手准备做手势
  6. Pressed: 光标在对象之上,手做出悬空下按的手势

2.4 Interaction Receiver:在一个位置处理事件

Interaction Receiver是一个方便的构造块,允许你在一个位置处理来自多个对象的事件。

如图所示,Interaction Receiver可以存储一系列的对象,而且当接收事件时,它可以根据触发的对象执行某些操作。

2.5 如何使用

  1. 创建一个继承自Interaction Receiver的接收器脚本
  2. 在接收器中指定对象为Interactables

  1. 在Receiver脚本中,你可以利用GameObject obj处理事件

三. 边界框与应用栏

Bounding Box(边界框)是在WMR中操作对象的标准接口。你可以在HoloLens shell,以及WMR头显中的Cliff House(悬崖屋)中找到它。借助这个UI,你可以移动,旋转和缩放对象。应用程序栏用于显示对象的情景按钮。默认情况下,它显示“隐藏”,“调整”和“删除”按钮。你同时可以在AppBar预制件中添加其他自定义按钮。

3.1 示例场景

你可以在这个场景中找到Bounding Box&App Bar的例子:

  1. HoloToolkit-Examples/UX/Scenes/BoundingBoxGizmoExample.unity(点击前往)
  2. 技术细节(点击前往)

3.2 如何使用

只需将BoundingBoxRig脚本(点击前往)分配给任何对象即可。BoundingBoxBasic预制件是获得蓝线可视化的必需条件。

TwoHandManipulatable属于可选脚本。这允许你用双手移动,旋转和缩放。默认情况下,Bounding Box不移动对象。

你同时可以将自定义按钮添加到AppBar。在项目面板中搜索AppBar预制件,然后在Inspector面板中找到Button属性。你可以调整按钮的数量,并且定义你的自定义按钮。

四. 两手操作

Two Hand Manipulation(双手操作)允许你使用双手操作对象。通过点击,按住,并移动双手,你可以缩放,旋转和移动对象。这与HoloLens RS4和Cliff House(悬崖屋)中的交互行为相同。这个也适用于运动控制器。它是一种操纵空间对象的直观方式。

4.1 示例场景

你可以在这个场景中找到Two Hand Manipulation(双手操作)的例子

  1. HoloToolkit-Examples/Input/Scenes/TwoHandManipulationTest.unity(点击前往)

  2. 技术细节(点击前往)

4.2 如何使用

只需将TwoHandManipulatable脚本分配给任何对象即可。

五. 对象集合

借助Object Collection(对象集合),你可以轻松在3D空间中布置对象阵列。你可以指定曲面类型,行,半径,单元格宽度/高度和面向选项。有了这些不同的选项,你可以快速构建三维网格系统。

5.1 示例场景

你可以在这个场景中找到Object Collection(对象集合)的例子:

  1. HoloToolkit-Examples/UX/Scenes/ObjectCollectionExample.unity(点击前往)
  2. 技术细节(点击前往)

5.2 如何使用

  1. 创建一个空白的GameObject
  2. 添加对象

  1. 向GameObject指派Object Collection.cs
  2. 调整选项,并且点击“Update Collection”

六. 求解器系统

求解器系统允许你组合各种对象定位行为,并且按顺序运行它们。“开始”菜单是一个很好的示例,它包含了多种行为,如Tag-Along(尾随)+ Constant View Size(恒定视图大小) + Surface Magnetism(表面磁性)。它将在一定范围内尾随你,如果它与其他对象表面相碰撞,它会尾随表面并自动缩小或向上以保持大小。

模块化求解器脚本系列提供以下对象定位行为:

  1. Tag-along
  2. Billboarding
  3. Radial view
  4. Body lock
  5. Surface magnetism
  6. Constant view size

MRTK中提供一个简单的Tag-along脚本,但如果要结合多个定位机制(如Tag-along和Surface magnetism),Solvers的效果可能更好。

6.1 示例场景

你可以在这个场景中找到Object Collection的例子:

  1. HoloToolkit-Examples/Utilities/Scenes/SolverExamples.unity(点击前往)
  2. 技术细节(点击前往)

6.2 如何使用

  1. 创建一个对象
  2. 指定一个脚本
  3. 调整属性

七. 语音输入

语音输入是一种与混合现实对象交互的自然方式。它可以帮助用户缩短操作时间和减少工作量。WMR shell提供了诸如“选择”,“关闭”,“移动这个”和“面向我”等系统级命令。

借助MRTK,你可以轻松为体验添加语音命令。

7.1 示例场景

你可以在这个场景中找到语音输入的例子:

  1. HoloToolkit-Examples/Input/Scenes/SpeechInputSource.unity(点击前往)

7.2 如何使用

  1. 向场景添加SpeechInputSource
  2. 添加关键词

  1. 创建一个补充ISpeechHandler的新脚本
  2. 创建一个事件句柄OnSpeechKeywordRecognized

八. 空间理解

Spatial Understanding(空间理解)是HoloLens中最令人兴奋的功能之一。通过Spatial Understanding(空间理解),你可以分析环境并识别物理表面的类型,例如地板,天花板和墙壁。当利用这些物理表面时,你可以创建与现实环境交互的逼真全息图。

8.1 示例场景

MRTK提供了三个不同的例子。Spatial Mapping(空间映射), Spatial Processing(空间处理)和Spatial Understanding(空间理解)。

  1. Examples/SpatialMapping/Scenes/SpatialMapping(点击前往)
  2. Example.unityExamples/SpatialMapping/Scenes/SpatialProcessing.unity(点击前往)
  3. Examples/SpatialUnderstanding/Scenes/SpatialUnderstandingExample(点击前往)
  4. 空间映射与处理的技术细节(点击前往)
  5. 空间理解的技术细节(点击前往)

8.2 空间映射

只需拖放SpatialMapping预制件,你即可在获得这种类型的网格。这是令应用可以与环境交互的简单快捷方式。

8.3 空间处理

如果你希望获得更清晰的表面,你可以使用空间处理。通过合并顶点,空间处理可以把网格转换成平面。通过这个步骤,你可以为墙壁,桌子和地板获取更清晰的平面。

8.4 空间理解

这是最复杂的一个。示例场景显示了房间扫描体验,并为你提供识别的表面。借助这种技术,你可以把内容放置在特定的表面类型上。

九. 附加至控制器

如果要通过运动控制器为WMR头显打造一种体验,你可以使用AttachToController将任何对象和UI附加到控制器。

9.1 示例场景

你可以在Mixed Reality Academy Tutorial — Motion Controller中找到非常优秀的例子。

  1. https://docs.microsoft.com/en-us/windows/mixed-reality/mixed-reality-213HoloToolkit/Input/Scripts/Utilities/AttachToController.cs(点击前往)

9.2 如何使用

  1. 创建一个对象
  2. 指定脚本
  3. 调整属性

十. MRTK/StandardShader

MRTK/StandardShader是一款新的着色器,可提供各种效果,如发光边框,悬停突出显示和动画属性。借助这个着色器,你可以轻松实现Fluent Design System的元素,如光线,深度和材质等等。它已经进行了优化,可以在HoloLens中以60fps运行。

10.1 示例场景

你可以找到基于MRTK/Standard Shader的优秀材质例子

  1. HoloToolkit-Examples/StandardShader/Scenes/MaterialGallery.unity(点击前往)

MRTK/Standard Shader可以帮助你轻松实现近平面淡化效果

十一. 下一步

我在本文中介绍了MRTK中一些有用的构造块。我希望这可以为你混合现实之旅提供帮助。我同时希望你可以加入社区,提出问题,报告漏洞,贡献代码,为行业的发展做出贡献。

原文链接https://yivian.com/news/45636.html
转载须知:转载摘编需注明来源映维网并保留本文链接
英文阅读:点击前往映维网合作伙伴 RoadtoVR 阅读专业英文报道
入行必读:AR/VR,下一个计算机浪潮,下一个三十年科技文明!

更多阅读推荐......

首页