كيفية استخدام الإضافة
يأخذك هذا الدليل خلال عملية إعداد Runtime MetaHuman Lip Sync لشخصيات MetaHuman الخاصة بك.
ملاحظة: تعمل Runtime MetaHuman Lip Sync مع كل من شخصيات MetaHuman والشخصيات المخصصة. تدعم الإضافة أنواعًا مختلفة من الشخصيات بما في ذلك:
- الشخصيات التجارية الشهيرة (Daz Genesis 8/9, Reallusion CC3/CC4, Mixamo, ReadyPlayerMe، إلخ)
- الشخصيات ذات أشكال المزج القائمة على FACS
- النماذج التي تستخدم معايير أشكال المزج ARKit
- الشخصيات ذات مجموعات الفونيمات Preston Blair
- أنظمة الفونيمات الخاصة بـ 3ds Max
- أي شخصية ذات أهداف تشكيل مخصصة للتعبيرات الوجهية
للحصول على تعليمات مفصلة حول إعداد الشخصيات المخصصة، بما في ذلك مراجع تعيين الفيزيمات لجميع المعايير المذكورة أعلاه، راجع دليل إعداد الشخصيات المخصصة.
المتطلبات الأساسية
قبل البدء، تأكد من:
- تم تمكين إضافة MetaHuman في مشروعك (ملاحظة: بدءًا من UE 5.6، لم تعد هذه الخطوة مطلوبة حيث تم دمج وظائف MetaHuman مباشرة في المحرك)
- لديك شخصية MetaHuman واحدة على الأقل تم تنزيلها ومتاحة في مشروعك
- تم تثبيت إضافة Runtime MetaHuman Lip Sync
إضافة النموذج القياسي الموسعة
إذا كنت تخطط لاستخدام النموذج القياسي (الأسرع)، فستحتاج إلى تثبيت الإضافة الموسعة:
- قم بتنزيل إضافة Lip Sync Extension القياسية من Google Drive
- استخرج المجلد من الأرشيف الذي تم تنزيله إلى مجلد
Plugins
الخاص بمشروعك (قم بإنشاء هذا المجلد إذا لم يكن موجودًا) - تأكد من أن مشروعك تم إعداده كمشروع C++ (حتى إذا لم يكن لديك أي كود C++)
- أعد بناء مشروعك
- هذه الإضافة الموسعة مطلوبة فقط إذا كنت تريد استخدام النموذج القياسي. إذا كنت تحتاج فقط إلى النموذج الواقعي، يمكنك تخطي هذه الخطوة.
- للحصول على مزيد من المعلومات حول كيفية بناء الإضافات يدويًا، راجع برنامج Building Plugins التعليمي
الإضافات الإضافية
- إذا كنت تخطط لاستخدام التقاط الصوت (على سبيل المثال، إدخال الميكروفون)، فقم بتثبيت ملحق Runtime Audio Importer.
- إذا كنت تخطط لاستخدام وظيفة تحويل النص إلى كلام مع ملحقاتي (قد يكون لديك نظام تحويل نص إلى كلام مخصص خاص بك أو إدخال صوتي آخر)، فبالإضافة إلى ملحق Runtime Audio Importer، قم أيضًا بتثبيت:
- لـ تحويل النص إلى كلام محلي، ملحق Runtime Text To Speech.
- لـ مزودي تحويل النص إلى كلام خارجيين (ElevenLabs, OpenAI)، ملحق Runtime AI Chatbot Integrator.
عملية الإعداد
الخطوة 1: تحديد وتعديل مخطط التحريك للوجه
- UE 5.5 والإصدارات السابقة (أو MetaHumans القديمة في UE 5.6+)
- UE 5.6+ MetaHuman Creator Characters
تحتاج إلى تعديل مخطط التحريك الذي سيتم استخدامه لتعبيرات وجه شخصية MetaHuman الخاصة بك. مخطط التحريك الافتراضي لوجه MetaHuman موجود في:
Content/MetaHumans/Common/Face/Face_AnimBP
لديك عدة خيارات لتنفيذ وظيفة مزامنة الشفاه (Lip Sync):
- Edit Default Asset (Simplest Option)
- Create Duplicate
- Use Custom Animation Blueprint
افتح Face_AnimBP
الافتراضي مباشرة وقم بإجراء التعديلات الخاصة بك. أي تغييرات ستؤثر على جميع شخصيات MetaHuman التي تستخدم مخطط الحركة (Animation Blueprint) هذا.
ملاحظة: هذه الطريقة مريحة ولكنها ستؤثر على جميع الشخصيات التي تستخدم مخطط الحركة الافتراضي.
- انسخ
Face_AnimBP
وأعطِه اسمًا وصفيًا - حدد موقع فئة مخطط الشخصية (Blueprint class) الخاصة بشخصيتك (على سبيل المثال، بالنسبة للشخصية "Bryan"، سيكون في
Content/MetaHumans/Bryan/BP_Bryan
) - افتح مخطط الشخصية (Blueprint) وابحث عن مكون الوجه (Face component)
- غيّر خاصية Anim Class إلى مخطط الحركة الجديد الذي قمت بنسخه
ملاحظة: تتيح لك هذه الطريقة تخصيص مزامنة الشفاه لشخصيات محددة مع ترك الشخصيات الأخرى دون تغيير.
يمكنك تنفيذ دمج مزامنة الشفاه في أي مخطط حركة (Animation Blueprint) لديه إمكانية الوصول إلى عظام الوجه المطلوبة:
- أنشئ أو استخدم مخطط حركة مخصص موجود مسبقًا
- تأكد من أن مخطط الحركة الخاص بك يعمل مع هيكل عظمي (skeleton) يحتوي على نفس عظام الوجه الموجودة في
Face_Archetype_Skeleton
الافتراضي لـ MetaHuman (وهو الهيكل العظمي القياسي المستخدم لأي شخصية MetaHuman)
ملاحظة: تمنحك هذه الطريقة أقصى مرونة للتكامل مع أنظمة الرسوم المتحركة المخصصة.
بدءًا من الإصدار UE 5.6، تم تقديم نظام MetaHuman Creator الجديد، الذي ينشئ شخصيات بدون أصل Face_AnimBP
التقليدي. بالنسبة لهذه الشخصيات، يوفر البرنامج المساعد (plugin) مخطط حركة للوجه موجود في:
Content/LipSyncData/LipSync_Face_AnimBP
يوجد هذا الرسم البياني للرسوم المتحركة في مجلد محتوى الإضافة وسيتم الكتابة فوقه مع كل تحديث للإضافة. لمنع فقدان التخصيصات الخاصة بك، يوصى بشدة بـ:
- نسخ هذا الأصل إلى مجلد المحتوى الخاص بمشروعك (على سبيل المثال، إلى
YourProject/Content/MetaHumans/LipSync_Face_AnimBP
) - استخدام النسخة التي نسختها في إعداد شخصيتك
- إجراء جميع التعديلات الخاصة بك على النسخة المنسوخة
هذا يضمن أن تكوينات مزامنة الشفاه الخاصة بك ستبقى عبر تحديثات الإضافة.
استخدام الرسم البياني للرسوم المتحركة للوجه الخاص بالإضافة:
- حدد موقع فئة الرسم البياني لشخصية MetaHuman Creator الخاصة بك
- افتح الرسم البياني للشخصية وابحث عن مكون الوجه
- غيّر خاصية Anim Class إلى
LipSync_Face_AnimBP
الخاص بالإضافة - تابع مع الخطوات من 2 إلى 4 لتكوين وظيفة Runtime MetaHuman Lip Sync
الخيارات البديلة:
- استخدام التعليمات القديمة: لا يزال بإمكانك اتباع تعليمات UE 5.5 أعلاه إذا كنت تعمل مع شخصيات MetaHuman قديمة أو تفضل سير العمل التقليدي
- إنشاء رسم بياني للرسوم المتحركة مخصص: أنشئ رسمًا بيانيًا للرسوم المتحركة خاصًا بك يعمل مع هيكل الهيكل العظمي لـ MetaHuman Creator
ملاحظة: إذا كنت تستخدم UE 5.6+ ولكنك تعمل مع شخصيات MetaHuman قديمة (لم يتم إنشاؤها عبر MetaHuman Creator)، فاستخدم تعليمات علامة التبويب "UE 5.5 والإصدارات السابقة" بدلاً من ذلك.
مهم: يمكن تنفيذ مزج Runtime MetaHuman Lip Sync في أي أصل رسم بياني للرسوم المتحركة لديه إمكانية الوصول إلى وضع يحتوي على عظام الوجه الموجودة في Face_Archetype_Skeleton
الافتراضي لـ MetaHuman. أنت لست مقيدًا بالخيارات أعلاه - هذه مجرد طرق تنفيذ شائعة.
الخطوة 2: إعداد الرسم البياني للأحداث
افتح الرسم البياني للرسوم المتحركة للوجه الخاص بك وانتقل إلى Event Graph
. ستحتاج إلى إنشاء مُنشئ سيعالج بيانات الصوت ويولد رسومًا متحركة لمزامنة الشفاه.
- النموذج القياسي (أسرع)
- النموذج الواقعي (جودة أعلى)
- أضف عقدة
Event Blueprint Begin Play
إذا لم تكن موجودة بالفعل - أضف عقدة
Create Runtime Viseme Generator
ووصّلها بحدث Begin Play - احفظ الناتج كمتغير (على سبيل المثال "VisemeGenerator") لاستخدامه في أجزاء أخرى من الرسم البياني
- أضف عقدة
Event Blueprint Begin Play
إذا لم تكن موجودة بالفعل - أضف عقدة
Create Realistic MetaHuman Lip Sync Generator
ووصّلها بحدث Begin Play - احفظ الناتج كمتغير (على سبيل المثال "RealisticLipSyncGenerator") لاستخدامه في أجزاء أخرى من الرسم البياني
- (اختياري) قم بتكوين إعدادات المُنشئ باستخدام معامل Configuration
- (اختياري) عيّن Processing Chunk Size على كائن Realistic MetaHuman Lip Sync Generator

ملاحظة: تم تحسين النموذج الواقعي خصيصًا لشخصيات MetaHuman وهو غير متوافق مع أنواع الشخصيات المخصصة.
خيارات التهيئة
يقبل عقدة Create Realistic MetaHuman Lip Sync Generator
معامل Configuration اختياريًا يسمح لك بتخصيص سلوك المُولِّد:
نوع النموذج
يحدد إعداد نوع النموذج الإصدار الذي سيتم استخدامه من النموذج الواقعي:
نوع النموذج | الأداء | الجودة البصرية | التعامل مع الضوضاء | حالات الاستخدام الموصى بها |
---|---|---|---|---|
مُحسَّن للغاية (افتراضي) | أعلى أداء، أقل استخدام لوحدة المعالجة المركزية | جودة جيدة | قد يُظهر حركات فم ملحوظة مع ضوضاء الخلفية أو الأصوات غير الصوتية | بيئات الصوت النظيفة، السيناريوهات الحرجة من حيث الأداء |
مُحسَّن | أداء جيد، استخدام معتدل لوحدة المعالجة المركزية | جودة عالية | استقرار أفضل مع الصوت المشوب بالضوضاء | أداء وجودة متوازنان، ظروف صوتية مختلطة |
الأصلي غير المُحسَّن | مناسب للاستخدام في الوقت الفعلي على وحدات المعالجة المركزية الحديثة | أعلى جودة | الأكثر استقرارًا مع ضوضاء الخلفية والأصوات غير الصوتية | الإنتاجات عالية الجودة، بيئات الصوت الصاخبة، عندما تكون هناك حاجة لأقصى قدر من الدقة |
إعدادات الأداء
خيوط العمل الداخلية (Intra Op Threads): تتحكم في عدد الخيوط المستخدمة لعمليات معالجة النموذج الداخلية.
- 0 (افتراضي/تلقائي): يستخدم الكشف التلقائي (عادة 1/4 من نوى وحدة المعالجة المركزية المتاحة، بحد أقصى 4)
- 1-16: حدد عدد الخيوط يدويًا. قد تحسن القيم الأعلى الأداء على الأنظمة متعددة النواة ولكنها تستخدم المزيد من وحدة المعالجة المركزية
خيوط العمل المتوازية (Inter Op Threads): تتحكم في عدد الخيوط المستخدمة للتنفيذ المتوازي لعمليات النموذج المختلفة.
- 0 (افتراضي/تلقائي): يستخدم الكشف التلقائي (عادة 1/8 من نوى وحدة المعالجة المركزية المتاحة، بحد أقصى 2)
- 1-8: حدد عدد الخيوط يدويًا. عادةً ما تظل منخفضة للمعالجة في الوقت الفعلي
استخدام التهيئة
لتهيئة المُولِّد:
- في عقدة
Create Realistic MetaHuman Lip Sync Generator
، قم بتوسيع معامل Configuration - عيّن نوع النموذج إلى الخيار الذي تفضله:
- استخدم مُحسَّن للغاية للحصول على أفضل أداء (موصى به لمعظم المستخدمين)
- استخدم مُحسَّن للحصول على أداء وجودة متوازنين
- استخدم الأصلي غير المُحسَّن فقط عندما تكون الجودة القصوى ضرورية
- اضبط خيوط العمل الداخلية و خيوط العمل المتوازية إذا لزم الأمر (اتركها عند 0 للكشف التلقائي في معظم الحالات) توصيات الأداء:
- بالنسبة لمعظم المشاريع ذات الصوت النظيف، استخدم مُحسّن للغاية للحصول على أفضل أداء
- إذا كنت تعمل مع صوت يحتوي على ضوضاء في الخلفية، أو موسيقى، أو أصوات غير صوتية، ففكر في استخدام النماذج المُحسّنة أو الأصلية غير المُحسّنة لتحقيق استقرار أفضل
- قد يُظهر النموذج المُحسّن للغاية حركات فم خفيفة عند معالجة الصوت غير الصوتي بسبب تقنيات التحسين المُطبقة أثناء إنشاء النموذج
- النموذج الأصلي غير المُحسّن، على الرغم من أنه يتطلب موارد وحدة معالجة مركزية أكثر، لا يزال مناسبًا للتطبيقات في الوقت الفعلي على الأجهزة الحديثة ويوفر النتائج الأكثر دقة في ظروف الصوت الصعبة
- قم بتعديل أعداد الخيوط (threads) فقط إذا كنت تواجه مشاكل في الأداء أو لديك متطلبات تحسين محددة
- الأعداد الأعلى من الخيوط لا تعني دائمًا أداءً أفضل - القيم المثلى تعتمد على أجهزتك المحددة ومتطلبات مشروعك
تكوين حجم جزء المعالجة: يحدد حجم جزء المعالجة عدد العينات التي يتم معالجتها في كل خطوة استدلال. القيمة الافتراضية هي 160 عينة، والتي تتوافق مع 10 مللي ثانية من الصوت بتردد 16 كيلوهرتز (معدل العينة الداخلي للمعالجة). يمكنك ضبط هذه القيمة لتحقيق التوازن بين تردد التحديث واستخدام وحدة المعالجة المركزية:
- القيم الأصغر توفر تحديثات أكثر تواترًا ولكنها تزيد من استخدام وحدة المعالجة المركزية
- القيم الأكبر تقلل من حمل وحدة المعالجة المركزية ولكنها قد تقلل من استجابة مزامنة الشفاه
لتعيين حجم جزء المعالجة:
- الوصول إلى كائن
Realistic MetaHuman Lip Sync Generator
الخاص بك - حدد موقع الخاصية
Processing Chunk Size
- عيّن القيمة التي تريدها
يُوصى باستخدام قيم تكون مضاعفات للرقم 160. هذا يتماشى مع البنية الداخلية للمعالجة في النموذج. القيم الموصى بها تشمل:
160
(افتراضي، الحد الأدنى الموصى به)320
480
640
- إلخ.
حجم جزء المعالجة الافتراضي البالغ 160
عينة يتوافق مع 10 مللي ثانية من الصوت بتردد 16 كيلوهرتز. يساعد استخدام مضاعفات الرقم 160 في الحفاظ على المحاذاة مع هذه الوحدة الأساسية، مما يمكن أن يساعد في تحسين كفاءة المعالجة والحفاظ على سلوك متسق عبر أحجام الأجزاء المختلفة.
لتشغيل موثوق ومتسق مع النموذج الواقعي، مطلوب إعادة إنشاء Realistic MetaHuman Lip Sync Generator في كل مرة تريد فيها تقديم بيانات صوتية جديدة بعد فترة من الخمول. هذا بسبب سلوك وقت تشغيل ONNX الذي يمكن أن يتسبب في توقف مزامنة الشفاه عن العمل عند إعادة استخدام المولدات بعد فترات من الصمت.
مثال سيناريو: إذا قمت بمزامنة شفاه TTS ثم توقفت، وأردت لاحقًا إجراء مزامنة شفاه مرة أخرى بصوت جديد، فقم بإنشاء Realistic MetaHuman Lip Sync Generator جديد بدلاً من إعادة استخدام المولد الحالي.
الخطوة 3: إعداد معالجة إدخال الصوت
تحتاج إلى إعداد طريقة لمعالجة إدخال الصوت. هناك عدة طرق للقيام بذلك اعتمادًا على مصدر الصوت الخاص بك.
- ميكروفون (وقت حقيقي)
- ميكروفون (تشغيل)
- Text-to-Speech (Local)
- Text-to-Speech (External APIs)
- من ملف/مخزن صوتي
- Streaming Audio Buffer
تقوم هذه الطريقة بمزامنة الشفاه في الوقت الحقيقي أثناء التحدث في الميكروفون:
- النموذج القياسي (أسرع)
- النموذج الواقعي (جودة أعلى)
- أنشئ Capturable Sound Wave باستخدام Runtime Audio Importer
- قبل البدء في تسجيل الصوت، قم بالربط مع المفوض
OnPopulateAudioData
- في الدالة المرتبطة، استدعِ
ProcessAudioData
من مُولد الفيسيمات (Runtime Viseme Generator) الخاص بك - ابدأ في تسجيل الصوت من الميكروفون
يستخدم النموذج الواقعي نفس سير عمل معالجة الصوت مثل النموذج القياسي، ولكن باستخدام متغير RealisticLipSyncGenerator
بدلاً من VisemeGenerator
.
في كل مثال موضح للنموذج القياسي، ما عليك سوى استبدال:
VisemeGenerator
بمتغيرRealisticLipSyncGenerator
الخاص بك- أسماء الدوال ومعاملاتها تظل متطابقة بين كلا النموذجين
تقوم هذه الطريقة بتسجيل الصوت من ميكروفون، ثم تشغيله مع مزامنة الشفاه:
- النموذج القياسي (أسرع)
- Realistic (Higher Quality) Model
- أنشئ Capturable Sound Wave باستخدام Runtime Audio Importer
- ابدأ تسجيل الصوت من الميكروفون
- قبل تشغيل Capturable Sound Wave، قم بالربط مع المفوض
OnGeneratePCMData
الخاص به - في الدالة المرتبطة، استدعِ
ProcessAudioData
من مُولد الفيسيمات (Runtime Viseme Generator) الخاص بك
يستخدم النموذج الواقعي نفس سير عمل معالجة الصوت مثل النموذج القياسي، ولكن مع المتغير RealisticLipSyncGenerator
بدلاً من VisemeGenerator
.
في كل مثال من الأمثلة الموضحة للنموذج القياسي، ما عليك سوى استبدال:
VisemeGenerator
بمتغيرRealisticLipSyncGenerator
الخاص بك- أسماء الدوال ومعاملاتها تظل متطابقة بين كلا النموذجين
ملاحظة: إذا كنت تريد معالجة بيانات الصوت في أجزاء أصغر لمزامنة شفاه أكثر استجابة، فاضبط الحساب في دالة SetNumSamplesPerChunk
. على سبيل المثال، قسمة معدل العينات على 150 (بث كل ~6.67 مللي ثانية) بدلاً من 100 (بث كل 10 مللي ثانية) سيوفر تحديثات لمزامنة الشفاه بشكل أكثر تكررًا.
- Regular
- بث
يقوم هذا الأسلوب بتوليف الكلام من النص وإجراء مزامنة الشفاه:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- استخدم Runtime Text To Speech لتوليد الكلام من النص
- استخدم Runtime Audio Importer لاستيراد الصوت المُولَّف
- قبل تشغيل موجة الصوت المستوردة، اربط بمفوض
OnGeneratePCMData
الخاص بها - في الدالة المرتبطة، استدعِ
ProcessAudioData
من مُولِّد Viseme الخاص بـ Runtime
TTS المحلي المقدم بواسطة إضافة Runtime Text To Speech غير مدعوم حاليًا مع النموذج الواقعي بسبب تعارضات وقت تشغيل ONNX. لتحويل النص إلى كلام مع النموذج الواقعي، فكر في استخدام حلول TTS خارجية (مثل OpenAI أو ElevenLabs عبر Runtime AI Chatbot Integrator) أو أي TTS آخر يعمل في عملية منفصلة أو لا يستخدم وقت تشغيل ONNX، أو استخدم النموذج القياسي بدلاً من ذلك.
ملاحظة: إذا كنت تريد معالجة بيانات الصوت في أجزاء أصغر لمزامنة الشفاه الأكثر استجابة، قم بتعديل الحساب في دالة SetNumSamplesPerChunk
. على سبيل المثال، قسمة معدل العينات على 150 (بث كل ~6.67 مللي ثانية) بدلاً من 100 (بث كل 10 مللي ثانية) سيوفر تحديثات أكثر تواترًا لمزامنة الشفاه.
هذا النهج يستخدم توليف الكلام من النص عبر البث مع مزامنة الشفاه في الوقت الفعلي:
- النموذج القياسي (أسرع)
- النموذج الواقعي (جودة أعلى)
- استخدم Runtime Text To Speech لتوليد كلام متدفق من النص
- استخدم Runtime Audio Importer لاستيراد الصوت المُولَّف
- قبل تشغيل موجة الصوت المتدفقة، قم بالربط مع المفوض
OnGeneratePCMData
الخاص بها - في الدالة المرتبطة، استدعِ
ProcessAudioData
من مُولِّد Viseme الخاص بك في وقت التشغيل
الـ TTS المحلي المقدم بواسطة الإضافة Runtime Text To Speech غير مدعوم حاليًا مع النموذج الواقعي بسبب تعارضات وقت تشغيل ONNX. لتوليف الكلام من النص مع النموذج الواقعي، فكر في استخدام خدمات TTS خارجية (مثل OpenAI أو ElevenLabs عبر Runtime AI Chatbot Integrator) أو استخدم النموذج القياسي بدلاً من ذلك.
ملاحظة: إذا كنت تريد معالجة بيانات الصوت في أجزاء أصغر لمزامنة الشفاه الأكثر استجابة، قم بتعديل الحساب في دالة SetNumSamplesPerChunk
. على سبيل المثال، قسمة معدل العينات على 150 (بث كل ~6.67 مللي ثانية) بدلاً من 100 (بث كل 10 مللي ثانية) سيوفر تحديثات أكثر تواترًا لمزامنة الشفاه.
- Regular
- Streaming
يقوم هذا النهج باستخدام ملحق Runtime AI Chatbot Integrator لتوليد كلام مُركّب من خدمات الذكاء الاصطناعي (OpenAI أو ElevenLabs) وتنفيذ مزامنة الشفاه:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- استخدم Runtime AI Chatbot Integrator لتوليد الكلام من النص باستخدام واجهات برمجة التطبيقات الخارجية (OpenAI، ElevenLabs، إلخ.)
- استخدم Runtime Audio Importer لاستيراد بيانات الصوت المُركّب
- قبل تشغيل الموجة الصوتية المستوردة، قم بالربط مع المفوض
OnGeneratePCMData
الخاص بها - في الدالة المرتبطة، استدعِ
ProcessAudioData
من مُولّد Viseme الخاص بك في Runtime
يستخدم النموذج الواقعي نفس سير عمل معالجة الصوت مثل النموذج القياسي، ولكن باستخدام متغير RealisticLipSyncGenerator
بدلاً من VisemeGenerator
.
في كل مثال من الأمثلة الموضحة للنموذج القياسي، ما عليك سوى استبدال:
VisemeGenerator
بمتغيرRealisticLipSyncGenerator
الخاص بك- أسماء الدوال ومعاملاتها تظل متطابقة بين كلا النموذجين
ملاحظة: إذا كنت تريد معالجة بيانات الصوت في أجزاء أصغر لمزامنة شفاه أكثر استجابة، فاضبط الحساب في دالة SetNumSamplesPerChunk
. على سبيل المثال، قسمة معدل العينات على 150 (بث كل ~6.67 مللي ثانية) بدلاً من 100 (بث كل 10 مللي ثانية) سيوفر تحديثات أكثر تواترًا لمزامنة الشفاه.
يستخدم هذا النهج إضافة Runtime AI Chatbot Integrator لتوليد كلام متراكب متدفق من خدمات الذكاء الاصطناعي (مثل OpenAI أو ElevenLabs) وتنفيذ مزامنة الشفاه:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- استخدم Runtime AI Chatbot Integrator للاتصال بواجهات برمجة تطبيقات TTS المتدفقة (مثل ElevenLabs Streaming API)
- استخدم Runtime Audio Importer لاستيراد بيانات الصوت المتراكب
- قبل تشغيل موجة الصوت المتدفقة، اربط بـ delegate الخاص بها
OnGeneratePCMData
- في الدالة المرتبطة، استدعِ
ProcessAudioData
من Runtime Viseme Generator الخاص بك
يستخدم النموذج الواقعي نفس سير عمل معالجة الصوت مثل النموذج القياسي، ولكن مع المتغير RealisticLipSyncGenerator
بدلاً من VisemeGenerator
.
في كل مثال موضح للنموذج القياسي، ما عليك سوى استبدال:
VisemeGenerator
بمتغيرRealisticLipSyncGenerator
الخاص بك- أسماء الدوال ومعاملاتها تظل متطابقة بين كلا النموذجين
ملاحظة: إذا كنت تريد معالجة بيانات الصوت في أجزاء أصغر لمزامنة شفاه أكثر استجابة، فاضبط الحساب في دالة SetNumSamplesPerChunk
. على سبيل المثال، قسمة معدل العينات على 150 (تدفق كل ~6.67 مللي ثانية) بدلاً من 100 (تدفق كل 10 مللي ثانية) سيوفر تحديثات لمزامنة الشفاه بشكل أكثر تكرارًا.
تستخدم هذه الطريقة ملفات صوتية مسجلة مسبقًا أو مخازن صوتية لمزامنة الشفاه:
- النموذج القياسي (أسرع)
- النموذج الواقعي (جودة أعلى)
- استخدم Runtime Audio Importer لاستيراد ملف صوتي من القرص أو الذاكرة
- قبل تشغيل الموجة الصوتية المستوردة، قم بربطها بالموفّر
OnGeneratePCMData
- في الدالة المرتبطة، استدعِ
ProcessAudioData
من مُنشئ وحدات الفونيمات (Viseme) أثناء التشغيل (Runtime Viseme Generator) الخاص بك - شغّل الموجة الصوتية المستوردة ولاحظ حركة الشفاه المتزامنة
يستخدم النموذج الواقعي نفس سير عمل المعالجة الصوتية مثل النموذج القياسي، ولكن باستخدام متغير RealisticLipSyncGenerator
بدلاً من VisemeGenerator
.
في كل مثال موضح للنموذج القياسي، ما عليك سوى استبدال:
VisemeGenerator
بمتغيرRealisticLipSyncGenerator
الخاص بك- أسماء الدوال ومعاملاتها تظل متطابقة بين كلا النموذجين
ملاحظة: إذا كنت تريد معالجة البيانات الصوتية في أجزاء أصغر لمزامنة شفاه أكثر استجابة، فاضبط الحساب في دالة SetNumSamplesPerChunk
. على سبيل المثال، قسمة معدل العينات على 150 (بث كل ~6.67 مللي ثانية) بدلاً من 100 (بث كل 10 مللي ثانية) سيوفر تحديثات أكثر تواترًا لمزامنة الشفاه.
لتدفق بيانات الصوت من مخزن مؤقت، تحتاج إلى:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- بيانات صوت بتنسيق PCM عائم (مصفوفة من عينات النقطة العائمة) متاحة من مصدر التدفق الخاص بك
- معدل العينات وعدد القنوات
- استدعاء
ProcessAudioData
من Runtime Viseme Generator الخاص بك مع هذه المعلمات بمجرد توفر مقاطع الصوت
إليك مثالاً لمعالجة مزامنة الشفاه من بيانات صوت متدفقة:
ملاحظة: عند استخدام مصادر صوت متدفقة، تأكد من إدارة توقيت تشغيل الصوت بشكل مناسب لتجنب تشويه التشغيل. راجع توثيق Streaming Sound Wave لمزيد من المعلومات حول الإدارة الصحيحة للصوت المتدفق.
يستخدم النموذج الواقعي نفس سير عمل معالجة الصوت مثل النموذج القياسي، ولكن مع المتغير RealisticLipSyncGenerator
بدلاً من VisemeGenerator
.
في كل مثال موضح للنموذج القياسي، ما عليك سوى استبدال:
VisemeGenerator
بمتغيرRealisticLipSyncGenerator
الخاص بك- أسماء الدوال ومعلماتها تظل متطابقة بين كلا النموذجين
ملاحظة: عند استخدام مصادر صوت متدفقة، تأكد من إدارة توقيت تشغيل الصوت بشكل مناسب لتجنب تشويه التشغيل. راجع توثيق Streaming Sound Wave لمزيد من المعلومات حول الإدارة الصحيحة للصوت المتدفق.
ملاحظة: إذا كنت تريد معالجة بيانات الصوت في مقاطع أصغر لمزامنة شفاه أكثر استجابة، فاضبط الحساب في دالة SetNumSamplesPerChunk
. على سبيل المثال، قسمة معدل العينات على 150 (تدفق كل ~6.67 مللي ثانية) بدلاً من 100 (تدفق كل 10 مللي ثانية) سيوفر تحديثات لمزامنة الشفاه بشكل أكثر تكرارًا.
الخطوة 4: إعداد Anim Graph
بعد إعداد Event Graph، انتقل إلى Anim Graph
لتوصيل المولد برسم الحركة للشخصية:
Lip Sync
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- حدد الوضعية التي تحتوي على وجه MetaHuman (عادة من
Use cached pose 'Body Pose'
) - أضف عقدة
Blend Runtime MetaHuman Lip Sync
- وصل الوضعية بـ
Source Pose
الخاصة بعقدةBlend Runtime MetaHuman Lip Sync
- وصل متغير
RuntimeVisemeGenerator
الخاص بك بـViseme Generator
pin - وصل مخرج عقدة
Blend Runtime MetaHuman Lip Sync
بـResult
pin الخاصة بـOutput Pose
عند اكتشاف مزامنة الشفاه في الصوت، سيقوم شخصيتك بالتحريك الديناميكي وفقًا لذلك:
- حدد الوضعية التي تحتوي على وجه MetaHuman (عادة من
Use cached pose 'Body Pose'
) - أضف عقدة
Blend Realistic MetaHuman Lip Sync
- وصل الوضعية بـ
Source Pose
الخاصة بعقدةBlend Realistic MetaHuman Lip Sync
- وصل متغير
RealisticLipSyncGenerator
الخاص بك بـLip Sync Generator
pin - وصل مخرج عقدة
Blend Realistic MetaHuman Lip Sync
بـResult
pin الخاصة بـOutput Pose
يوفر النموذج الواقعي جودة بصرية محسنة مع حركات فم أكثر طبيعية:
ملاحظة: تم تصميم النموذج الواقعي حصريًا لشخصيات MetaHuman وهو غير متوافق مع أنواع الشخصيات المخصصة.
تحريك الضحك
يمكنك أيضًا إضافة تحريكات للضحك ستستجيب ديناميكيًا للضحك المكتشف في الصوت:
- أضف عقدة
Blend Runtime MetaHuman Laughter
- وصل متغير
RuntimeVisemeGenerator
الخاص بك بـViseme Generator
pin - إذا كنت تستخدم مزامنة الشفاه بالفعل:
- وصل المخرج من عقدة
Blend Runtime MetaHuman Lip Sync
إلىSource Pose
الخاصة بعقدةBlend Runtime MetaHuman Laughter
- وصل مخرج عقدة
Blend Runtime MetaHuman Laughter
إلىResult
pin الخاصة بـOutput Pose
- وصل المخرج من عقدة
- إذا كنت تستخدم الضحك فقط بدون مزامنة الشفاه:
- وصل وضعية المصدر الخاصة بك مباشرة إلى
Source Pose
الخاصة بعقدةBlend Runtime MetaHuman Laughter
- وصل المخرج إلى
Result
pin
- وصل وضعية المصدر الخاصة بك مباشرة إلى
عند اكتشاف الضحك في الصوت، سيقوم شخصيتك بالتحريك الديناميكي وفقًا لذلك:
الدمج مع تحريكات الوجه والجسم
لتطبيق مزامنة الشفاه والضحك إلى جانب رسوميات الجسم الحالية ورسوميات الوجه المخصصة (مثل التعابير، المشاعر، أو أي حركات وجه أخرى) دون التغلب عليها:
- أضف عقدة
Layered blend per bone
بين رسوميات الجسم والمخرج النهائي. تأكد من أنUse Attached Parent
مضبوط علىtrue
. - قم بتكوين إعداد الطبقات:
- أضف عنصرًا واحدًا إلى مصفوفة
Layer Setup
- أضف 3 عناصر إلى
Branch Filters
للطبقة، بأسماء العظام التاليةBone Name
:FACIAL_C_FacialRoot
FACIAL_C_Neck2Root
FACIAL_C_Neck1Root
- أضف عنصرًا واحدًا إلى مصفوفة
- مهم لرسوميات الوجه المخصصة: في
Curve Blend Option
، اختر "Use Max Value". هذا يسمح لرسوميات الوجه المخصصة (التعابير، المشاعر، إلخ) بأن يتم تركيبها بشكل صحيح فوق مزامنة الشفاه. - قم بعمل التوصيلات:
- الرسوميات الحالية (مثل
BodyPose
) → مدخلBase Pose
- مخرج رسوميات الوجه (من عقد مزامنة الشفاه و/أو الضحك) → مدخل
Blend Poses 0
- عقدة
Layered blend per bone
→ وضعResult
النهائي
- الرسوميات الحالية (مثل
لماذا يعمل هذا: تقوم عوامل تصفية الفرع بعزل عظام رسوميات الوجه، مما يسمح لمزامنة الشفاه والضحك بالدمج حصريًا مع حركات الوجه مع الحفاظ على رسوميات الجسم الأصلية. خيار دمج المنحنيات "Use Max Value" يأخذ القيمة القصوى من كل منحنى بدلاً من دمجها بشكل إضافي، مما يسمح لرسوميات الوجه المخصصة (مثل التعابير والمشاعر) بالدمج بشكل صحيح مع مزامنة الشفاه دون تعارض. هذا يتطابق مع هيكل هيكل الوجه MetaHuman للتكامل الطبيعي.
ملاحظة: تم تصميم ميزات مزامنة الشفاه والضحك للعمل بشكل غير مدمر مع إعداد الرسوميات الحالي. فهي تؤثر فقط على عظام الوجه المحددة اللازمة لحركة الفم، تاركة رسوميات الوجه الأخرى سليمة. هذا يعني أنه يمكنك دمجها بأمان في أي نقطة في سلسلة الرسوميات المتحركة الخاصة بك - إما قبل رسوميات الوجه الأخرى (السماح لتلك الرسوميات بالتغلب على مزامنة الشفاه/الضحك) أو بعدها (السماح لمزامنة الشفاه/الضحك بالدمج فوق رسومياتك الحالية). هذه المرونة تتيح لك الجمع بين مزامنة الشفاه والضحك مع رمش العين، حركات الحاجبين، التعابير العاطفية، ورسوميات الوجه الأخرى دون تعارض.
ضبط سلوك مزامنة الشفاه بدقة
بعد إعداد وظيفة مزامنة الشفاه الأساسية، قد ترغب في ضبط جوانب محددة من حركة الفم لتتناسب بشكل أفضل مع متطلبات مشروعك.
التحكم في بروز اللسان
في نموذج مزامنة الشفاه القياسي، قد تلاحظ حركة لسان مفرطة إلى الأمام أثناء نطق بعض الفونيمات. للتحكم في بروز اللسان:
- بعد عقدة
Blend Runtime MetaHuman Lip Sync
أو عقدةBlend Realistic MetaHuman Lip Sync
الخاصة بك، أضف عقدةModify Curve
- انقر بزر الماوس الأيمن على عقدة
Modify Curve
وحدد Add Curve Pin - أضف دبوس منحنى بالاسم
CTRL_expressions_tongueOut
- عيّن خاصية Apply Mode للعقدة إلى Scale
- اضبط معلمة Value للتحكم في مد اللسان (على سبيل المثال، 0.8 لتقليل البروز بنسبة 20%)
التحكم في فتح الفك
قد ينتج مزامنة الشفاه الواقعية حركات فك شديدة الاستجابة اعتمادًا على محتوى الصوت ومتطلباتك البصرية. لضبط شدة فتح الفك:
- بعد عقدة مزج مزامنة الشفاه الخاصة بك، أضف عقدة
Modify Curve
- انقر بزر الماوس الأيمن على عقدة
Modify Curve
وحدد Add Curve Pin - أضف دبوس منحنى بالاسم
CTRL_expressions_jawOpen
- عيّن خاصية Apply Mode للعقدة إلى Scale
- اضبط معلمة Value للتحكم في نطاق فتح الفك (على سبيل المثال، 0.9 لتقليل حركة الفك بنسبة 10%)
التهيئة
تهيئة مزامنة الشفاه
- Standard (Faster) Model
- Realistic (Higher Quality) Model
تمتلك عقدة Blend Runtime MetaHuman Lip Sync
خيارات تهيئة في لوحة الخصائص الخاصة بها:
الخاصية | الافتراضي | الوصف |
---|---|---|
Interpolation Speed | 25 | يتحكم في سرعة انتقال حركات الشفاه بين وحدات الفونيمات المرئية. القيم الأعلى تؤدي إلى انتقالات أسرع وأكثر فجائية. |
Reset Time | 0.2 | المدة بالثواني التي بعدها يتم إعادة تعيين مزامنة الشفاه. هذا مفيد لمنع استمرار مزامنة الشفاه بعد توقف الصوت. |
تمتلك عقدة Blend Realistic MetaHuman Lip Sync
خيارات تهيئة في لوحة الخصائص الخاصة بها:
الخاصية | الافتراضي | الوصف |
---|---|---|
Interpolation Speed | 30 | يتحكم في سرعة انتقال حركات الشفاه بين المواضع. القيم الأعلى تؤدي إلى انتقالات أسرع وأكثر فجائية. |
Reset Time | 0.2 | المدة بالثواني التي بعدها يتم إعادة تعيين مزامنة الشفاه. هذا مفيد لمنع استمرار مزامنة الشفاه بعد توقف الصوت. |
تهيئة الضحك
تمتلك عقدة Blend Runtime MetaHuman Laughter
خيارات التهيئة الخاصة بها:
الخاصية | الافتراضي | الوصف |
---|---|---|
Interpolation Speed | 25 | يتحكم في سرعة انتقال حركات الشفاه بين رسوميات الضحك المتحركة. القيم الأعلى تؤدي إلى انتقالات أسرع وأكثر فجائية. |
Reset Time | 0.2 | المدة بالثواني التي بعدها يتم إعادة تعيين الضحك. هذا مفيد لمنع استمرار الضحك بعد توقف الصوت. |
Max Laughter Weight | 0.7 | يقوم بتقليص أقصى شدة لرسمية الضحك المتحركة (0.0 - 1.0). |
الاختيار بين نماذج مزامنة الشفاه
عند اتخاذ قرار بشأن نموذج مزامنة الشفاه الذي ستستخدمه في مشروعك، ضع في الاعتبار هذه العوامل:
الاعتبار | النموذج القياسي | النموذج الواقعي |
---|---|---|
التوافق مع الشخصيات | شخصيات MetaHumans وجميع أنواع الشخصيات المخصصة | شخصيات MetaHumans فقط |
الجودة البصرية | مزامنة شفاه جيدة مع أداء فعال | واقعية محسنة مع حركات فم أكثر طبيعية |
الأداء | مُحسّن لجميع المنصات بما في ذلك الهاتف المحمول/الواقع الافتراضي | متطلبات موارد أعلى قليلاً |
حالات الاستخدام | التطبيقات العامة، الألعاب، الواقع الافتراضي/المعزز، الهاتف المحمول | التجارب السينمائية، تفاعلات الشخصيات عن قرب |
التوافق مع إصدار المحرك
إذا كنت تستخدم Unreal Engine 5.2، فقد لا يعمل النموذج الواقعي بشكل صحيح بسبب خلل في مكتبة إعادة التشكيل في UE. لمستخدمي UE 5.2 الذين يحتاجون إلى وظيفة مزامنة شفاه موثوقة، يرجى استخدام النموذج القياسي بدلاً من ذلك.
هذه المشكلة خاصة بـ UE 5.2 ولا تؤثر على إصدارات المحرك الأخرى.
لمعظم المشاريع، يقدم النموذج القياسي توازنًا ممتازًا بين الجودة والأداء مع دعم أوسع نطاق من أنواع الشخصيات. النموذج الواقعي مثالي عندما تحتاج إلى أعلى درجة من الدقة البصرية خصيصًا لشخصيات MetaHuman في السياقات التي تكون فيها الحمولة الزائدة للأداء أقل أهمية.