Snapdragon Spaces 開発ガイド (6)


5.4.2 QCHT ガイドライン

5.4.2.1 ハンドトラッキングの概要

画像の説明を追加してください
XR は、次世代が世界とどのように関わるかを表します。このソリューションは、ハードウェアに依存しないハンド トラッキングおよびジェスチャ認識ソフトウェア プラットフォームを提供し、最先端の XR イマーシブ ソリューションを強化します。

ハンドトラッキングの目的は次のとおりです。

  • 正確で低遅延の一人称視点のハンドトラッキングを実現
  • 一連の一般的なジェスチャーを認識する
  • 車載カメラやセンサーと直接統合
  • さまざまなハードウェアとオペレーティング システムのサポート

Snapdragon Spaces プラグイン内のハンド トラッキング コンポーネントは、次の機能を提供します。

  • 手の検出と追跡
  • ジェスチャー認識 (つかむ、つまむ、開く)

開発者パッケージのカスタム パッケージ Qualcomm Hand Tracking Interaction (QCHTI) は、次の追加機能を提供します。

  • ハンドメッシュを視覚化する
  • インタラクションの処理 (レイキャスティング、スナップ、仮想フォース フィードバック)
  • 補正された自動触覚フィードバックによる高度なインタラクション (ターゲット設定、選択、操作)

5.4.2.2 一般

ハンド メッシュのリギングやインタラクション コンポーネントなどのハンド トラッキング機能は、メインの Snapdragon Spaces パッケージには含まれていませんが、別のパッケージに tarball ファイルとして含まれています。Unity のドキュメントで説明されているように、メイン パッケージと同じ方法でインポートできます

まず、Snapdragon Spaces パッケージ (ここで説明します) をインストールします。ハンド トラッキングに必要な最小バージョンは 0.6.0 です。次に、メインの Snapdragon Spaces パッケージと同じフォルダーにある次のパッケージをインポートします。

警告:
ハンドトラッキングが適切に機能するには、Spaces Services アプリのカメラ権限をここで説明されているように有効にする必要があります。

QCHT Unity インタラクション 4 (バージョン 4.0.0)

このパッケージは、ハンド トラッキング サブシステム、OpenXR 接続、ライフサイクル イベントを管理します。これには、ハンドヘルドや、遠距離や近距離などの特定の XRIT ベースのインタラクションも含まれます。

パッケージ マネージャーで [インポート] ボタンをクリックし、アセット フォルダーに直接追加されるファイルを参照して、ハンド トラッキングのサンプル シーンを探索できます。

基本的なシーンのセットアップ

AR セッションと AR セッション オリジン
必要に応じて、ハンド トラッキングは、ここで説明するように AR Foundation 4.X の AR セッションと AR セッション オリジンもサポートします。

XRオリジン

まず、ここで説明されているように、シーンに XR オリジンを作成します (新しいウィンドウが開きます)。

XR Origin ゲーム オブジェクトを作成した後、その階層を展開して、左コントローラーと右コントローラーを表示します。

画像の説明を追加してください

これら 2 つのゲーム オブジェクトにはそれぞれ XR コントローラー コンポーネントが含まれており、デフォルトでは入力アクションにマップされません。これら 2 つのコンポーネントは使用されないため、この時点で削除できます。

次に、XR Hand Tracking Manager コンポーネントを XR Origin (または AR Session Origin) ゲーム オブジェクトに追加します。

画像の説明を追加してください

XRハンドトラッキングマネージャー

ヒント
XR Hand Tracking Manager のインスタンスは、クラスの静的パブリック API を使用するコードを通じて作成できます。「XR ハンド トラッキング マネージャー API」を参照してください。GetOrCreateXR ハンド トラッキング マネージャー

このコンポーネントは、ハンド追跡サブシステムを管理するために必要です。実行時にハンド追跡データを更新し、コンポーネントがアタッチされている XR Origin でユーザーの手を追跡します (XR Origin と AR Session Origin の両方をサポートします)。実行時に、ハンド トラッキング マネージャーは左手と右手のプレハブをインスタンス化し、Open XR ハンド トラッキング レイヤーが手を追跡または追跡解除するときにインスタンスを有効または無効にします。

シーンの階層を右クリックし、QCHT > Hand Tracking Manager を選択して、Hand Tracking Manager をシーンに追加します。

画像の説明を追加してください

エディタエミュレータ内

XR インタラクション ツールキット デバイス シミュレーターを有効にする (新しいウィンドウが開きます) シミュレーションの場合、Unity プロジェクト設定の [ハンド トラッキング シミュレーション] セクションでシミュレーション サブシステムを有効にします。

画像の説明を追加してください
次に、プロジェクト設定の XR インタラクション ツールキット セクションで、シーンでの XR デバイス シミュレーターの使用 を有効にします。

警告
アプリケーションをターゲット プラットフォームにビルドするには、この設定を無効にする必要があります。

画像の説明を追加してください

エミュレーターの使用方法については、XR Interaction Toolkit デバイス エミュレーターのドキュメント (新しいウィンドウが開きます) を参照してください。

ヒント
プロジェクトをターゲット プラットフォームにビルドする前に、[シーンで XR デバイス エミュレーターを使用する] を忘れずに無効にしてください。
エディターでシーンを再生するときに、キーボードの Tab キーを押すと、頭から左手/右手にすばやく切り替えることができます。

画像の説明を追加してください
XR ハンド トラッキング マネージャー API

定常 説明する
GameObject DefaultLeftHandPrefab アセットフォルダー内のデフォルトの左手プレハブを参照します。パッケージ > プレハブ > リソース > QualcommHandLeft
GameObject DefaultRightHandPrefab リソースフォルダー内のデフォルトの右側のプレハブを参照します。パッケージ > プレハブ > リソース > QualcommHandRight
XRHandTrackingManager InstantiateHandTrackingManager() デフォルトの手プレハブを使用してハンド トラッキング マネージャーをインスタンス化します。
XRHandTrackingManager GetOrCreate(GameObject leftHandPrefab, GameObject rightHandPrefab) 既存のハンド トラッキング マネージャーを取得するか、パラメーターで指定されたハンド プレハブが存在しない場合はハンド トラッキング マネージャーを作成します。
void Destroy(XRHandTrackingManager マネージャー) 指定されたハンド トラッキング マネージャー インスタンスを破棄するか、破棄するインスタンスが存在する場合はそのインスタンスを見つけようとします。
非静的 説明する
ゲームオブジェクト LeftHandPrefab インスタンス化される左側のプレハブ オブジェクト
ゲームオブジェクト RightHandPrefab インスタンス化される適切なプレハブ
void RefreshLeftHand() プレハブが変更された場合は、左側のオブジェクトを再生成します
void RefreshRightHand() プレハブが変更された場合に適切なオブジェクトを再生成します
void ToggleLeftHand(bool可視) 左手の表示を切り替えます
void ToggleRightHand(bool可視) 右手の表示を切り替えます
void SetLeftHandSkin(HandSkin スキン) 手のオブジェクトがスキニング可能な場合は、左手のスキンを設定します
void SetRightHandSkin(HandSkin スキン) 手のオブジェクトがスキニング可能な場合は、右手のスキンを設定します
void StartHandTracking() サブシステム マネージャーにハンド トラッキング サブシステムが存在する場合は、手動でサブシステムを開始します。
void StopHandTracking() サブシステム マネージャーにハンド トラッキング サブシステムが存在する場合は、手動で停止します。

XR ハンド トラッキング サブシステム

定常 説明する
XRHandTrackingSubsystem GetSubsystemInManager() サブシステム マネージャー内の最初の XR ハンド トラッキング サブシステム インスタンスを返します (存在する場合)。
非静的 説明する
HandTrackingStatusステータス ハンド トラッキング バックエンドの状態を取得します。アイドル、実行、またはエラーの可能性があります
左手左手 左手のデータ
右手右手 右手のデータ
Hand GetHand(XrHandedness 利き手) 利き手によるハンドデータの取得
イベントアクション OnHandTracked このフレームでハンドがすでに追跡されている場合は、レイズします
イベントアクション OnHandUntracked このフレームで手が追跡されない場合は、レイズします。
イベント アクション OnHandsUpdated 両手データが更新されたときに発生します

手の構造

非静的 説明する
Xr利き手 手に慣れてください。XR_HAND_LEFT または XR_HAND_RIGHT にすることができます
XrSpace スペース フェデレーション データを保存するスペース。XR_HAND_LOCAL または XR_HAND_WORLD (XR Origin の場合) にすることができます。
bool は追跡されています 手が現在追跡されている場合は true
XrHandGesture ジェスチャー ハンドトラッキングバックエンドによってジェスチャが検出されました
float FlipRatio 手のひらの方向が HMD の位置と反対または向いている場合、ハンドフリップ率 -1f はそれぞれ 1f になります。
フロートスケール 手秤从.5f到1.6f
Pose Root 手根姿势(相当于XR Origin中的手腕中心姿势)
Pose[] Joints 手部关节姿势

手部追踪控制器

场景架构

创建后XR Hand Tracking Manager,会在左侧和右侧字段中自动设置两个预制件。这些预制件仅用于手动可视化目的。
手部游戏对象具有Hand Rigged Visualizer和Hand Driver组件,负责可视化手部网格并更新Skinned Mesh的手部关节变换。

为了实现远端交互和近端交互等交互,必须添加手部自定义 XRIT 控制器。

通过在场景的层次结构中右键单击并选择 QCHT > 手部跟踪控制器,将手部跟踪控制器游戏对象添加到场景中。画像の説明を追加してください
手部跟踪控制器的两个实例会自动添加为XR Origin(或AR Session)的子级。

画像の説明を追加してください

每个控制器都通过预定义的设置和输入操作绑定聚合了XR Ray Interactor、XR Poke Interactor和XR Direct Interactor组件。这些组件是高度可配置的。

XR 手持控制器

XR Hand Controller组件是XR Action Base Controller的自定义实现 (打开新窗口)来自 XR 交互工具包包。XR 手控制器负责处理来自直接映射到底层手部跟踪子系统的新 Unity 输入系统的输入操作。XR Action Base Controller的自定义实现定义了额外的抓取操作和控制器的用手习惯,这对于过滤交互非常有用。

画像の説明を追加してください

5.4.2.3 互动方式

远端互动

画像の説明を追加してください

要与远处(远端)物体交互,用户可以使用XRIT 的XR Ray Interactor组件。

要使用远端交互功能,用户必须将手放入耳机的视野中,并且会看到一条光线,使他们能够瞄准想要与之交互的对象。射线末端的十字线允许用户瞄准并提高交互的精度。捏合手势激活选择以操纵目标对象。

描述

首先,确保场景的手部跟踪初始设置已完成。

XR控制器指针

XRControllerPointerLeft和XRControllerPointerRight预制件位于 Packages > QCHT Unity Interactions > Prefabs > Interactions > Distal 文件夹中,应成为XR Origin GameObject中Camera Offset GameObject 的子级。

画像の説明を追加してください

通过更改每只手的 XR 射线交互器组件来调整射线投射参数。请参阅 Unity 的文档以了解有关XR Interactor 的更多信息

默认情况下,XRController 控制每只手的脚本具有由 设定的位置pointerPosition和由 设定的旋转pointerRotation。这些由XRHandTrackingManager计算。默认情况下,“选择”和“UI 按下”操作设置为triggerPressed(即“捏合”手势)。

画像の説明を追加してください
如本示例所示,第二个和第三个动作可以映射到另一个设备,作为手部跟踪的后备。由于新的输入系统兼容性,可以使用完全相同的代码轻松支持不同的输入模式。

捕捉音量

使用XR 可交互快照卷 XRIT 组件可提高光线投射精度和效率。

近端交互

画像の説明を追加してください
近端交互是指与靠近手部的虚拟对象进行交互。

XR直接交互器
由于 QCHT Interactions 包基于 XRIT,因此XR Direct Interactor组件可用于对象操作。

XR直接交互器 负责触发任何可交互对象上的交互。它是 XRIT 的标准组件,并且具有高度可配置性。

XR Direct Interactor コンポーネントを使用した事前構成済みの HandMainLeftXRIT および HandMainRightXRIT ハンド プレハブは、[パッケージ] > [QCHT Unity Interactions] > [プレハブ] > [Hands] フォルダーにあります。

XR Grab Interactables
XR Direct Interactor は、XR Grab Interactables とのインタラクションをトリガーします。これは XRIT の標準コンポーネントであり、高度に構成可能です。

XR Poke Interactor
QCHT Interactions は、人差し指の先端に配置されたポーク位置を介してXR Poke Interactorをサポートします。これは XRIT の標準コンポーネントであり、高度に構成可能です。

おすすめ

転載: blog.csdn.net/weixin_38498942/article/details/132458979