Oculus 手势追踪
admin
2024-03-22 16:44:47
0

手部设置入门

设置相机

  1. 从项目中创建新场景或打开现有场景。
  2. 在 Assets 目录中找到 OVRCameraRig 预制体将其拖到场景中。如果场景中已存在 预制体跳过此步骤
  3. 在 面板中选中 OVRCameraRig > OVR Manager > Tracking 选择 Tracking Origin TypeFloor Level.

选择手势跟踪作为输入

  1. 选择 OVR Manager > Quest FeaturesHand Tracking Support 列表中选择 Controllers and Hands 或者 Hands Only 选项开启手势跟踪
//当选择的控制器中包含手势跟踪时 quset 会自动在 AndroidManifest.xml 文件中添加以下配置
 

  1. Hand Tracking Version 列表中选择 V2 使用最新版手部跟踪
//当选择手势跟踪版本为 V1 或 V2 时,Quest 会自动在 AndroidManifest.xml 文件中添加元素

添加手势跟踪预制体

  1. Hierarchy 面板选择 OVRCameraRig > TrackingSpace 节点下选中左右手锚点
  2. 在 Assets 目录下搜索 OVRHandPrefab ,将其拖拽至 左右手锚点下。
  3. Hierarchy 面板 RightHandAnchor 节点下 选择 OVRHandPrefabOVR Hand, OVR Skeleton, 和 OVR Mesh, 组件中类型改为 HandRight , 左手预制体无需改动,默认手部类型为左手
  4. Hierarchy 面板 同时选择左右手 OVRHandPrefab 预制体,确保 OVR Skeleton, OVR Mesh, OVR Mesh Renderer 组件被启动
    此时,应用可以将手部呈现为输入设备,可以带上头戴设别,运行程序,在场景中看到 双手被正常跟踪渲染。

更新手势模型位置,大小

为了生成和渲染手部模型,OVR Mesh Renderer 结合了 OVR Skeleton OVR Mesh 返回的数据。 OVR Skeleton 返回绑定姿势、骨骼层次结构和碰撞体数据, OVR Mesh 从 Oculus 运行时加载指定的 3D 资源,并将其显示为 Unity Mesh。

  1. 当 OVRHandPrefab 在 OVRCameraRig > TrackingSpace 下的 左右手锚点时,取消 OVRSkeleton 组件中的 UpdateRootPose 选项,
  2. 当 OVRHandPrefab 放在非 OVRCameraRig > TrackingSpace 下时,需要勾选 UpdateRootPose 选项,确保手势模型 位置能够正确更新
  3. 如果需要根据用户手部大小更新 手部模型比例,请确保 OVRSkeleton 中 UpdateRootScale 被勾选,默认情况下,模型缩放比例为 1.0 ,通过启用缩放,可以根据用户的实际手部大小放大或缩小手部模型。如果你希望使用默认参考手部尺寸,则取消勾选

添加 Physics Capsules

Physics Capsules 表示手的骨骼体积,用于触发物理对象的交互,并生成与物理系统中其他刚体的碰撞事件。

  1. Hierarchy 面板展开 OVRCameraRig>TrackingSpace ,然后选择要与物理交互的 OVRHandPrefab.
  2. OVR Skeleton 组件选择开启 Enable Physics Capsules

自定义显示

默认手部模型为蒙皮, SkinnedMeshRenderer 显示模型在场景中渲染方式的属性。确保 Skinned Mesh Renderer 组件被启用,可以定义三大类别来自定义手部模型:

  • Materials 材质自定义手在应用程序中的显示方式。根据 shader ,配置适合您的内容的材质。
  • Lighting 光照指定网格渲染器是否以及如何投影和接受阴影
  • Probes 探针包含设置渲染器如何从光照探针系统接收光线的属性。
    要定义 Skinned Mesh Renderer 属性,请执行以下操作:
  1. Hierarchy 面板上,展开 OVRCameraRig > TrackingSpace 然后从选择任意一个 OVRHandPrefab.
  2. Inspector 面板,执行以下操作:
    • 确保 Skinned Mesh Renderer 组件被启用
    • Materials 下,输入要使用材质数量,然后再材质列表中拖动材质。默认情况下,大小为 1 。
    • LightingCastShadows 选在如果投影阴影
    • Probes 下 光照探针列表中,选择渲染器如何使用插值光照探针。默认情况下,渲染器使用一个插值光照探针。

使用高频跟踪手势

高频手部跟踪提供更强大和可靠的手势检测、稳定的手部描绘,以及约 10% 的延迟改进。这为使用手作为输入的用户创建了自然手部运动的无缝复制和更身临其境的体验。使用高频跟踪的会导致抖动略有增加,特别是在弱光条件下。

  1. Inspector 面板 选择 OVRCameraRig
  2. Inspector 面板 Quest FeaturesHandTrackingFrequency 选项中选择 High

获取 Bone ID

OVRSkeleton 包含用于实现交互的骨骼 ID 和方法的完整列表,例如检测手势,计算手势相似度,或在物理系统中触发碰撞事件。
调用 GetCurrentStartBoneID ()GetCurrentEndBoneId() 方法来返回开始骨骼 ID 和结束骨骼 ID , 这些骨骼 ID 主要用于循环访问当前配置的骨架类型中存在的骨骼子集。 调用 GetCurrentNumBones()GetCurrentNumSkinnableBones() 方法以返回骨架中的骨骼总数和蒙皮骨骼总数。

Invalid          = -1
Hand_Start       = 0
Hand_WristRoot   = Hand_Start + 0 // root frame of the hand, where the wrist is located
Hand_ForearmStub = Hand_Start + 1 // frame for user's forearm
Hand_Thumb0      = Hand_Start + 2 // thumb trapezium bone
Hand_Thumb1      = Hand_Start + 3 // thumb metacarpal bone
Hand_Thumb2      = Hand_Start + 4 // thumb proximal phalange bone
Hand_Thumb3      = Hand_Start + 5 // thumb distal phalange bone
Hand_Index1      = Hand_Start + 6 // index proximal phalange bone
Hand_Index2      = Hand_Start + 7 // index intermediate phalange bone
Hand_Index3      = Hand_Start + 8 // index distal phalange bone
Hand_Middle1     = Hand_Start + 9 // middle proximal phalange bone
Hand_Middle2     = Hand_Start + 10 // middle intermediate phalange bone
Hand_Middle3     = Hand_Start + 11 // middle distal phalange bone
Hand_Ring1       = Hand_Start + 12 // ring proximal phalange bone
Hand_Ring2       = Hand_Start + 13 // ring intermediate phalange bone
Hand_Ring3       = Hand_Start + 14 // ring distal phalange bone
Hand_Pinky0      = Hand_Start + 15 // pinky metacarpal bone
Hand_Pinky1      = Hand_Start + 16 // pinky proximal phalange bone
Hand_Pinky2      = Hand_Start + 17 // pinky intermediate phalange bone
Hand_Pinky3      = Hand_Start + 18 // pinky distal phalange bone
Hand_MaxSkinnable= Hand_Start + 19
// Bone tips are position only. They are not used for skinning but are useful for hit-testing.
// NOTE: Hand_ThumbTip == Hand_MaxSkinnable since the extended tips need to be contiguous
Hand_ThumbTip    = Hand_Start + Hand_MaxSkinnable + 0 // tip of the thumb
Hand_IndexTip    = Hand_Start + Hand_MaxSkinnable + 1 // tip of the index finger
Hand_MiddleTip   = Hand_Start + Hand_MaxSkinnable + 2 // tip of the middle finger
Hand_RingTip     = Hand_Start + Hand_MaxSkinnable + 3 // tip of the ring finger
Hand_PinkyTip    = Hand_Start + Hand_MaxSkinnable + 4 // tip of the pinky
Hand_End         = Hand_Start + Hand_MaxSkinnable + 5
Max              = Hand_End + 0

手势关节点信息

通过 GetCurrentNumBones() 方法返回不包括 五个手指 Tip 点的 19 个骨骼点
通过 GetCurrentNumSkinnableBones() 方法返回 24 个蒙皮骨骼点

添加手势交互

为了标准化应用之间的交互,OVR Hand 提供对过滤后的指针姿势和捏合手势检测的访问,以确保应用符合 Oculus 系统应用相同的交互,

Pinch

捏合是使用手势与 UI 的基本交互。成功捏合被视为一次 UI 点击操作

OVR Hand 提供检测手指当前是否正在捏合,捏合的力度以及手指姿势的相似度的方法。可以通过更改 手指的颜色,再手指完全捏合时添加音效,或者基于捏合状态继承物理交互来向用户提供反馈。
调用 GetFingerIsPinching() 方法并传递手指检查它当前是否正在捏合。该方法返回一个 bool ,表示捏合的状态。
调用GetFingerPinchStrength() 方法返回当前手指的捏合进度以及强度。它返回的值范围为 ( 0 - 1 ), 0 表示无捏合,1 表示手指触摸到拇指完全捏合状态。
GetFingerConfidence() 方法返回手势的相似度,返回值为 low 或 high .

var hand = GetComponent();
bool isIndexFingerPinching = hand.GetFingerIsPinching(HandFinger.Index);
float ringFingerPinchStrength = hand.GetFingerPinchStrength(HandFinger.Ring);
TrackingConfidence confidence = hand.GetFingerConfidence(HandFinger.Index);

Pointer Pose

OVR Hand 提供手势指针姿势,以便交互可以与 Quest 保持一致。它提供 从手部到跟踪空间中的起点和终点。强烈建议使用 PointerPose 来确定用户在 UI 交互情况下指向的方向。

手部跟踪信息

OVRHand.IsTracked 检测当前手是否可见,并且被 Oculus 设备跟踪。
HandConfidence 设置追踪的相似度。

获取手部模型缩放

HandScale 获取用户手部模型缩放,默认手部模型缩放为 1.0 该值可以随时更改

系统手势

唤起系统手势是一个保留手势,允许用户通过手势唤起 Oculus 菜单,当用户惯用手手掌朝向用户并用食指捏合时,会触发此事件

若要检测惯用手,调用 IsDominantHand 属性。如果返回为 true ,通过调用 IsSystemGestureInProgress 可以检查用户是否正在执行系统手势。

相关内容

热门资讯

贷款也“拼团” 银行抢单忙 购物能“拼团”,贷款也能! 近日,一场“拼团融资”的银企对接活动在省工业和信息化厅拉开帷幕。 “贷款...
逛花展、赶市集、嗨直播!202... 5月23日 “2026北京直播电商购物月” 在丰台区丽泽金融商务区·2026北京国际花展 正式拉开帷...
2026中关村毕业季|AI“吃... “上帝会掷骰子吗?” 在联想未来中心的“与智者同场”展区,一位海淀学子对着屏幕问道。 爱因斯坦微微前...
原创 今... 今日为5月23日,国际现货黄金价格在4500美元/盎司整数关口附近徘徊不前,日内最低触及4480美元...
三连亏后变为“无主”状态,农尚... 从吴亮手中接盘农尚环境(300536)不足三年后,林峰如今让出了公司控制权,上市公司进入“无主”状态...
55岁湖南女首富出手!豪掷13... 快科技5月24日消息,与马斯克、库克并肩而坐,刚参加完国宴的湖南女首富周群飞就买了家上市企业。 近日...
外资加仓A股,岂是跟风这么简单... 熬过忙碌的交易日,在周末安静时段,理清接下来布局方向。本篇为大家准备了5条要闻,涵盖市场动态、行业变...
原创 俄... 在全球能源的残酷牌桌上,手里攥着石油,腰杆子才能硬气。长期以来,中东的沙漠、俄罗斯的冰原、美国的页岩...
喜力啤酒有产品将涨价,华润啤酒... 来源:红星新闻 红星资本局5月22日消息,今日,红星资本局从雪花啤酒(厦门)有限公司、华润啤酒方面获...
原创 金... 心理预期调整刻不容缓,五月二十二日,黄金价格或将重现十五年前的历史性低迷。 近期若您密切关注着黄金市...
原创 马... 埃隆·马斯克如果能让SpaceX实现“科幻小说”级别的目标,他可能获得1万亿美元的收入。 埃隆·马斯...
涨涨涨!放开限制、可加杠杆!这... 韩国股市站在风口上! 据最新消息,为吸引更多海外资金进入股市,韩国政府计划放开限制,允许境外投资者直...
下周9家上会丨科创板首单IPO... IPO及再融资上会预告 据交易所官网审核动态信息,下周(5.25-5.29)IPO上会审核6家企业,...
富途、老虎市值蒸发1/4!或被... 来源:金融时报 5月22日,中国证监会宣布依法对Tiger Brokers (NZ) Limited...
马爸爸的好兄弟钱多多搞了杀猪盘... *此图由AI生成 作者| 史大郎&猫哥 来源| 是史大郎&大猫财经Pro 上周四,港股经纬天地大崩盘...
原创 壳... 编辑:XL 国际能源圈最近炸开了锅,壳牌这家百年石油巨头在2026年3月与委内瑞拉政府正式签署多项油...
存储热潮愈演愈烈!奖金拿到手软... 财联社5月24日讯(编辑 卞纯)在席卷全球的存储芯片热潮中,韩国“存储芯片双雄”SK海力士和三星无疑...
揽牌、合作、生态,跨境支付头部... 近日,国内头部跨境支付机构密集落地海外重要布局,一方面,连连数字、PingPong两家公司相继在中东...
原创 帮... 老铁们,周末好!我是帮主郑重。刚扫了一眼下周的财经日历,好家伙,事件一个接一个,堪称“消息面轰炸周”...
海南省住建厅与中国石化海南石油... 5月22日,中国石化海南石油分公司代表、党委书记李新强、总经理蔡文东一行赴海南省住建厅拜访交流。省住...