WebSocket/JSON・MessagePack ベースのVRライクアプリケーションにおける各種制御情報(モーションキャプチャ,表情,リップシンク,つかみなどの動作)をやり取りするためのプロトコル.
VCP は Virtual Communication Protocol または Virtual Control Protocol の略です(未定).
他の言語: en
プロトコルの詳細はこちら(未完)
特記事項
VCP では API という単語を「特定のデータをやり取りする際に用いるコンテナの仕様」という意味で用いています.
この言い回しは一般的な API が指すものと大きく異なり混乱することを承知しております.そして,よりもっともらしい単語に置き換える予定です(たとえばスキーマなど). しかしながら,すでにプロトコルやリファレンス実装全体に渡りすでに利用されているキーワードであるため,修正には時間がかかります.
これらの事情から,バージョン1 系列のリリースでは引き続き API という単語を上で述べたような意味で用います.
WebSocket を利用して通信を行います. 通信フォーマットには JSON や MessagePack を用い,各種用途のための API が用意されています.JSON スキーマの章をご覧ください.
JSON スキーマは /schema
ディレクトリ以下に置いてあります.(yaml 形式)
以下は特に重要な API の一覧です.
API名 | 役割 |
---|---|
handshake | サーバーにクライアントの役割を通告する.(Sink, Source, Control) |
headPose | 顔認識などでキャプチャした頭部の姿勢をやり取りする. |
fullBody | 全身モーキャプ(またはその一部)をやり取りする. |
bust | 上半身(腕,腰,頭など)のキャプチャーをやり取りする. |
interact | つかみや投げなどのインタラクション情報をやり取りする. |
controlAPI suite | 一般的な制御情報を取り扱う. (インタラクション,収録,放送,カメラ・ライティングなど) |
+------------------+-----------------------------------------------------------------+ | API名 | 役割 | +==================+=================================================================+ | handshake | サーバーにクライアントの役割を通告する.(Sink, Source, Control) | +------------------+-----------------------------------------------------------------+ | headPose | 顔認識などでキャプチャした頭部の姿勢をやり取りする. | +------------------+-----------------------------------------------------------------+ | fullBody | 全身モーキャプ(またはその一部)をやり取りする. | +------------------+-----------------------------------------------------------------+ | bust | 上半身(腕,腰,頭など)のキャプチャーをやり取りする. | +------------------+-----------------------------------------------------------------+ | interact | つかみや投げなどのインタラクション情報をやり取りする. | +------------------+-----------------------------------------------------------------+ | controlAPI suite | 一般的な制御情報を取り扱う. | | | (インタラクション,収録,放送,カメラ・ライティングなど) | +------------------+-----------------------------------------------------------------+
VCP は MessagePack をサポートしています.
C# のリファレンス実装(このレポジトリ)は MessagePack の情報を JSON と同等に取り扱う機能(Direct Communication)が含まれています.
この機能により,事前のハンドシェイクなしに最初から MessagePack でのやり取りを行うことができます.
(実装としては,メッセージの種類(テキスト,バイナリ)を判別し,それぞれ C# ネイティブのデータ構造に変換することで実現しています.)
ただし,Direct Communication はオプションで,あなたの実装では必ずしも実装する必要はありません.