# ハンドトラッキング仕様

# VRChatにおけるハンドトラッキング仕様

SteamVR skeletal hand trackingについて

2024/8/15の2024.3.1 build 1490 (opens new window)より、公式に SteamVR skeletal hand tracking にVRChatが対応しました。

  • これにより、アバターに個別にOSCの設定を行わずとも、VRChatで手指の関節ごとに指を曲げる動作が可能になりました。
  • VRChat内でのAvatar Gesture(ハンドサイン)に関してもOSCの設定をすることなくご利用いただけますが、DivingStationによる独自のAvatar Gesture(ハンドサイン)判定をアバターへ反映するにはOSCの設定が必要です。

# 概要

TIP

ContactGloveは各指ごとに内蔵されたセンサによって各5指の独立した関節の曲げ伸ばしを取得し、HandTrackingを行います。
以下2通りの方法で、SteamVR経由のVRChatにおいてHandTrackingを行うことができます。

  1. Index-Emulated HandTracking

    • Valve Index Controller互換のHandTrackingを行います。
    • 2024/8/15の2024.3.1 build 1490 (opens new window)より、SteamVR skeletal hand trackingを利用した指の関節ごとの曲げ動作に対応
    • アバター改変が不要です。(Public・Sampleアバター等でのご利用も可能です)
  2. ContactGlove-OSC HandTracking

# 詳細

# 1. Index-Emulate HandTracking


ContactGloveのHandTrackingデータを利用し、Index Controller互換のHandTrackingを行う方法です。

特徴
  • 両手の関節ごとではない統合・平均された各5指の曲げ伸ばしを行うことができます。
  • ContactGlove-OSC HandTracking と異なり、指の各関節ごとの独立した曲げ伸ばしは表現できません。( = HandTrackingの詳細度は失われます)
  • VRChat内のアバター改変を行うことなくご利用いただけます。

# 2. ContactGlove-OSC HandTracking


ContactGloveOSCにより、ContactGloveのHandTrackingデータをOSCパラメータ経由でVRChat内アバターへ反映させ、HandTrackingを行う方法です。
ContactGloveOSC のセットアップについてはこちら (opens new window)の項目をご参照ください。

特徴
  • 両手の各5指ごとに独立した関節の曲げ伸ばしをアバターへ反映させることができます。
  • DivingStationから主に以下のをOSCパラメータとしてVRChat側へ送ります。
    • 各関節ごとの曲げ伸ばしの値(float)
    • 専用GestureParameter(int)/ GestureWeight(float) 値
  • ご利用になるVRChat内アバターへ、ContactGloveOSCの導入が必須です。
  • アバターのExpressionParameterの同期パラメータ(TotalMemory)の利用上限256bitの内以下を利用します。
    • Full verで177bit
      • 全ての関節の曲げを0~1の間で0.01刻みで動かすことが出来ます。
    • Lite verで107bit
      • Full ver よりも少ないパラメータ数で全ての関節の曲げを表現できます。
      • 親指・薬指・小指の関節の曲げ/伸ばしは0/1の動作になります。
GestureToggle機能について

ContactGlove-OSC HandTracking 利用時、VRChat側の仕様上、VRChat側のGestureToggle機能は動作しません。 DivingStationによる独自のAvatar Gesture(ハンドサイン)判定をアバターへ反映し、DivingStationとOSCを利用した独自実装のバインドにより、GestureToggle機能を実現しています。 詳細はセットアップのこちら (opens new window)をご覧ください。

指の動きのNetWork同期について
  • VRChatの仕様上、Puppet menu以外でのExpressionParameterのNetWork同期はIKではなくPlayable Syncとなります。
  • このため、NetWorkへ反映させているアバターの同期パラメータの同期速度は、通常では 1~10 更新/s となります。
  • よってLocalでの専用Animationを作動させる同期パラメータはそのままでは同期速度が遅く、NetWorkへ反映させているAnimationの動きに顕著なカクツキが生じます。
  • これを防ぐために、アバターへOSCmooth(外部リンク) (opens new window)という仕組みを導入することで、NetWorkで動作しているExpressionParameterの補完を行っています。