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 - ประกอบด้วยอาร์เรย์วัตถุของ BlendshapeDataHead , LeftEye , RightEye ซึ่งทั้งหมดเป็น Object ของ IFMTransformName ที่เป็นสตริง โดยใช้ค่า 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