Personaは、スマートフォンのアプリがローカルネットワークへ送信するARKitのフェイストラッキングデータを受信します。そのデータを毎フレーム、Live2Dモデルのパラメータ、またはVRMアバターの表情とボーンに適用します
使用するトラッキングアプリの動作要件を満たすスマートフォンを用意し、コンピュータと同じネットワークに接続してください
コンピュータに接続したウェブカメラで顔・手・体をトラッキングしたり、マイクで口を動かしたりすることもできます
複数のトラッキングデータを同時に受信できます。それぞれをトラッキングソースとして登録し、動かすアバターを指定します。複数人が各自のスマートフォンから、ローカルネットワークやVPN経由で1台のコンピュータに接続できます
トラッキングソース
トラッキングはコントロールパネルの左側にあり、選択中の項目にかかわらず表示されます。ソースの設定はアプリに保存され、シーンを切り替えても維持されます。上から順にフェイストラッキング、ポーズトラッキング、ローカルIPアドレスのカード、ウェブカメラトラッキング、リップシンク、コントローラーが並びます。フェイストラッキングとポーズトラッキングの各セクションには、マスタースイッチ、集約状態、ソース一覧があります。各ソースはカードになっていて、アプリのアイコン、名前、現在の状態、スイッチが表示されます。新規インストール時は、フェイス側にVTube Studio App(サードパーティUDP)、ポーズ側にVMCプロトコルが1つずつ登録されています
カードをクリックするとエディタが開きます:
| フィールド | 効果 |
|---|---|
| 種類 | ソースが使用するプロトコル。読み取り専用で、名前を変更したあとも確認できます |
| 名前 | 付けた名前。空欄ならプロトコル自身の名前が表示されます |
| トラッカーIP | 顔ソース専用。指定するとそのトラッカーだけを受け付けます。空欄は任意のトラッカーです |
| ポート | iFacialMocap、VMC、mocopiのソース専用。このソースが受信するポート。他のソースと重複すると拒否され、元の値に戻ります——1つのポートを共有できるのはiFacialMocapのソース同士だけです |
| アバター | このソースが動かすアバター |
各セクションのソースカードの横にあるフェイスソースを追加…とポーズソースを追加…のカードから、そのチャンネルが対応するプロトコルを追加でき、エディタ末尾のソースを削除で削除します
フェイストラッキングを有効化とポーズトラッキングを有効化がそれぞれのセクションの先頭にあり、その隣にチャンネルの集約状態が出ます。この2つが切り替えるのはネットワーク経由のソースで、ウェブカメラには専用のスイッチがあります。ポーズトラッキングはVMCとmocopiのソースを受け付けます。シーンにVRMが1体もなければ、ポーズ側は割り当ての一覧ではなくその旨を表示します——Live2Dには動かすリグがないからです。両セクションの下には、このマシンが応答するローカルIPアドレスのカードがあります。スマートフォンのアプリが送信先を尋ねてきたときに答えるのがこれです
ソースにアバターを割り当てる
アバターを割り当てを開くと複数選択になります。このソースに動かしてほしいアバターにチェックを入れるか、すべて選択でまとめて取ります。数に入るのは、このソースのチャンネルが動かせるアバターだけです——ポーズソースにはVRMしか並びません
ウェブカメラのソースのカードには、代わりにチャンネルごとの顔、体、手の3つのボタンがあります。ウェブカメラトラッキングを参照してください
1体のアバターに割り当てられるソースは、チャンネルごとに1つです。割り当て済みのアバターにはトラッキング元: 〈名前〉と表示されます。チェックを入れるとトラッキングの再割り当てダイアログが開き、対象のアバターを確認してから割り当てを変更できます
1つのソースで複数のアバターを同時に動かすこともできます。割り当てたすべてのアバターに同じデータが適用されるため、1台のスマートフォンで2体の表情を同期できます
アバター自身の詳細にもトラッキングセクションがあり、アバターごとの設定を持ちます。コントローラーで移動と、マイクがいつこのアバターの口を動かすかを選ぶマイクによるリップシンクです(リップシンクを参照)。どのソースで動かすかは、ソースのカードで設定します
全体とソースごとのスイッチ
行の状態は2つに左右されます。ソース自身のスイッチと、そのチャンネルのマスタースイッチ(フェイストラッキングを有効化またはポーズトラッキングを有効化)です。どちらかがオフなら行はoffになり、両方がオンのときだけ自身のライブ状態を表示します
おかげで、1つのソースだけを一時的に止めることも、チャンネルごとまとめて切ることも、ソースを1つずつ触らずにできます
対応プロトコル
各プロトコルの設定手順とデータの送信方式については、以下のページを参照してください。
同じプロトコルのフィードを複数走らせるためにあるのがトラッカーIPです。各ソースにそのスマートフォンのアドレスを指定すれば、フィードは混ざりません。空欄のソースは、同じ種類のどのソースにも指定されていない送信元をすべて拾うので、2台のスマートフォンで2体を動かすなら、IPを入れたソースを2つ用意します
各ソースが提供するデータ
以下の3種類はいずれも、52個すべてのARKitブレンドシェイプの生データと、頭の回転・位置を送信し、VRMのパーフェクトシンクに対応しています。受信したデータからの入力値の算出、まばたきのラッチ処理、目の開きのキャリブレーションはPersona側で行います。プロトコルごとの違いは次のとおりです。
| 3rd Party UDP | iFacialMocap / Facemotion3d | LAPLACE Persona Tracker | |
|---|---|---|---|
| 接続の流れ | Personaが要求をブロードキャストし、スマートフォンがUDPでデータを送信 | Personaが接続要求を送り、アプリがデータの送信を開始 | スマートフォンで接続先を探索し、応答したコンピュータを一覧表示 |
| 設定方法 | スマートフォン側でサードパーティ向けのデータ送信を有効にする | 送信先を求められたらコンピュータのローカルIPを入力 | Connectをタップしてコンピュータを選択。自動検出できない場合はアドレスを直接入力 |
| ポート | 21412へ要求を送り、一時ポートで受信 | 49983 | 49700を送受信で共用 |
| ウェイトの精度 | JSONの浮動小数点数 | 0〜100の整数に量子化(1%刻み) | Float32 |
| データ形式 | JSON、1フレーム約2.6 KB。各値を名前で取得 | テキスト、1フレーム約950バイト。区切り文字で分割して解析 | バイナリ、1フレーム248バイト。52個のブレンドシェイプを固定長・固定順で格納 |
| フレームの順序 | シーケンス番号がなく、古いフレームが新しいデータを上書きする場合がある | シーケンス番号がなく、古いフレームが新しいデータを上書きする場合がある | シーケンス番号で順序を判定し、遅れて届いた古いフレームを破棄 |
| プロトコルの開発元 | VTube Studioの開発元 | iFacialMocapの開発元 | LAPLACE(トラッキングアプリ、デスクトップアプリ、プロトコルを開発) |
量子化の影響は、Personaが値を増幅するチャンネルで目立つ場合があります。たとえば、口角を下げる動きのチャンネルは5倍に増幅されるため、1%刻みの値の変化によって表情の動きが段階的に見えることがあります。
LAPLACE Persona Trackerではワンタップでキャリブレーションでき、結果はアプリの再起動後も保持されます。省電力機能で画面を暗くでき、プレビューにはカメラ映像の代わりに顔のワイヤーフレームを表示します。詳しくはLAPLACE Persona Trackerを参照してください。
52個の生データは、それぞれ独立したARKit*入力としてパラメータの割り当てでも使用できます。Live2Dモデルでは、Personaが算出した入力値に加えて、スマートフォンが取得したブレンドシェイプの値を直接利用できます。
ウェブカメラのフェイストラッキングは、カメラ映像から同じ頭の姿勢とブレンドシェイプを算出します。ただしtongueOutはありません
モデル情報のパーフェクトシンクの行は、モデル自身がいくつのARKitチャンネルをカバーしているかを示すもので、ソースとは無関係です。Live2Dのリグではその割り当てがいくつ読んでいるか、VRMではいくつを表情として持っているかを表します
ステータス
各ソースの行と、トラッキングのマスタースイッチの下の行が、実際に何が起きているかを示します:
| ステータス | 意味 |
|---|---|
| off | このソース、またはそれが属するチャンネルがオフ |
| waiting… | 有効だが、1.5秒以上データが届いていない |
| tracking | 顔が写ったフレームを受信中 |
| no face | フレームは届いているが、スマートフォンが顔を認識できていない |
各行にはそのソースの状態、マスタースイッチの下にはチャンネル全体の状態が表示されます。個別の接続状況は各ソースの行で、チャンネルがデータを受信しているかは集約状態で確認できます
ウェブカメラのソースも同じ値を使いますが、有効なタスクのいずれかが顔・手・体を検出していればtrackingになります。詳しくはウェブカメラトラッキングを参照してください。フェイストラッキングとポーズトラッキングの集約状態は、ネットワーク経由のソースだけを数えます
トラッキングがモデルに届くまで
トラッキングデータはパラメータに適用される前に3つの段階を通ります:
- 受信——データを受け取ったソースが自身のプロトコルを解析し、ニュートラルなフレームにします。頭の回転、頭の位置、ARKitのブレンドシェイプです。以下の2段階は、そのソースに割り当てられたアバターごとに1回ずつ走ります
- 導出——そのフレームがVTube Studioの入力語彙へ変換されます。モデル作者が普段扱うのと同じ信号名——
FaceAngleX、EyeOpenLeft、MouthSmile、Browsなど——です。52個の生のARKitチャンネルはその隣にそのまま並び、それぞれがARKit*入力になります。ラッチもキャリブレーションもゲインもかかりません - マッピング——パラメータの割り当てごとに、1つ以上の入力がそれぞれの重みで合算され、入力範囲・出力範囲・レスポンスカーブ・パラメータごとのスムージングを順に通ってCubismのパラメータへ書き込まれます
頭の回転、頭の傾き、目の開きとまばたき、視線、眉、頬のふくらみ、口の開き、口の形、そして笑みやしかめ面がすべて駆動されます。モデルが持たないパラメータはスキップされ、あるフレームに含まれていなかったパラメータは直前の値で固定されるのではなく解放されます
独自のマッピングを持つモデル
モデルが.vtube.jsonを同梱している場合、Personaは組み込みの既定値ではなくそのモデル自身のマッピングを使います——パラメータの対応づけ、範囲、ゲイン、スムージングのすべてです。作者が意図的に左右の目を入れ替えたり、目の開きの範囲を倍にしたり、パラメータ名を変えたりしたモデルは、PersonaでもVTube Studioとまったく同じように動きます
.vtube.jsonを持たないモデルは、実際のARKitの記録データに対して調整された組み込みのマッピングを使います
VBridgerのパラメータ
VBridgerはパラメータの一覧ではなく、ユーザーが自分で式を書くエンジンです。出力名ごとに、52個のARKitシェイプについての式が1〜3本定義されています。標準的に使われる同梱プリセットはVBridger_AdvancedARKit_V3.0で、そこに並ぶMouthPucker・MouthFunnel・MouthShrug・MouthPressLipOpenと6つのBody*は、VTube Studio自身の入力リストにはありません——あちらではプラグインが作るカスタムパラメータとしてのみ存在し、実際に作っているのがVBridgerです
そのためPersonaはこれらの名前を入力として扱いません。.vtube.jsonから割り当てを読み込むときに、VBridger自身がそれらを計算している重み付きの和へ展開されます。式はこのプリセットに基づいています。MouthPuckerは(mouthDimple_R + mouthDimple_L) × 2 − mouthPuckerで、すぼめる側が負。6つのBody*は対応するFaceAngle*/FacePosition*と同じ式です。展開されたあとはただの重み付き入力なので、エディタ上に並び、自分で書き換えられます
つまりVBridgerで作られたリグも、VBridger本体なしで動きます。省略形で書かれた行——EyeSquintL、MouthDimpleR——も認識します
MouthOpenとJawOpenは別々の入力です。前者は唇がどれだけ開いたか、後者は顎がどれだけ下がったか——VBridgerのリグがParamMouthOpenYとParamJawOpenとして対応付けるのと同じ組み合わせです。JawOpenはARKitJawOpenをそのまま複製したものなので、どちらの名前も同じ値を読み、バインディングではどちらの名前も使用できます
モデルの位置移動
カメラに近づいたり遠ざかったりすると、リグのパラメータではなくモデル全体が動きます。頭の水平・垂直位置に合わせてスライドし、寄り引きに合わせてスケールします。これはVTube Studioの組み込みの挙動と同じで、既定の量やスムージングまで揃えてあります。モデルごとの設定は.vtube.jsonのModelPositionMovementセクションで指定します
VRMアバター
これらのフェイスソースでVRMアバターも動かせます。違うのは最後の段階だけです。VRMにはCubismのパラメータがないからです
52個のARKitブレンドシェイプをすべて表情として持つモデル——つまり パーフェクトシンク ——は導出された語彙を完全に飛ばし、スマートフォンの生のARKit値で1対1に駆動されます。スマートフォンが送信したウェイトをそのまま使用します。パーフェクトシンク対応のモデルは大文字小文字の書き方がまちまちなので、名前の照合は大文字小文字を区別しません。部分的なカバーでは足りません。52個のうち51個しかないモデルは下記のマッピングにフォールバックし、情報ブロックのパーフェクトシンクの行にその個数が表示されます
パーフェクトシンクがない場合、導出された信号はモデルのプリセットへ対応づけられます:
- 口——口の開き、すぼめ、とがらせ、笑みが組み合わさってVRMのリップシンク表情(
aa、ih、ou、oh)になります。各形状は互いを制約し合うので、口の形が互いに干渉しないように調整されます - 目——モデルが左右別のまばたきを持っていればそれを、なければ左右一体のまばたき表情を使います
- 頭——ヨー、ピッチ、ロール。一部は胸と背骨に分配されるので、頭の向きに上半身全体が自然に付いていきます
- 視線——モデル自身のlook-atを通じて目の向きを制御します。ボーン駆動でも表情駆動でも同じです
アイドル動作との切り替え
トラッキングが有効な間は、自動まばたきが一時停止します。トラッキングをオフにすると、通常のアイドル動作に戻ります
トラッキングデータが途切れたときの挙動は、アバターごとにアイドルセクションのトラッキングロス時で決めます。既定の最後のポーズを保持は最後に受信したフレームで静止し、アイドルに戻るはアイドルアニメーションへ移ります。どちらの場合も目の制御は解放され、データの受信が再開するまで自動まばたきが有効になります。Live2Dは代わりに再生するモーションも指定できます——トラッキングロス時を参照してください
キャリブレーション不要
ニュートラル姿勢のキャリブレーションはありません。ARKit経路におけるVTube Studioと同じ考え方で、スマートフォンが報告する絶対的な頭の姿勢を信頼します。スマートフォンは自分の正面、おおよそ目の高さに置いてください——低い位置に立てかけると、常にあごを上げているように読み取られます
これはスマートフォンのソースの話で、ウェブカメラはPersona側でキャリブレーションします
ウェブカメラトラッキング
ウェブカメラトラッキングは、コンピュータに接続したカメラで顔・手・体をトラッキングします。専用のウェブカメラトラッキングを有効化で切り替えます。アバターの顔・体・手はそれぞれ別のソースから受け取れるので、スマートフォンやモーションキャプチャキットに指の動きを足すこともできます。詳しくはウェブカメラトラッキングを参照してください
リップシンク
リップシンクはマイクでアバターの口を動かします。音声の調整はマイクごとに保存されます。各アバターのマイクによるリップシンクで、オフ、常に、フェイストラッキングが利用できないときから選びます。詳しくはリップシンクを参照してください
コントローラー
トラッキングページ下部のコントローラーセクションでは、Live2DとVRMのパラメータバインディング、インスタンスごとのステージ移動、オートメーションとアバターショートカットの組み合わせを設定できます。コントローラーはトラッキングソースやアバターの割り当てを使用せず、カメラ操作にも対応していません
コントローラーを接続する
コントローラーを有効化をオンにして、コントローラーを接続します。DualSenseとDualSense EdgeはWebHID経由なので、ウィンドウをフォーカスしたりボタンを押したりしなくても認識されます。アプリを再起動したあとも同じです。それ以外のコントローラーはブラウザのGamepad API経由なので、ステージをクリックしてボタンを押すまで現れません
接続中のコントローラーはいま動いている機器の数で、まだ何も割り当てていないものも含みます。接続中のプロファイルが先に並び、残りは折りたたまれた保存済みプロファイルに名前とバインディングをそのまま保ったまま入ります。カードを選んでも切り替わるのはライブモニターだけで、バインディングは変わりません
| コントロール | 効果 |
|---|---|
| 名前 | このプロファイルに分かりやすい名前を付けます。Enterかフォーカスを外すと保存され、空にすると番号の表示に戻ります |
| スティックのデッドゾーン | 選択中のプロファイルに属し、2本のスティックに適用されます。既定は15%。コントローラーごとにドリフトの程度に合わせて調整できます |
| コントローラーを割り当て | 保存済みプロファイルを選んでこれを押し、その実機のボタンを押すと、その物理コントローラーがこのプロファイルに結び付きます |
| プロファイルを削除 | 保存済みプロファイルを開くと現れます。先にコントローラーを外してください。バインディングとショートカットは残りますが、その番号が新しい機器に割り当てられることはありません |
プロファイルには、番号、機器が報告する製品名、ハードウェア識別子のハッシュが保存されます。識別子そのものは保存されません。ハードウェア識別子が取得できる機器は、同じ製品でも接続順やケーブルの変更後に区別できます。切断時は入力のみが解放され、プロファイルとバインディングは保持されます
ブラウザのGamepad APIは仕様上シリアル番号を提供しないので、ハードウェア識別が取れないコントローラーの割り当ては今回の接続内でのみ有効で、再接続後にもう一度確認が必要です。Personaは製品名、接続の番号、USBポートを識別に使うことは決してありません
Xbox、その他のPlayStation、Switch ProのコントローラーはChromiumのstandardマッピングを使い、印字された文字ではなくボタンの物理的な位置で認識されます。認識できないブラウザのレイアウトは非対応として一覧に出ます。ジャイロ、タッチパッド、独自のリマップ、複数の機器を1つにまとめる機能は、このバージョンの範囲外です
パラメータを動かす
モデルのパラメータエディタには、保存済みまたはすでにバインドされたプロファイルごとに入力のグループがあり、それぞれ19個のコントロールを持ちます。2本のスティック、スティック押し込み、十字キー、フェイスボタン、ショルダー、トリガー、optionsとhomeです。スティックと十字キーの範囲は−1から1で、Y軸は上が正。ボタンとトリガーは0から1です。バインディングごとにどのグループを読むか選べるので、別々のコントローラーで別々のパラメータや別々のアバターを動かせます
プロファイル#1はVTSの名前をそのまま使うので(ControllerStickLeftX、ControllerCross)、既存のマッピングはそのまま動きます。#2以降はControllerのあとに番号が入ります:Controller2StickLeftX、Controller3Cross、Controller12TriggerRight。この番号付きの名前はPersonaの拡張で、プラグインAPIの入力ターゲットでも同じ名前を使います
コントローラーの入力は、フェイストラッキングのスイッチやソースの割り当てとは無関係に、読み込まれている各モデル自身のルールへ届きます。範囲・カーブ・スムージングの手前で顔の項と一緒に加重合成されます——ドロップアウトの間、保持された顔の入力はそのまま残り、コントローラーの項は反応し続けます。エディタで入力をドラッグしている間は、同じ物理入力よりそちらが優先されます。コントローラーのバインディングはフレームレートに依存しない指数応答を共有し、スムージング0は即座、100は時定数350msです
1つのコントローラーを抜くと解放されるのはそのグループだけで、コントローラーを有効化をオフにすると全部が解放されます。どのソースも動かさなくなったLive2Dの出力はCubismの既定値に戻ります
VRMのターゲット
同じパラメータエディタがVRMアバター向けにもう一組のターゲットを生成します。これらはCubismから読み込んだパラメータではなく、仮想のバインディングターゲットです:
| ターゲット | 範囲 | 意味 |
|---|---|---|
HeadYaw、HeadPitch、HeadRoll | −30°〜30° | 正規化された頭のボーンへのオフセット |
BodyYaw、BodyPitch、BodyRoll | −15°〜15° | 利用できる背骨と胸のボーンに配分されるオフセット |
GazeYaw、GazePitch | −90°〜90° | 現在の視線角度へのオフセット |
Expression:<名前> | 0〜1 | モデルが持つプリセットまたはカスタム表情のウェイト |
角度は既存の顔入力の慣習に従い、VRM 0.xと1.0でのピッチとロールの違いはレンダラーが吸収します。表情名はモデルに書かれた綴りのまま照合されます。ボーンと視線は現在のアニメーション、ポーズトラッキング、フェイストラッキングの上に重なり、表情のバインディングは指定したウェイトだけを占有します。各フレームの終わりにドライバが下の層の状態を復元するので、オフセットが積み上がることも、手で設定した表情のウェイトが消えることもありません。入力を放すかルールを削除すると、そのターゲットは下の層の現在の姿勢や表情へ滑らかに戻り、他のコントローラーやトラッキングはそれぞれの担当を動かし続けます
バインディングはモデルに属し、既存のトラッキングのサイドカーに保存されるので、同じモデルのすべてのインスタンスが共有します。同じモデルの2つのコピーを別々に動かしたいときは、下のインスタンスごとの移動設定を使ってください
公開のパラメータ注入は引き続きLive2D専用で、これらのVRMターゲットはバインディングエディタの中にだけあります
ステージ移動
アバター自身のトラッキングセクションでコントローラーで移動をオンにし、保存済みプロファイルを選びます。マスタースイッチのコントローラーを有効化もオンである必要があります。移動は任意で、既定はオフです——パラメータバインディングとショートカットはこれに依存しません
| コントロール | Live2D | VRM |
|---|---|---|
| 左スティックX | 水平に移動 | ワールドX軸に沿って移動 |
| 左スティックY | 垂直に移動 | ワールドZ軸に沿って移動、上が負のZ |
| 右スティックX | ステージ平面内で回転 | ワールドY軸まわりに向きを変える |
| 右スティックY | スケールを変更 | ワールドYを上げ下げ |
移動速度の単位はLive2Dでは毎秒あたりのステージの高さ、VRMでは毎秒メートルです(既定0.5、範囲0〜10)。Live2Dのスケールの応答とVRMの上下の速さもこれで決まります。回転速度は毎秒の度数(既定90、範囲0〜720)。応答のスムージングは速度の応答時間で単位は秒(既定0.12、範囲0〜0.5)、0なら即座に応答します。Live2Dのスケーリングは現在の大きさに比例し、通常のスケール上限・下限をそのまま守ります
移動は経過時間に対してスムージング後の速度を積分するので、30、60、120fpsのどれでも同じ速さで進みます。スティックをニュートラルに戻すと、新しい位置で滑らかに止まります。抜く、オフにする、割り当て直すと、その速度は即座にクリアされ、再接続で以前の勢いが戻ることはありません。非表示のアバターは動きません。直接の配置操作と位置の補間移動(オートメーションのモデル位置アクションやAPIによるもの)はそのアバターの移動を一時停止し、テキスト編集、ショートカットの記録、コントローラーの割り当ても同じです
移動が変えるのはそのインスタンスの通常の配置で、シーンと一緒に保存されます
移動中に歩く
VRM専用です。移動中に歩くをオンにして、アニメーションのインベントリから歩行アニメーションを選びます——スイッチはクリップを選ぶ前にオンにできますが、選ぶまでは働きません。読み込んだVRMA、Mixamo FBX、MMD VMDのアニメーションは、アイドルのクリップと同じ登録済みアセットを使います
アバターが地面を移動する間クリップがループし、止まると通常のアイドルへブレンドして戻ります。歩行周期の速度は再生速度1のときのクリップの名目速度(毎秒メートル)で、実際の再生は計測した地面の速度をこれとアバターのスケールで割った値に従うので、移動速度やモデルの大きさを変えると歩調も合わせて変わります。配置をシーン側で決めたままにするため腰のX/Z移動は取り除かれ、上下の揺れは残ります。歩行のレイヤーは頭・視線・表情のトラックを含まないので、コントローラーと顔のポーズはそのまま保たれます。ワンショットのアニメーションが優先され、ボディトラッキング(VMC、mocopi、ウェブカメラ)が腰や脚を制御している間は歩行が抑制されます。手のみを制御するVMCとは併用できます
移動方向を向くは、歩行クリップの有無にかかわらず、回転速度でアバターを進行方向へ向けます。右スティックの旋回が優先されます。歩行は滑らかな停止も含めた平面上の実際の移動を見るので、高さの変化だけでは始まりません。これは直接のステージ移動に重ねたアニメーションであり、ナビゲーション、コリジョン、地形への追従はありません
コントローラーのショートカット
ショートカットのレコーダー(オートメーションのキーボードまたはコントローラートリガーとアバターショートカットで共通)は1つのコントローラーから最大3つのコントロールを受け付け、スティックと十字キーの方向、トリガーも含みます。記録されたボタンは所属するプロファイルを持つので、#1と#2の同じボタンで別の操作を走らせられます。別のコントローラーで押されているボタンはその組み合わせから除外されます。押した瞬間に1回発火し、押し続けても繰り返しません。バックグラウンドで動作はキーボードの修飾キーなしでコントローラーのショートカットにも効きます——記録中とテキスト入力中は発火が抑えられ、その押下は消費されるので、フォーカスを外したりレコーダーを閉じたりしても、押しっぱなしのボタンが発火することはありません
コントローラー#1の組み合わせはVTS標準のController*トークンを使い、#2以降は番号付きのPersonaのトークンを使います。OSのグローバルショートカットには登録されず、キーボードとコントローラーの混在も、コントローラーをまたいだ組み合わせも非対応です。同じ組み合わせが重なったときは、オートメーションがアバターショートカットより優先されます
.persona.jsonはすべてのプロファイルを通常のトリガー文字列で保存します。モデルが.vtube.jsonを使う場合、番号付きのコントローラーショートカットはホットキーのPersonaControllerTriggers拡張に入り、VTSが知らない列挙名を受け取らないようにVTSネイティブのトリガー枠は空にされます。Personaはこの拡張を優先して読みます。キーボードか#1のショートカットを割り当てるか、消去すると拡張は取り除かれます
VTS自身はこれらの番号付きショートカットを実行せず、VTSでこのファイルを書き直すと拡張が失われることがあります
トラブルシューティング
ステータスが "waiting…" のまま
- スマートフォンとコンピュータが同じネットワークにいること、そしてそのネットワークが機器同士の通信を遮断しないことを確認してください——ゲストWi-Fiと公衆Wi-Fiはたいてい遮断します
- ファイアウォールがPersonaへのUDP受信を許可しているか確認してください
- VPNはすべて切断してください。VPNのトンネルはブロードキャストのトラフィックを取り込んでしまうことがよくあります。Personaはこれを避けるために、物理インターフェースごとにサブネット宛のブロードキャストを送っていますが、それでも設定によっては遮断されます
ブロードキャストがどうしても通らない場合は、Personaを起動する前に環境変数でスマートフォンのアドレスを直接指定してください:
| 変数 | 効果 |
|---|---|
PERSONA_VTS_PHONE_IP | 通常のブロードキャストに加えて、このアドレスをVTube Studioソースの送信先として追加する |
PERSONA_IFM_PHONE_IP | iFacialMocap / Facemotion3dではブロードキャスト探索を完全に置き換えるので、ブロードキャストは一切送信されなくなる |
モデルは動くが、反応する部位が違う
モデルに.vtube.jsonが含まれているか確認してください。Personaはこのファイルのマッピングを使用します。同じモデルをVTube Studioで読み込み、該当するパラメータの動作を比較できます
一部のパラメータがまったく動かない
選択中のモデルの情報を開いて、パラメータ数を確認してください。標準的でないパラメータ名を使うモデルや、Cubism 2の命名規則を使用する古いリグでは、その入力が動かせるパラメータが存在しないことがあります
何も反応しないのに、ステータスは "tracking"
ソースを開いてアバターの一覧を確認してください。データを受信していても、アバターを割り当てるまでモデルは動きません。1体のアバターに割り当てられるソースはチャンネルごとに1つなので、別のソースに割り当てられていないかも確認してください
スマートフォンが2台あるのに、同じアバターが動く
両方のソースでトラッカーIPが空欄の場合、送信元が未指定のどちらかのソースがデータを受信します。各ソースに対応するスマートフォンのアドレスを入力し、正しいアバターにデータが届くようにしてください
フェイストラッキングとポーズトラッキングのソースには認証がありません。トラッキングが有効な間は、探索のブロードキャストに応答した機器——あるいはVMCポートへ送信してくる機器——なら、ネットワーク上のどれでもアバターを動かせます
最終更新日:2026年9月19日