メインコンテンツまでスキップ

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 ビルドのためにバッチモードも引き続き受け付けます)。
  • BuildPostProcessorToolsStandaloneWindows64 のときだけ同梱するようになり、iOS とキャプチャーのビルドでは出力の隣に Tools がコピーされなくなりました。

Fixed

  • Fusion の再起動後にアバターが固まらなくなりました。再起動すると送信側のフレーム採番が小さい値に戻る一方、バッファの frameCount は増える一方なので、再生が古いフレームにピン留めされていました。VirgoMotionSource は、受信した採番が大きく巻き戻ったときにフレームバッファをクリアして自動的に再同期します。フレームギャップの警告も、補間の探索範囲より広いギャップに限定されました。
  • Studio が、Fusion への buildavatar POST を成功するまで再試行するようになりました。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 固有のアダプター層(UDP VirgoMotionSource、Fusion REST FusionRequestSystemAnimationFrameBridge、Build / Tools メニュー)を提供します。