lib นี้ได้รับการออกแบบมาเพื่อทำให้กระบวนการเพิ่ม iFacialMocap โดย Yasushi Emoto ไปยังโปรเจ็กต์ Unity ได้อย่างง่ายดายด้วยกระบวนการกำหนดค่าที่ง่ายขึ้นผ่าน Unity Inspector
เธรดสำหรับการฟังสำหรับแพ็กเก็ต UDP ซึ่งเมื่อประมวลผลแล้วจะถูกเพิ่มลงในคิว อีกอันมาจาก Queue และแจกจ่ายผ่าน 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
อ้างถึงการโต้ตอบระหว่างออบเจ็กต์ Scene IFMService
, CharacterFaceController
และตัวอย่างอวาตาร์ที่ใช้ในฉาก
แทนที่จะใช้กับแอป iFacialMocap Companion iFacialMocap ควรเชื่อมต่อกับแอปพลิเคชัน Unity โดยตรง
คุณสามารถทำได้โดยเปิดแอป iFacialMocap แล้วกดเกียร์ที่ด้านขวาของหน้าจอ จากที่นี่ คุณสามารถตั้งค่า IP ปลายทางเป็นโฮสต์ที่แอปทำงานบนเครือข่ายท้องถิ่นได้
ตามค่าเริ่มต้นเมื่อเปิดใช้งาน IFMService
จะสำรวจพอร์ต IFM (ค่าเริ่มต้น) 49983
ทุก ๆ 5 วินาทีจนกระทั่งได้รับแพ็กเก็ตครั้งแรก หากได้รับดังกล่าว จะมีแพ็กเก็ตยืนยันการเชื่อมต่อที่ส่งไปยัง iFacialMocap และข้อความยืนยันควรปรากฏบนนั้น
หากเกิดการหมดเวลา แอปจะลองอีกครั้งทุกๆ 5 วินาที และกล่องโต้ตอบการยืนยันปรากฏขึ้นอีกครั้ง
เมื่อ ปิด IFMService การฟังพอร์ตจะถูกปิดใช้งาน
IFM Packet เป็นโครงสร้างออบเจ็กต์ที่แยกวิเคราะห์พร้อมแล้วจากข้อความ UDP
Blendshapes
- ประกอบด้วยอาร์เรย์วัตถุของ BlendshapeData
Head
, LeftEye
, RightEye
ซึ่งทั้งหมดเป็น Object ของ IFMTransform
Name
ที่เป็นสตริง โดยใช้ค่า ARKit Blendshape หมายเหตุ: ชวเลขโปรโตคอล _L
หรือ _R
จะถูกแทนที่ด้วย Left
Right
เฉพาะของ ARKit ตามลำดับเพื่อความสอดคล้องในการตั้งชื่อตลอดทั้งรูปร่างผสมทั้งหมดValue
ที่เป็น int ตั้งแต่ 0 ถึง 100 SetBlendshapeForRenderers(SkinnedMeshRenderer[])
- วนซ้ำผ่าน Renderer ทั้งหมดที่มีให้ และใช้ Blendshape ตามความเหมาะสมPosition
- ตำแหน่ง Vector3 ที่สัมพันธ์กับกล้อง มีชุดนี้ เฉพาะหัวเท่านั้นEulerRotation
- Vector3 องศาการหมุนของวัตถุที่สัมพันธ์กับกล้องคลาสยูทิลิตี้พร้อมตัวช่วยแบบคงที่สำหรับการสร้างต้นแบบหรือการใช้งานที่รวดเร็วยิ่งขึ้น
ApplyBlendshapes(IFMPacket, SkinnedMeshRenderer[])
- ใช้ IFMPacket.Blendshapes
กับ SkinnedMeshRenderers
ทั้งหมดที่มี Blendshapes เหมือนกันGetBlendshapeIndex(SkinnedMeshRenderer, string)
- รัน GetBlendShapeIndex บนสตริง แต่ยังใช้มือสั้น ๆ เพื่อข้ามการค้นหาทั้งหมดหาก mesh ที่ใช้ร่วมกันเป็นโมฆะหรือหาก blendshapecount น้อยกว่า 1มาจากโปรเจ็กต์ตัวอย่างของแอป iFacialMocap Companion