00:00 / 00:00

Persona

追蹤

Persona 接收手機應用程式透過區域網路傳送的 ARKit 臉部追蹤資料,逐影格將資料映射到 Live2D 模型的參數,或 VRM 虛擬形象 的表情與骨骼

手機須符合所選追蹤應用程式的裝置需求,並與電腦連接同一網路

也可以直接用電腦上的 攝影機 追蹤臉部、手部與身體,或用 麥克風 驅動口型

Persona 支援同時接收多路追蹤資料。每一路都是獨立的追蹤來源,可指派給場景中的不同形象。多人可各用一台手機,透過同一區域網路或 VPN 連接同一台電腦

追蹤來源

追蹤位於 控制面板 左側,不受目前選取項目影響。來源設定屬於應用程式,切換場景後仍會保留。頁面由上而下依序是臉部追蹤姿勢追蹤本機 IP 位址卡片、攝影機追蹤口型同步控制器,其中臉部追蹤姿勢追蹤各有總開關、彙總狀態及來源清單。每個來源是一張卡片,顯示應用程式圖示、來源名稱、即時狀態與開關。新安裝時,臉部追蹤預設有一個 VTube Studio App (3rd Party UDP) 來源,姿勢追蹤則有一個 VMC Protocol 來源

點開一張卡片會展開它的編輯器:

欄位作用
類型來源使用的協定,唯讀;重新命名後仍可在此確認
名稱你給它取的名字。留空就顯示協定自己的名字
追蹤器 IP臉部追蹤來源專用。填上就只收這一個追蹤器的資料;留空是任意追蹤器
連接埠iFacialMocap、VMC 與 mocopi 來源專用。這個來源接收資料的連接埠。和另一個來源撞號會被拒絕,欄位退回原值——只有幾個 iFacialMocap 來源之間可以共用一個連接埠
虛擬形象這個來源驅動哪幾個形象

來源卡片旁的新增臉部來源…和新增姿勢來源…卡片可新增此通道支援的協定,編輯器底部的移除來源把它刪掉

啟用臉部追蹤啟用姿勢追蹤分別控制各自通道的網路來源,旁邊顯示彙總狀態;攝影機有自己的開關。姿勢追蹤接收 VMC 與 mocopi 來源,僅支援 VRM;場景中沒有 VRM 時,會顯示提示。兩個區塊下方的本機 IP 位址可填入手機應用程式的目標位址欄位

把形象指派給來源

指派虛擬形象打開一個多選框,勾選這個來源要驅動的形象,全選一次全勾上。列數只統計這個來源所屬通道能驅動的形象——姿勢來源只會列出 VRM

攝影機來源的卡片上則是臉部身體手部三個按鈕,每個通道一個,見 攝影機追蹤

每個形象在同一通道上只能指派給一個來源。已指派的形象會標示由〈某某〉追蹤。勾選後會開啟重新分配追蹤對話框,列出受影響的形象,確認後才會變更指派

一個來源可同時驅動多個形象,將相同的資料套用到每個已指派的形象。例如,一台手機可以讓兩個形象同步做出表情

每個形象自己的詳細資訊裡也有一個追蹤區塊,放的是逐一形象的設定:控制器移動麥克風口型同步,後者決定麥克風何時驅動這個形象的嘴,見 口型同步。指派哪個來源則在來源卡片上完成

總開關與來源開關

一列的狀態受兩件事影響:這個來源自己的開關,以及它所屬通道的總開關(啟用臉部追蹤啟用姿勢追蹤)。任何一個是關的,這一列就顯示 off。兩個都開著,它才顯示自己的即時狀態

這樣你既可以暫時停掉某一個來源,也可以一下把整條通道關掉,而不用去逐個改

支援的協定

各協定的設定步驟與傳輸方式,請參閱以下頁面:

同一種協定要跑多路時,靠的是追蹤器 IP:給每個來源填上對應那台手機的位址,資料就各歸各的。留空的來源接住的是所有沒被同類來源認領過的傳送方,所以兩台手機各驅動一個形象,就給它們各配一個填了 IP 的來源

各來源提供的資料

三種臉部追蹤協定都會傳送完整的 52 個原始 ARKit blendshape,以及頭部旋轉與位置,也都支援 VRM perfect sync。輸入推導、眨眼鎖存與睜眼校正由 Persona 處理。以下比較各協定的連線方式、傳輸格式與精度:

3rd Party UDPiFacialMocap / Facemotion3dLAPLACE Persona Tracker
連線流程Persona 廣播請求,手機透過 UDP 回傳資料Persona 傳送連線請求,應用程式開始串流在手機上列出有回應的電腦,供使用者選擇
設定方式在手機上開啟第三方串流若應用程式要求目標位址,填入電腦的區域網路 IP點選 Connect 並選擇電腦;廣播受阻時可手動輸入 IP 位址
連接埠請求傳至 21412,資料回傳至臨時連接埠4998349700,收發共用
權重精度JSON 浮點數量化為 0–100 的整數,間隔為 1%Float32
傳輸格式JSON,每影格約 2.6 KB,依名稱解析各欄位文字,每影格約 950 位元組,逐段解析二進位,每影格 248 位元組,52 個權重依固定長度與順序排列
影格順序處理無序號,較舊的影格可能覆蓋較新的追蹤資料無序號,較舊的影格可能覆蓋較新的追蹤資料透過序號辨識並捨棄較舊的影格
協定開發者VTube StudioiFacialMocapLAPLACE,同時開發追蹤應用程式、桌面應用程式與協定

增益較高時,整數量化的影響可能更明顯。例如,Persona 將嘴角下垂的訊號放大 5 倍後,1% 的量化間隔可能造成可見的表情跳動。

LAPLACE Persona Tracker 也提供一鍵校正,結果會在應用程式重新啟動後保留。省電模式可調暗螢幕,預覽則僅顯示臉部線框,不顯示相機畫面。詳見 LAPLACE Persona Tracker

除了推導後的輸入,這 52 個原始數值也會各自以 ARKit* 輸入提供給 參數繫結,讓 Live2D 模型直接使用手機回報的原始 ARKit 數值。

攝影機 的臉部追蹤從攝影機畫面算出同樣的頭部姿態與 blendshape,只是沒有 tongueOut

狀態

每個來源那一列,以及追蹤總開關下方那行字,都會告訴你實際發生了什麼:

狀態含義
off這個來源或它所屬的通道被關掉了
waiting…已開啟,但超過 1.5 秒沒有收到資料
tracking正在接收帶有人臉的影格
no face收得到影格,但手機看不到人臉

每列顯示該來源的狀態,總開關下方則顯示整個通道的彙總狀態。檢查個別來源可確認是哪台手機中斷連線;彙總狀態可確認通道是否仍在接收資料

攝影機來源使用同樣的狀態,但只要任一開啟的任務偵測到臉部、手或身體就顯示 tracking,見 攝影機追蹤臉部追蹤姿勢追蹤的彙總狀態只統計網路來源

追蹤資料如何抵達模型

追蹤資料在套用到參數之前要經過三個階段:

  1. 接收——收到資料的那個來源把自己的協定解析成一個中立的資料影格:頭部旋轉、頭部位置與 ARKit blendshape。接下來的兩步,對指派給這個來源的每一個形象各走一遍
  2. 推導——這一影格被轉換成 VTube Studio 的輸入詞彙,也就是模型作者平時打交道的那套訊號名稱:FaceAngleXEyeOpenLeftMouthSmileBrows 等等。那 52 個原始 ARKit 通道則原樣透傳,各自作為一個 ARKit* 輸入並列在旁邊——不鎖存、不校準、不加增益
  3. 映射——每條 參數繫結 把一個或幾個輸入按權重相加,再依序經過輸入範圍、輸出範圍、回應曲線與逐參數的平滑,最後寫到某個 Cubism 參數上

頭部旋轉、頭部傾斜、睜眼與眨眼、視線、眉毛、鼓腮、張嘴、口型以及微笑或撇嘴都會被驅動。模型沒有的參數直接跳過,而某一影格沒帶上的參數會被釋放,而不是凍結在上一次的值上

自帶映射的模型

如果模型自帶 .vtube.json,Persona 就用這個模型自己的映射——它的參數配對、它的範圍、它的增益與它的平滑——而不是內建的預設值。作者刻意把雙眼對調、把睜眼範圍加倍或者改了參數名稱的模型,在 Persona 裡的表現和在 VTube Studio 裡完全一致

沒有 .vtube.json 的模型走內建映射,這套映射是對著真實的 ARKit 錄製資料調出來的

VBridger 參數

VBridger 不是一張參數表,而是一個由使用者自己寫公式的引擎:每個輸出名稱下面掛著一到三條關於那 52 個 ARKit 形狀的運算式。它所謂的「標準」其實是隨它一起發布的預設 VBridger_AdvancedARKit_V3.0,裡面 MouthPuckerMouthFunnelMouthShrugMouthPressLipOpen 與六個 Body* 都不在 VTube Studio 自帶的輸入表裡——在 VTS 那邊它們只能由外掛建立,而建立它們的正是 VBridger

所以 Persona 不把這些名稱當成輸入。它們在從 .vtube.json 匯入繫結 時展開成 VBridger 自己算它們用的那個加權和,公式取自其預設集。MouthPucker(mouthDimple_R + mouthDimple_L) × 2 − mouthPucker,撮口是負的;六個 Body* 與對應的 FaceAngle*/FacePosition* 是同一條式子。展開之後它們就是普通的加權輸入,可在編輯器中調整

MouthOpenJawOpen 是分開的兩個輸入:前者是嘴唇張開的程度,後者是下顎張開的幅度——正好對應 VBridger 模型上的 ParamMouthOpenYParamJawOpenJawOpenARKitJawOpen 逐字的複製,所以兩個名稱讀到的是同一個數,繫結可使用任一名稱

模型位置移動

身體前傾或後仰移動的是整個模型,而不是某個綁定參數:它跟著你頭部的水平與垂直位置平移,並隨你靠近或遠離而縮放。這與 VTube Studio 的內建行為一致,包括它預設的幅度與平滑,並透過 .vtube.json 裡的 ModelPositionMovement 區段逐模型設定

VRM 虛擬形象

同樣這幾個臉部追蹤來源也能驅動 VRM 虛擬形象,只有最後一步不同,因為 VRM 沒有 Cubism 參數

全部 52 個 ARKit blendshape 都做成表情的模型——也就是 perfect sync——會完全跳過推導出的詞彙,直接被手機的原始 ARKit 數值一比一驅動,保留手機回報的原始權重。名稱比對不分大小寫,因為 perfect sync 模型的大小寫寫法五花八門。只涵蓋一部分是不夠的:52 個裡只有 51 個的模型會退回到下面這套映射,資訊區塊完美同步那一列會回報這個數量

沒有 perfect sync 時,推導出的訊號會映射到模型的預設表情上:

  • 嘴部——張嘴、撮口、噘嘴與微笑組合成 VRM 的口型表情(aaihouoh),各個形狀互相約束,避免口型互相衝突
  • 眼睛——模型分左右眨眼就用分左右的,沒有就用合併的眨眼表情
  • 頭部——偏航、俯仰與翻滾,其中一部分會分攤到胸部與脊椎上,讓整個上半身自然地跟著轉頭
  • 視線——透過模型自帶的 look-at 控制眼睛朝向,無論它是骨骼驅動還是表情驅動

與待機動畫切換

追蹤啟用時優先控制形象,暫停待機的自動眨眼。關閉追蹤後,形象恢復待機行為

追蹤資料中斷時的行為由每個形象待機區塊裡的追蹤遺失時決定:預設的保持最後姿勢凍在最後收到的那一幀上,回到待機則過渡到待機動畫。兩種情況下眼部控制都會釋放,恢復自動眨眼,直到資料流恢復。Live2D 還能指定一個頂替用的動作,見 追蹤遺失時

無需校準

這裡沒有中性姿態校準,和 VTube Studio 走 ARKit 這條路時的做法一致:它信任手機回報的絕對頭部姿態。把手機正對著你、架在大致與視線齊平的高度——架得太低會被讀成下巴一直抬著

這是針對手機來源;攝影機 則在 Persona 裡校正

攝影機追蹤

攝影機追蹤用電腦上的攝影機完成臉部、手部與身體追蹤,由獨立的啟用攝影機追蹤開關控制。每個形象的臉部、身體與手部可以分別來自不同的來源,所以攝影機可以在手機與動作追蹤套件之外補上手指。詳見 攝影機追蹤

口型同步

口型同步用麥克風驅動形象的嘴,每支麥克風可以單獨校正聲音。每個形象的麥克風口型同步可選關閉一律臉部追蹤無法使用時。詳見 口型同步

控制器

追蹤頁底部的控制器區塊支援 Live2D 與 VRM 的 參數綁定、逐實例的舞台移動,以及 自動化虛擬形象快速鍵 的組合鍵。控制器不使用追蹤來源或形象指派,也不支援控制相機

連接控制器

開啟啟用控制器,然後接上控制器。DualSense 與 DualSense Edge 走 WebHID,不用切到視窗、也不用先按一下鍵就能被認出來,重新啟動應用程式之後依然如此。其他控制器走瀏覽器的 Gamepad API:點一下舞台、按一下控制器上的鍵,它才會出現

已連接的控制器顯示目前連線的裝置數量,包括尚未指派的裝置。已連接的設定檔排在前面,其餘保留在摺疊的已儲存的設定檔中。選取卡片只會切換即時監看的對象,不會修改綁定

控制項作用
名稱給這個設定檔取個認得出的名字,比如「一號機」。Enter 或移開焦點即儲存,清空就退回編號
搖桿死區屬於目前選取的設定檔,兩根搖桿共用,預設 15%;可依每支控制器的漂移情況調整
指派控制器選取一個已儲存的設定檔,點它,然後按一下那支控制器上的鍵,就把這支實體控制器接到這份設定檔上
移除設定檔展開已儲存的設定檔才有。先中斷對應的控制器。綁定與快速鍵會留下,但那個編號不會再發給新裝置

應用程式設定會儲存設定檔編號、裝置回報的產品名與硬體識別碼的雜湊值,不儲存識別碼原文。具有硬體識別碼的裝置即使型號相同,更換連接順序或線材後仍能保留各自的綁定。中斷控制器只會釋放輸入,不會刪除設定檔或綁定

Xbox、其他 PlayStation 與 Switch Pro 控制器走 Chromium 的 standard 配置,認的是按鍵的實體位置而不是它上面印的字母。認不出來的瀏覽器配置會被標為不支援。陀螺儀、觸控板、自訂重新對應,以及把多支控制器合併成一支,都不在這一版裡

控制器驅動參數

模型的參數編輯器裡,每一份已儲存或已被綁定過的設定檔各有一組輸入,每組 19 個控制項:兩根搖桿、搖桿按下、十字鍵、四個面鍵、肩鍵、扳機、options 與 home。搖桿和十字鍵的範圍是 −1 到 1,Y 軸向上為正;按鍵和扳機是 0 到 1。每條綁定各自挑用哪一組的輸入,所以不同控制器可以分別驅動不同的參數、不同的形象

一號設定檔沿用 VTS 的名字,比如 ControllerStickLeftXControllerCross,原有的映射照常能用。二號往後在 Controller 後面插入編號:Controller2StickLeftXController3CrossController12TriggerRight——這幾個編號名是 Persona 自己的擴充,外掛 API 的輸入目標用的是同一套名字

控制器輸入套用於每個已載入模型自己的規則,與臉部追蹤的開關和來源指派無關。它和臉部輸入一起在範圍、曲線、平滑這幾步之前完成加權求和——資料流中斷期間,臉部輸入保持在最後的值上,控制器輸入照常回應。編輯器裡手動拖動某個輸入時,手動值優先於對應的實體輸入。控制器綁定統一走一條與影格率無關的指數回應:平滑為 0 是立即跟隨,100 的時間常數是 350 毫秒

拔掉一支控制器只釋放它那一組;關掉啟用控制器釋放全部。之後沒有任何來源在驅動的 Live2D 輸出會回到 Cubism 的預設值

VRM 上的控制器目標

同一個參數編輯器給 VRM 虛擬形象 產生了另一批目標。它們是虛擬的綁定目標,不是從 Cubism 匯入的參數:

目標範圍含義
HeadYawHeadPitchHeadRoll−30°–30°疊在正規化頭部骨骼上的偏移
BodyYawBodyPitchBodyRoll−15°–15°攤到可用的脊椎與胸部骨骼上的偏移
GazeYawGazePitch−90°–90°疊在目前視線角度上的偏移
Expression:<名稱>0–1模型自帶的預設或自訂表情的權重

角度沿用臉部輸入的慣例,VRM 0.x 與 1.0 之間俯仰、翻滾的差異由算繪器處理;表情名按模型裡寫的原樣比對。骨骼與視線疊在目前的動畫、姿態追蹤和臉部追蹤之上,表情綁定只佔它指到的那個權重。每一影格末尾驅動器會把底下那層的狀態還原回去,所以偏移不會越積越大,手動調好的表情權重也不會被抹掉。放開輸入或刪掉規則,對應目標會緩動回底下那層目前的姿態或表情,其他控制器和追蹤來源控制的目標不受影響

綁定屬於模型,存在它既有的追蹤 sidecar 裡,所以同一個模型的多個實例共用這些規則。要讓同一個模型的兩份拷貝各自獨立地動,用下面的逐實例移動設定

舞台移動

形象自己的追蹤區塊裡,開啟控制器移動並選一份已儲存的設定檔。總開關啟用控制器也得是開著的。移動是選用的,預設關閉——參數綁定和快速鍵不依賴它

控制項Live2DVRM
左搖桿 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、120 fps 走得一樣快。搖桿回中會緩動著停在新的位置上。拔掉、關掉或重新指派控制器會立刻清掉它的速度,重連不會接著之前的慣性走。隱藏的形象不會動。直接拖動擺放、位移過渡(自動化的模型位置操作或外掛發起的移動),以及正在輸入文字、錄製快速鍵、指派控制器時,都會暫停移動

移動會更新實例的位置,並隨場景儲存

移動時行走

VRM 獨有。開啟移動時行走並從動畫素材庫裡選一個步行動畫——開關可以先開啟,選好片段之前它不生效。匯入的 VRMA、Mixamo FBX 與 MMD VMD 與待機片段用的是同一批已註冊素材

形象在地面上移動時片段循環播放,停下來就融回它平常的待機。步態速度是這個片段在播放速度 1 時對應的名義速度(公尺每秒),實際播放速度按測到的地面速度除以它、再除以形象的縮放——所以改移動速度或者換個大小的模型,步頻會跟著調整。髖部的 X/Z 位移會被去掉,擺放仍以場景為準,上下起伏保留。行走這一層不帶頭部、視線和表情的軌道,控制器與臉部的姿態因此不受影響。一次性動畫優先級更高,身體追蹤(VMC、mocopi 或攝影機)佔著髖部或腿部時行走會被抑制,只驅動手部的 VMC 可以和它並存

朝向移動方向讓形象按旋轉速度轉向行進方向,與有沒有選步行動畫無關;右搖桿的轉身優先。行走看的是平面上的實際位移,包含緩停那一段,只有高度變化不算。這是疊在直接移動之上的動畫,沒有尋路、碰撞或地形貼合

控制器快速鍵

快速鍵錄製器——無論用於自動化的鍵盤或控制器觸發條件,還是 虛擬形象快速鍵——接受同一支控制器上最多三個控制項,搖桿與十字鍵的方向、扳機都算。錄下來的鍵帶著它所屬的設定檔,所以一號機和二號機上的同一個鍵可以跑不同的操作;錄製時按在別的控制器上的鍵不會被算進這一組。按下的那一瞬間觸發一次,按住不放不會重複。背景生效對控制器快速鍵同樣有效,而且不需要額外帶一個鍵盤修飾鍵——正在錄製或正在輸入文字時不會觸發,期間按下的控制項會被忽略;移開焦點或關閉錄製器後,仍按住的控制項也不會觸發快速鍵

一號控制器的組合沿用 VTS 那套 Controller* 名字,二號往後用帶編號的 Persona 名字。它們不註冊進作業系統的全域快速鍵,也不支援鍵盤與控制器混按、或者跨控制器混按。組合鍵相同時,自動化優先於虛擬形象快速鍵

.persona.json 用它平常的觸發字串存下所有設定檔。模型用的是 .vtube.json 時,帶編號的控制器快速鍵存在這條快速鍵的 PersonaControllerTriggers 擴充欄位裡,同時把 VTS 原生的觸發槽清空,免得 VTS 讀到不認識的列舉名。Persona 優先讀這個擴充;改成鍵盤或一號控制器的快速鍵、或者清空它,擴充就沒了

疑難排解

狀態一直停在「waiting…」

  • 確認手機和電腦在同一個網路下,並且這個網路不會阻擋裝置之間的通訊——訪客 Wi-Fi 與公共 Wi-Fi 通常會擋
  • 檢查防火牆是否允許 Persona 接收傳入的 UDP
  • 中斷所有 VPN。VPN 可能攔截廣播流量。Persona 會在每張實體網路卡上傳送子網路定向廣播,但部分 VPN 設定仍可能阻擋它們

如果廣播無法送達手機,可在啟動 Persona 前透過環境變數指定手機位址:

變數作用
PERSONA_VTS_PHONE_IP在常規廣播之外,把這個位址當成額外目標加給 VTube Studio 來源
PERSONA_IFM_PHONE_IP對 iFacialMocap / Facemotion3d 完全取代廣播探索,因此不再發出任何廣播流量

模型會動,但回應的部位不對

檢查模型是否附有 .vtube.json。Persona 會使用其中的映射。可在 VTube Studio 中載入同一個模型,比較相關參數的表現

某些參數從來不動

展開選取模型的資訊,看一眼參數數量。使用非標準參數名稱的模型,以及沿用 Cubism 2 命名慣例的舊模型,會讓某些輸入根本找不到可驅動的參數

什麼都沒反應,狀態卻是「tracking」

展開該來源並檢查虛擬形象清單。收到資料後,仍需將形象指派給此來源才能驅動它。每個形象在同一通道上只能指派給一個來源,也請確認它是否已指派給其他來源

兩台手機,動的卻是同一個形象

兩個來源的追蹤器 IP 都留空時,資料可能由任一尚未配對裝置的來源接收。請為每個來源填入對應手機的位址,確保資料傳送給正確的形象

最後更新於 2026年9月19日

Tech otakus destroy the world