該程式庫旨在透過 Unity Inspector 簡化配置流程,輕鬆將 Yasushi Emoto 的 iFacialMocap 加入到 Unity 專案中。
用於偵聽 UDP 封包的線程,處理後將其新增至佇列。另一個從佇列中獲取並將它們通過 UnityEvents 分發到主執行緒上。這樣就無需在訊框更新時執行 UDP 偵聽。
將 IFacialMocap 通訊協定實現為更可用的包,無需所需的 IFacialMocap 配套應用程式。
在Unity 2018.4.33f1上開發,在Unity 2020.3.0中測試。
將版本中的Unitypackage匯入到您的專案中。
將IFMService
新增至場景中的空 GameObject,並綁定具有IFMPacket
參數的場景內處理函數。
帶有處理程序的範例腳本將執行以下操作
public class Example : MonoBehaviour
{
public void OnMessage(IFMPacket packet)
{
//.. Do stuff ..
}
}
若要查看 UnityIFMLib 的實際運作範例,請在Example/Scene
中開啟場景RiggedExample
或StaticMeshExample
。請參閱場景物件IFMService
、 CharacterFaceController
和場景中使用的範例頭像之間的互動。
iFacialMocap 應直接連接到 Unity 應用程序,而不是使用 iFacialMocap Companion 應用程式。
您可以透過開啟 iFacialMocap 應用程式並按下螢幕右側的齒輪來執行此操作。從這裡,您可以將目標 IP 設定為本地網路上執行應用程式的主機。
預設情況下,啟用IFMService
後,它將每 5 秒輪詢一次 IFM(預設)連接埠49983
,直到第一次收到資料包。如果收到,則會向 iFacialMocap 發送一個連線確認資料包,並在其上顯示確認通知。
如果發生逾時,應用程式將每 5 秒重試一次,並再次出現確認對話方塊。
當IFMService 關閉時,連接埠偵聽將被停用。
IFM 封包是根據 UDP 訊息建構的已解析對象
Blendshapes
- 包含BlendshapeData
的物件陣列。Head
、 LeftEye
、 RightEye
都是IFMTransform
的物件。Name
是一個字串,使用 ARKit Blendshape 值。注意:協定簡寫_L
或_R
分別替換為 ARKit 特定的Left
Right
以確保所有混合形狀的命名一致性Value
是 0 到 100 之間的整數。 SetBlendshapeForRenderers(SkinnedMeshRenderer[])
- 循環遍歷提供的所有渲染器並在適用的情況下套用混合形狀Position
- Vector3 相對於相機的位置。只有頭有這套EulerRotation
- 物件相對於相機的 Vector3 歐拉度旋轉。具有靜態幫助器的實用程式類,可加快原型設計或實現速度
ApplyBlendshapes(IFMPacket, SkinnedMeshRenderer[])
- 將IFMPacket.Blendshapes
應用於具有相同 Blendshapes 的所有SkinnedMeshRenderers
GetBlendshapeIndex(SkinnedMeshRenderer, string)
- 在字串上執行 GetBlendShapeIndex,但如果共用網格為 null 或 blendshapecount 小於 1,也會執行一些快速操作以跳過整個搜索源自 iFacialMocap Companion 應用程式的範例項目