تم تصميم هذا lib لتسهيل عملية إضافة iFacialMocap بواسطة Yasushi Emoto إلى مشروع Unity من خلال عملية تكوين مبسطة من خلال Unity Inspector.
مؤشر ترابط للاستماع إلى حزم 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 Companion، يجب على iFacialMocap الاتصال بتطبيق Unity مباشرة.
يمكنك القيام بذلك عن طريق فتح تطبيق iFacialMocap، والضغط على الترس الموجود على يمين الشاشة. من هنا يمكنك تعيين عنوان IP الوجهة للمضيف حيث يتم تشغيل التطبيق على الشبكة المحلية.
افتراضيًا، عند تمكين IFMService
فإنه سيتم استقصاء منفذ IFM (الافتراضي) 49983
كل 5 ثوانٍ حتى يتم استلام الحزمة أولاً. إذا تم استلام ذلك، فسيتم إرسال حزمة تأكيد الاتصال إلى iFacialMocap، ويجب أن يظهر عليها إشعار التأكيد.
في حالة انتهاء المهلة، سيحاول التطبيق مرة أخرى كل 5 ثوانٍ وسيظهر مربع حوار التأكيد مرة أخرى.
عند إيقاف تشغيل IFMService، يتم تعطيل الاستماع إلى المنفذ.
إن حزمة IFM عبارة عن كائن تم تحليله جاهزًا من رسائل UDP
Blendshapes
- يحتوي على مجموعة كائنات من BlendshapeData
.Head
و LeftEye
و RightEye
وكلها كائنات من IFMTransform
.Name
عبارة عن سلسلة، باستخدام قيم ARKit Blendshape. ملحوظة: يتم استبدال اختصارات البروتوكول _L
أو _R
بـ ARKit المحددة Left
Right
التوالي لتسمية الاتساق في جميع أشكال المزجValue
التي هي int من 0 إلى 100. SetBlendshapeForRenderers(SkinnedMeshRenderer[])
- يتكرر عبر جميع العارضين المقدمين ويطبق شكل المزج حيثما ينطبق ذلكPosition
- موضع Vector3 بالنسبة للكاميرا. الرأس الوحيد لديه هذه المجموعةEulerRotation
- Vector3 درجة دوران أويلر للكائن بالنسبة للكاميرا.فئة فائدة مع مساعدين ثابتين لإنشاء نماذج أولية أو تنفيذها بشكل أسرع
ApplyBlendshapes(IFMPacket, SkinnedMeshRenderer[])
- يطبق IFMPacket.Blendshapes
على كافة SkinnedMeshRenderers
التي لها نفس BlendshapesGetBlendshapeIndex(SkinnedMeshRenderer, string)
- يقوم بتشغيل GetBlendShapeIndex على السلسلة، ولكنه يقوم أيضًا ببعض الأيدي القصيرة لتخطي البحث بالكامل إذا كانت الشبكة المشتركة فارغة أو إذا كان Blendshapecount أقل من 1مصدرها المشروع النموذجي لتطبيق iFacialMocap Companion