Live Studio Virgo Extension
jp.lilium.livestudio.virgo の変更履歴です。
[0.25.1] - 2026-07-20
Added
THIRD_PARTY_NOTICES.mdに、Tools~/VirgoMotionFusion/配下に同梱しているサードパーティコンポーネント(MediaPipe とそのモデル、MediaPipe Unity Plugin、Protocol Buffers、UniVRM、Newtonsoft.Json、Bouncy Castle、Final IK、および Unity パッケージ群)を記載しました。これまで本パッケージは、これらを帰属表示なしで同梱していました。
Changed
FusionAppが、ウィンドウの表示設定を常に明示的に渡すようになりました(-hidewindowまたは新しい-showwindow)。フュージョンは既定でウィンドウを出さず(タスクトレイのみ)起動するため、fusionHideWindow: falseを指定しただけでは、結局は自分でウィンドウを隠すフュージョンが起動してしまっていました。
Removed
- 同梱のフュージョンビルドから、6 つの AR Foundation Remote アセンブリと
MCPForUnity.Runtime.dllを同梱しないようにしました。どちらもエディタ専用の開発ツールで、Player ビルドが参照することはありません。AR Foundation Remote は有償の Asset Store アセットで、公開配布される本パッケージ内に同梱されるべきものではありませんでした。ビルドスクリプトがManaged/とScriptingAssemblies.jsonから除去します。
[0.25.0] - 2026-07-17
Added
VirgoMotionSource.ResyncTiming: フレームバッファとフレームオフセットをクリアし、次のUpdateで送信側の採番に再ロックする公開関数です。送信側(Fusion)と受信側(Studio)はそれぞれ自分の壁時計でフレームを採番するため、両者をフレームオフセットで橋渡ししています。長時間のストールやクロックの飛びからの復帰にも使えます。
Changed
- Fusion が、キャプチャーシーンを組み込める Player(ウィンドウ)ビルドとして配布されるようになったため、バッチモードだけでは Fusion を識別できなくなりました。
FusionAppは常に-fusion-child/-hidewindowの起動引数を付与し、FusionQuitSignalListenerはそのマーカーで判定します(従来の headless ビルドのためにバッチモードも引き続き受け付けます)。 BuildPostProcessorがToolsをStandaloneWindows64のときだけ同梱するようになり、iOS とキャプチャーのビルドでは出力の隣にToolsがコピーされなくなりました。
Fixed
- Fusion の再起動後にアバターが固まらなくなりました。再起動すると送信側のフレーム採番が小さい値に戻る一方、バッファの
frameCountは増える一方なので、再生が古いフレームにピン留めされていました。VirgoMotionSourceは、受信した採番が大きく巻き戻ったときにフレームバッファをクリアして自動的に再同期します。フレームギャップの警告も、補間の探索範囲より広いギャップに限定されました。 - Studio が、Fusion への
buildavatarPOST を成功するまで再試行するようになりました。Studio より後に起動した Fusion でも、アバターのスケルトンを受け取れます(従来は一度きりの POST が失敗すると、アバターを選び直す必要がありました)。一時的な接続失敗は、エラーではなく警告として 1 回だけログに出るため、Fusion なしで Studio を起動してもコンソールが溢れなくなりました。
[0.24.3] - 2026-07-09
Changed
VirgoMotionSourceの再同期と受信フレームギャップのメッセージを、警告ではなく通常のログにしました。通常のタイミングのゆらぎでも発生するため、格下げしてコンソールの繰り返しのノイズを取り除きます。
Fixed
- ポーズフレームのルートの valid バイトが、body(MediaPipe)と face(ARKit)のトラッキングビットを別々に持つようになりました。これが
jp.lilium.livestudioの非対称なアバター表示ゲートを駆動するため、被写体がキャプチャーの視錐台から外れてもメッシュが点滅しなくなります。
[0.24.2] - 2026-07-05
Changed
VirgoMotionSourceを、ワープ時にキャプチャカメラの基準点にアンカーするようにしました。WarpToではアバターをマークに配置し、ソースのトランスフォームをmark + up * height + forward * distanceに置いて Y 軸に 180° 回転させ(+Z が被写体を向くように)、撮影カメラ(cam0)をそこにピン留めします。実世界のカメラの高さ/距離を設定しておくと、アバターがマーク上に立ちます。ResetCameraもカメラ相対になりました。VirgoMotionSourceの既定の_cameraDistance/_cameraHeightを 0.7m / 1.3m にしました。
Fixed
- 受信したポーズフレームを、ギャップを許容してサンプリングするようにしました。補間バッファが正確なフレーム番号を要求する代わりに近傍のフレームを探索するため、壁時計量子化による周期的な欠落フレームや、時折の UDP 欠落を吸収します。これにより Capture→Fusion→Studio 経路で見られた再現性のあるモーションのスパイク/スタッターが解消されます。
- キャプチャのリセットがヨーを正しくゼロにするようにし、再センタリングで残留した向きが残らないようにしました。
[0.23.5] - 2026-06-22
Added
- Readme インスペクタが、ゲームパッドの背景入力に必要なプロジェクト設定(Player Settings の「Run In Background」と Input System の「Background Behavior = Ignore Focus」)を検証するようになりました。どちらかが無効な場合は警告と、両方を一括で有効化するワンクリックボタンを表示します。これにより、アプリが最前面ウィンドウでない間もビルドでゲームパッド入力が機能し続けます。
[0.23.0] - 2026-06-21
Changed
VirgoMotionSourceが、受信した最も近い 2 つの 60fps フレーム間をUpdate内で補間するようにしました(補間対象が既にバッファされているよう、設定可能な_delaySecondsのリードを設けています)。これにより可変レンダーフレームレートでもアバターが滑らかに進み、フレーム保持時に SpringBone が震えなくなりました。配置の基準として任意のanchorトランスフォームを使えるようになり、ソースを追加読み込みしたセット内に置けます。VRCFTAvatarの表情をExpressionResolver経由でルーティングするようにしました。
Fixed
ResetCameraが、ポーズ駆動のアバタールート(ぶれたポーズスナップショットに引っ張られて毎回わずかに着地点が変わっていた)ではなく、キャプチャーカメラチャンネル(デバイス/ARKit のヨー)を読むようにしました。繰り返しリセットしても安定します。新しい_cameraHeightフィールド(既定 1.5m)が仮想カメラを床に落とさず目線の高さに持ち上げます。
[0.22.0] - 2026-06-14
Added
- ワイヤーフレームの
AnimationFrameDataが、ボーンごとのトラッキング presence 配列(bonePresences、0..1)を持つようになり、HumanoidPoseData.bonePresencesへ橋渡しされます。これにより Studio のアバターが、モーションのポーズと自身のアニメーションをボーン単位でブレンドできます。AnimationSystem.MakeAnimationFrameDataは現状すべてのトラッキング対象ボーンを presence 1(全身トラッキング)で埋めますが、合成側で個々のボーンを下げてアニメーションを流すことができます。
Changed
- ワイヤーフレームの
AnimationFrameDataが、単一カメラではなく 2 つのキャプチャーカメラチャンネル(cameras[2]、各 1 つのCameraData)を持つようになり、worldA / worldB のカメラを個別にアバターパイプラインへ橋渡しします。 - ワイヤーフォーマット変更:
AnimationFrameDataにボーンごとの presence 配列と 2 つ目のキャプチャーカメラチャンネルが加わり、シリアライズサイズが変わりました。Fusion アプリと Studio はフレームを厳密な構造体サイズで検証するため、Studio が再びフレームを受け付けるには Fusion 実行ファイルを再ビルドする必要があります(古い Fusion ビルドは無効サイズとして拒否されます)。
[0.21.2] - 2026-06-11
Changed
FusionAppがシャットダウン時に Fusion プロセスの終了を保証するようにしました。PID で識別する終了シグナルを配信できない場合(起動時の競合や前回実行の孤児プロセス)は、プロセスを残し続ける代わりに強制終了します。Studio は Fusion の終了を待ってブロックしなくなりました。BuildStudioAppが、ビルド出力フォルダと exe 名をプロジェクトフォルダ(VirgoMotionStudio / VirgoMotionStudioVRC)から決めるようにし、専用の VRC ビルドエントリーポイントとプロファイルのパスを廃止しました。バッチモードでは最初のビルドシーンを開き、lilToon が全シェーダーバリアントを再コンパイルするのを避けます。
[0.21.0] - 2026-06-08
Changed
- Fusion プロセスを静的な
FusionAppHostではなくFusionAppコンポーネントがホストするようにし、Fusion のホスティングをシーンごとに設定できるようにしました。
[0.20.11] - 2026-06-03
Added
- Studio 終了時に PID で識別した終了シグナル(
FusionQuitSignalListener)で Fusion をグレースフルに終了させ、ウィンドウなしの Fusion プロセスが強制終了される代わりに状態を保存するようにしました。
Changed
- Studio が Fusion を停止する際に終了を待ってブロックしなくなりました。終了シグナルを送って即座に戻ります。
Fixed
- Readme インスペクターのボタンが、LiveStudioVirgo を変更不可の git/レジストリ依存として取り込んだ場合でもクリックできるようにしました。
[0.20.10] - 2026-06-02
Added
- Fusion 起動前にキャプチャー用 UDP ポートを Windows ファイアウォールで自動的に許可するようにしました(初回のみ UAC プロンプト)。新しい
registerFusionFirewallRule/fusionCapturePortsプロジェクト設定で制御します。 - モーションを受信できないときに復旧するための「Allow Capture Ports through Firewall」ボタンを Readme インスペクターに追加し、オプションパッケージ一覧の上に説明行を追加しました。
Changed
- 「Allow Capture Ports through Firewall」操作が、ルールが既に存在する場合に黙って何もしない代わりに、結果(既に許可済み/追加/失敗)をダイアログで報告するようにしました。
[0.20.9] - 2026-06-02
Added
- ライブの UDP パケット受信状態を示す VirgoMotionSource 受信インジケーターを追加しました。
- Readme インスペクターに Install ボタンを備えたオプションパッケージインストーラーを追加しました。
Fixed
- UDP 受信スレッドのビジーウェイトを
Socket.Pollに置き換え、アイドル時の CPU 使用を削減しました。
[0.19.1] - 2026-05-07
Added
- 初回リリース。親 VirgoMotion リポジトリから
jp.lilium.livestudio.virgoとして取り込みました。jp.lilium.livestudioの上に VirgoMotion 固有のアダプター層(UDPVirgoMotionSource、Fusion RESTFusionRequestSystem、AnimationFrameBridge、Build / Tools メニュー)を提供します。