HoloLens 2如何创建自己的手势?

当系统检测不到用户的手部时,手部指导会触发 3D 建模的手部。 此功能是一个“教学”组件,可在尚未传授手势时帮助指导用户。 如果用户在一段时间内未执行指定的手势,手部将以某种延迟循环。 手部指导可用于表示按下按钮或选取全息影像的操作。

提供的手部指导

当前的交互模型代表各种手势控件,例如滚动、远距选择和近距点击。 以下是 MRTK 中提供的现有手势的完整列表:

Example of Near Select


近距选择操作示例 – 用于展示如何选择按钮或关闭可交互对象

Example of Air Tap


隔空敲击操作示例 – 用于展示如何选择远处的对象

Example of Move


移动空间中对象的示例 – 用于展示如何移动空间中的全息影像

Example of Rotate


旋转操作示例 – 用于展示如何旋转全息影像或对象

Example of Scale


缩放操作示例 – 用于展示如何将全息影像放大或缩小

Example of Palm Up


掌心向上操作示例 – 建议使用此操作来调出手部菜单

Example of HandFlip


翻手操作示例 – 另一种调出手部菜单的方式

Example of Scroll


滚动操作示例 – 用于滚动列表或长文档

设计概念

对于 Hololens2,我们设计了基于本能和自然手势的手部交互。 我们相信这些交互对大多数用户来说都是直观的,因此我们并未制作专门的手势学习资料。 我们创建了手部指导,以帮助用户在卡住或者不熟悉全息影像交互时了解这些手势。 在没有学习资料的情况下,我们觉得最好是通过演示手势来向用户展示如何执行操作。 我们发现,用户能够弄清楚手势,只是稍微需要一点指导。 如果我们检测到用户在一段时间内没有与对象交互,则会触发手部指导来演示正确的手部和手指定位方法。

直观

以动画显示手部时,演示内容应该浅显,而不会造成任何困惑。 手部动画是尝试提示用户理解的手势的表示形式。

例如,如果你希望用户按下某个按钮,则会触发按下按钮的手部。

Example: Hand coach Near Tap


演示近距点击宝石的手部指导

手部缩放

我们使用 UI 菜单测试了各种手部大小,认为如果手部大小真实,就会给人带来一种不安的感觉。 如果手部太小,则很难看到和理解手势。

旁白和手部

不要指望用户可以通过旁白收听一组指令并通过手部指导观看不同的指令。 将指令排序,以帮助用户集中注意力,而不是分散他们的注意力以缓解感官超负荷的问题。

我是否可以创建自己的手势?

可以! 我们鼓励你为游戏创建自己独特的手势并贡献给社区! 我们提供了可用于应用的操作手 Maya 文件,可在此处下载:下载 HandCoach_MRTK.zip

Example of Animated Hands in Maya


在 Maya 中用手戳击盒子的动画示例

推荐的创作工具

有许多 3D 艺术家选择使用 Autodesk 的 Maya,它可以使用 HoloLens 来变革资产的创建方式。 提供的手部文件是一个 Maya 二进制文件,因此建议使用 Maya 来动画显示和导出手部。 如果你偏好使用其他 3D 程序,这里提供了一个 .FBX 文件:下载 HandCoachMRTK_FBX.zip 以创建自己的控制器设置。

如果使用提供的可下载 Maya 手部文件,建议在 Unity 中将手部缩小至 0.6。

Example: Hand coach rig in Maya


操纵手

技术规范

  • 双手文件以 Maya Ascii 格式提供
  • 右手和左手以 Maya 二进制文件格式提供
  • 将 Maya 文件设置为 24 FPS
  • 该文件中包含左手和右手,可用于执行双手或单手手势。 右手仅在默认情况下可见。
  • 建议在开头和末尾留出大约 10 帧的缓冲区用于淡入淡出
  • 如果以动画显示具有指定目标的对象,最佳做法是将动画设置为默认盒或 Null。
  • 如果手部正在为某个物理对象(例如盒子)显示动画,则最佳做法是不要动画显示 Maya 中的平移,而是等待在 Unity 或 Code 中显示动画。
  • 可见动画应为 1.5 秒,以传达任何有意义的信息
  • 当对动画感到满意时:

从 Maya 导出

对动画感到满意后

  • 选择所有关节:“选择”>“层次结构”
  • 烘焙动画:“切换到动画”>“关键帧”>“烘焙动画”
  • 删除控制器装备:“轮廓线程序”>“MainR_Grp”或“MainL_Grp”
  • 导出为 FBX:选择“JNT + 网格”:“文件”>“导出选择内容”(选项框)>“导出选择内容”

导出为 FBX 并引入 Unity 时,请将手部缩小至 0.6。 我们发现,此大小可以实现平衡,可完美显示手部。

Example: Unity Settings


MRTK 中 HandCoach_R 预制件的 Unity 设置

在 Unity 项目中实现手部

最佳做法

  • 建议在 Unity 中将手部缩小至 0.6
  • 应该播放手部两次,如果未完成播放,则连续循环直到手势完成。 手部应循环两次,以确保用户有时间注册并看到手势。 手部应该在循环之间淡入淡出。
  • 如果 HL2 相机可以看到用户的手部,但用户没有进行所需的交互,则手部将在 10 秒后出现。
  • 如果 HL2 相机看不到用户的手部,则手部将在 5 秒后出现。
  • 如果用户的手部在动画中间被 HL2 相机目视跟踪,动画将会完成并淡出。
  • 如果包括旁白,我们建议使旁白对应于手势。
  • 如果至少传授过手部一次,则仅在检测到用户被卡住时才重复手势。
  • 如果特定的手指/手部位置非常重要,请确保用户可以在动画中清楚地看到这些细微差别。 尝试调整手部的角度,使最重要的部分清晰可见。
  • 如果发现手部变形,则需要转到 Unity 的“质量”设置来增加骨骼数量。 转到 Unity 的“编辑”>“项目设置”>“质量”>“其他”>“混合权重”。 确保选择“4 个骨骼”以查看“平滑关节”。
Example: Project Settings Window

要避免的内容

  • 将手部过于放大
  • 将手放在过于靠近用户的位置
  • 应该仅传授手部一次。 过度传授可能导致迷惑和混乱
  • 将其引入 Unity,并在此处下载最新的 MRTK:https://github.com/microsoft/MixedRealityToolkit-Unity
    • 材料:Teaching_Hand2
    • 脚本:参阅 MRTK 手部指导指南
    • 每个项目的设置
      • 场景设置为 UWP:可以在 Windows Mixed Reality 的配置 Unity 项目中找到说明