Skip to content

Protocol V2

gpsnmeajp edited this page Oct 13, 2019 · 29 revisions

プロトコルについて

EasyVirtualMotionCaptureForUnityのExternalReceiverは以下のプロトコルで通信しています。

  • OSC Protocolによる単方向UDP通信
  • ポート番号は既定で39539
  • 各値は1パケットで完結しており、欠落していても大きな影響が出ない
  • 送信周期は送り手のフレームレート依存
  • 必要・不要にかかわらず送信側は送信し、受信側でフィルタする

現在のプロトコルバージョンはV2です。

内容

/Address (Type){Value}  

の形で記述します。

利用可否(Available)

/VMC/Ext/OK (int){0 or 1}  

モデル読み込み前は0、読み込み後は1
後述のボーン情報等が送信されているか否かを示す

送信側相対時刻(Time)

/VMC/Ext/T (float){time}  

送信側の現在の相対時刻 通信できているかを確認するのに主に使用する

Root姿勢(Root Transform)

/VMC/Ext/Root/Pos (string){name} (float){p.x} (float){p.y} (float){p.z} (float){q.x} (float){q.y} (float){q.z} (float){q.w}  

モデルのrootとなるオブジェクトの絶対姿勢
nameは"root"固定。(Boneと合わせるため)
前半がPosition、後半がQuaternion
受信側ではLoal姿勢として扱うことを推奨する

Bone姿勢(Bone Transform)

/VMC/Ext/Bone/Pos (string){name} (float){p.x} (float){p.y} (float){p.z} (float){q.x} (float){q.y} (float){q.z} (float){q.w}  

モデルのrootとなるオブジェクトのLocal姿勢
nameはUnityEngineのHumanBodyBonesに沿った型名
前半がPosition、後半がQuaternion
受信側ではLoal回転のみ適用することを推奨する

※HumanBodyBonesすべてが送信される。LastBoneも含む。
これにより指の動きやEyeボーンなども送信される。

VRM BlendShapeProxyValue

/VMC/Ext/Blend/Val (string){name} (float){value}  
/VMC/Ext/Blend/Apply

BlendShapeProxyの値。送信側のVRMモデルに含まれるものすべてが送信され、
一連の内容が送信された後、Applyが送信される。
UniVRMの仕様上、AccumulateValueで蓄えた後、Applyを行うためこのようになっている。
これにより、表情やリップシンクなども送信される。

Clone this wiki locally