概要
VRChat では、同じワールドでもインスタンスが異なるとプレイヤー同士の動きや Udon の同期変数は共有されません。World Sync は、配信元のインスタンスの状態を 映像(データを画像エンコードしたフレーム) として送り出し、受信側のインスタンスで動画プレイヤーから読み取って復元することで、複数のインスタンスで同じコンテンツを体験できるようにするためのVRChat用Unityアセット、およびアプリケーションを含めて、システム全般です。
リアルタイムでインスタンスを同期するだけでなく、エンコードした映像を記録して編集したり、プラットフォームを超えて同期を行ったり、後からアーカイブ公開して追体験を行えるようにしたりなど、応用して活用することもできます。
できること
| 機能 | 内容 | 主なコンポーネント |
|---|---|---|
| ボーン同期 | Hips の位置と、体 22 本・指 30 本の合計 52 本のボーン回転を同期します | PlayerBoneSync |
| ワールド変数同期 | bool / int / float / Vector / Quaternion / Color / int[] などの Udon 変数を同期します | WorldSyncBehaviour と [WorldSynced] |
| 表情同期 | Viseme・ジェスチャー・フェイストラッキング値・任意の Animator パラメータを同期します | ExpressionActorDecoder と World Sync Companion |
| アバター割り当て | ワールド内のアバター(人形)と演者の対応をスロット単位で切り替えます | WorldSyncAvatarManager |
できないこと・制約
- VRChat の Playable Layers をワールドから直接読むことはできません(Bake 済みのパラメータとコントローラーで再現します)
/tracking/eye/*や/tracking/trackers/*などの OSC トラッキング生データは直接取り込みません(アバターパラメータに落ちている値は同期できます)- リアルタイム同期は、映像配信の経路を通るため、ストリーム方法により数百ミリ秒〜数秒の遅延が発生します
- 受信側のワールドで動画プレイヤーが再生できる環境が必要です
- アバターを動かすためには、アバターのデータをワールドに組み込んでアップロードする必要があります
パッケージ構成
| パッケージ | 用途 |
|---|---|
tech.uslog.world-sync.core | SDK に依存しない共通データモデルとライセンス確認 |
tech.uslog.world-sync.worlds | ワールド側の Udon コンポーネント・Editor ツール・Shader |
tech.uslog.world-sync.avatars | アバター側の Descriptor と Companion Manifest Baker |
tech.uslog.world-sync.standalone | VRChat 以外の Unity アプリで受信するためのパッケージ |
このほかに、表情データを送受信するデスクトップアプリ World Sync Companion があります。