كيفية استخدام المكون الإضافي
يأخذك هذا الدليل خلال عملية إعداد 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 الإضافي
مكون إضافي لتمديد النموذج القياسي
إذا كنت تخطط لاستخدام النموذج القياسي (الأسرع)، فستحتاج إلى تثبيت المكون الإضافي للتمديد:
- قم بتنزيل مكون Standard Lip Sync Extension plugin الإضافي من جوجل درايف
- استخرج المجلد من الأرشيف الذي تم تنزيله إلى مجلد
Plugins
الخاص بمشروعك (قم بإنشاء هذا المجلد إذا لم يكن موجودًا) - تأكد من إعداد مشروعك كمشروع C++ (حتى إذا لم يكن لديك أي كود C++)
- أعد بناء مشروعك
- هذا التمديد مطلوب فقط إذا كنت تريد استخدام النموذج القياسي. إذا كنت تحتاج فقط إلى النموذج الواقعي، يمكنك تخطي هذه الخطوة.
- لمزيد من المعلومات حول كيفية بناء المكونات الإضافية يدويًا، راجع برنامج Building Plugins tutorial التعليمي
المكونات الإضافية الأخرى
- إذا كنت تخطط لاستخدام التقاط الصوت (مثل إدخال الميكروفون)، فقم بتثبيت مكوّن Runtime Audio Importer الإضافي.
- إذا كنت تخطط لاستخدام وظيفة تحويل النص إلى كلام مع مكوّناتي الإضافية (قد يكون لديك نظام تحويل نص إلى كلام مخصص خاص بك أو مدخل صوتي آخر)، فبالإضافة إلى م كوّن Runtime Audio Importer الإضافي، قم أيضًا بتثبيت:
- لـ تحويل النص إلى كلام محلي، مكوّن Runtime Text To Speech الإضافي.
- لـ مزودي تحويل النص إلى كلام خارجيين (ElevenLabs, OpenAI)، مكوّن Runtime AI Chatbot Integrator الإضافي.
التهيئة الخاصة بالمنصة
تهيئة Android / Meta Quest
إذا كنت تستهدف منصات Android أو Meta Quest وواجهت أخطاء في بناء المشروع مع هذا المكوّن الإضافي، فستحتاج إلى تعطيل بنية Android x86_64 (x64) في إعدادات مشروعك:
- انتقل إلى Edit > Project Settings
- انتقل إلى Platforms > Android
- ضمن Platforms - Android، قسم Build، ابحث عن Support x86_64 [aka x64] وتأكد من أنه معطل، كما هو موضح أدناه
هذا لأن المكوّن الإضافي يدعم حاليًا فقط بنى arm64-v8a و armeabi-v7a لمنصات Android / Meta Quest.
عملية الإعداد
الخطوة 1: تحديد وتعديل مخطط تحريك الوجه
- UE 5.5 والإصدارات الأقدم (أو MetaHumans القديمة في UE 5.6+)
- UE 5.6+ MetaHuman Creator Characters
تحتاج إلى تعديل مخطط Blueprint للتحريك سيتم استخدامه لتحريك وجه شخصية MetaHuman الخاصة بك. مخطط Blueprint الافتراضي لتحريك وجه MetaHuman موجود في:
Content/MetaHumans/Common/Face/Face_AnimBP
لديك عدة خيارات لتنفيذ وظيفة مزامنة الشفاه:
- Edit Default Asset (Simplest Option)
- Create Duplicate
- Use Custom Animation Blueprint
افتح Face_AnimBP
الافتراضي مباشرة وقم بإجراء تعديلاتك. أي تغييرات ستؤثر على جميع شخصيات MetaHuman التي تستخدم مخطط الحركة هذا.
ملاحظة: هذا النهج مريح ولكنه سيؤثر على جميع الشخصيات التي تستخدم مخطط الحركة الافتراضي.
- انسخ
Face_AnimBP
وأعطِه اسمًا وصفيًا - حدد موقع فئة مخطط الشخصية الخاصة بك (على سبيل المثال، بالنسبة للشخصية "Bryan"، سيكون في
Content/MetaHumans/Bryan/BP_Bryan
) - افتح مخطط الشخصية وابحث عن مكون Face
- غيّر خاصية Anim Class إلى مخطط الحركة الذي قمت بنسخه حديثًا
ملاحظة: هذا النهج يسمح لك بتخصيص مزامنة الشفاه لشخصيات محددة مع ترك الآخرين دون تغيير.
يمكنك تنفيذ مزج مزامنة الشفاه في أي مخطط حركة لديه إمكانية الوصول إلى عظام الوجه المطلوبة:
- أنشئ أو استخدم مخطط حركة مخصص موجود
- تأكد من أن مخطط الحركة الخاص بك يعمل مع هيكل عظمي يحتوي على نفس عظام الوجه الموجودة في
Face_Archetype_Skeleton
الافتراضي لـ MetaHuman (وهو الهيكل العظمي القياسي المستخدم لأي شخصية MetaHuman)
ملاحظة: هذا النهج يمنحك أقصى مرونة للتكامل مع أنظمة الرسوم المتحركة المخصصة.
بدءًا من UE 5.6، تم تقديم نظام MetaHuman Creator الجديد، الذي ينشئ شخصيات بدون أصل Face_AnimBP
التقليدي. بالنسبة لهذه الشخصيات، يوفر المكون الإضافي مخطط حركة للوجه موجود في:
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 أعلاه إذا كنت تعمل مع MetaHumans القديمة أو تفضل سير العمل التقليدي
- إنشاء رسم تخطيطي للرسوم المتحركة مخصص: أنشئ رسمك التخطيطي للرسوم المتحركة الخاص الذي يعمل مع هيكل الهيكل العظمي لـ MetaHuman Creator
ملاحظة: إذا كنت تستخدم UE 5.6+ ولكنك تعمل مع MetaHumans القديمة (غير المنشأة من خلال 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
معامل تكوين اختياريًا يسمح لك بتخصيص سلوك المُنشئ:
نوع النموذج
يحدد إعداد نوع النموذج أي إصدار من النموذج الواقعي سيتم استخدامه:
نوع النموذج | الأداء | الجودة البصرية | التعامل مع الضوضاء | حالات الاستخدام الموصى بها |
---|---|---|---|---|
مُحسّن للغاية (افتراضي) | أعلى أداء، أقل استخدام لوحدة المعالجة المركزية | جودة جيدة | قد يُظهر حركات فم ملحوظة مع ضوضاء الخلفية أو الأصوات غير الصوتية | بيئات صوتية نظيفة، سيناريوهات حرجة الأداء |
مُحسّن | أداء جيد، استخدام معتدل لوحدة المعالجة المركزية | جودة عالية | استقرار أفضل مع الصوت المشوب بالضوضاء | أداء وجودة متوازنتان، ظروف صوتية مختلطة |
غير المُحسّن ال أصلي | مناسب للاستخدام في الوقت الفعلي على وحدات المعالجة المركزية الحديثة | أعلى جودة | الأكثر استقرارًا مع ضوضاء الخلفية والأصوات غير الصوتية | الإنتاجات عالية الجودة، بيئات الصوت الصاخبة، عندما تكون هناك حاجة إلى أقصى دقة |
إعدادات الأداء
خيوط العمل الداخلية (Intra Op Threads): تتحكم في عدد الخيوط المستخدمة لعمليات معالجة النموذج الداخلية.
- 0 (افتراضي/تلقائي): يستخدم الكشف التلقائي (عادة 1/4 من نوى وحدة المعالجة المركزية المتاحة، بحد أقصى 4)
- 1-16: حدد عدد الخيوط يدويًا. قد تحسن القيم الأعلى الأداء على الأنظمة متعددة النوى ولكنها تستخدم المزيد من وحدة المعالجة المركزية
خيوط العمل المتقاطعة (Inter Op Threads): تتحكم في عدد الخيوط المستخدمة للتنفيذ المتوازي لعمليات النموذج المختلفة.
- 0 (افتراضي/تلقائي): يستخدم الكشف التلقائي (عادة 1/8 من نوى وحدة المعالجة المركزية المتاحة، بحد أقصى 2)
- 1-8: حدد عدد الخيوط يدويًا. عادة ما تبقى منخفضة للمعالجة في الوقت الفعلي
استخدام التكوين
لتكوين المُنشئ:
- في عقدة
Create Realistic MetaHuman Lip Sync Generator
، قم بتوسيع معامل التكوين - اضبط نوع النموذج على الخيار الذي تفضله:
- استخدم مُحسّن للغاية للحصول على أفضل أداء (موصى به لمعظم المستخدمين)
- استخدم مُحسّن للحصول على أداء وجودة متوازنتين
- استخدم غير المُحسّن الأصلي فقط عندما تكون الجودة القصوى ضرورية
- اضبط خيوط العمل الداخلية و خيوط العمل المتقاطعة إذا لزم الأمر (اتركها عند 0 للكشف التلقائي في معظم الحالات) توصيات الأداء:
- بالنسبة لمعظم المشاريع ذات الصوت النظيف، استخدم معالي التحسين للحصول على أفضل أداء
- إذا كنت تعمل مع صوت يحتوي على ضوضاء في الخلفية، أو موسيقى، أو أصوات غير صوتية، ففكر في استخدام نماذج المحسّنة أو الأصلية غير المحسنة لتحقيق استقرار أفضل
- قد يُظهر نموذج معالي التحسين حركات فم خفيفة عند معالجة الصوت غير الصوتي بسبب تقنيات التحسين المُ طبقة أثناء إنشاء النموذج
- نموذج الأصلية غير المحسنة، على الرغم من احتياجه لمزيد من موارد وحدة المعالجة المركزية، لا يزال مناسبًا للتطبيقات في الوقت الفعلي على الأجهزة الحديثة ويوفر النتائج الأكثر دقة في ظروف الصوت الصعبة
- اضبط عدد الخيوط فقط إذا كنت تواجه مشكلات في الأداء أو لديك متطلبات تحسين محددة
- الأعداد الأعلى من الخيوط لا تعني دائمًا أداءً أفضل - القيم المثلى تعتمد على أجهزتك المحددة ومتطلبات مشروعك
تكوين حجم جزء المعالجة: يحدد حجم جزء المعالجة عدد العينات التي تتم معالجتها في كل خطوة استدلال. القيمة الافتراضية هي 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
من مُولِّد Viseme الخاص بك في وقت التشغيل (Runtime Viseme Generator) - ابدأ في التقاط الصوت من الميكروفون
يستخدم النموذج الواقعي نفس سير عمل معالجة الصوت مثل النموذج القياسي، ولكن مع متغير RealisticLipSyncGenerator
بدلاً من VisemeGenerator
.
في كل مثال موضح للنموذج القياسي، ما عليك سوى استبدال:
VisemeGenerator
بمتغيرRealisticLipSyncGenerator
الخاص بك- أسماء الوظائف والمعاملات تظل متطابقة بين كلا النموذجين
يقوم هذا النهج بالتقاط الصوت من ميكروفون، ثم يعيد تشغيله مع مزامنة الشفاه:
- النموذج القياسي (أسرع)
- Realistic (Higher Quality) Model
- أنشئ Capturable Sound Wave باستخدام Runtime Audio Importer
- ابدأ التقاط الصوت من الميكروفون
- قبل إعادة تشغيل Capturable Sound Wave، قم بربط مندوب
OnGeneratePCMData
الخاص به - في الوظيفة المقيدة، استدعِ
ProcessAudioData
من مُولِّد Viseme الخاص بك في وقت التشغيل (Runtime Viseme Generator)
يستخدم النموذج الواقعي نفس سير عمل معالجة الصوت مثل النموذج القياسي، ولكن مع متغير RealisticLipSyncGenerator
بدلاً من VisemeGenerator
.
في كل من الأمثلة الموضحة للنموذج القياسي، ما عليك سوى استبدال:
VisemeGenerator
بمتغيرRealisticLipSyncGenerator
الخاص بك- أسماء الدوال والمعلمات تظل متطابقة بين كلا النموذجين
ملاحظة: إذا كنت تريد معالجة بيانات الصوت في أجزاء أصغر لمزامنة شفاه أكثر استجابة، فاضبط الحساب في دالة SetNumSamplesPerChunk
. على سبيل المثال، قسمة معدل العينات على 150 (بث كل ~6.67 مللي ثانية) بدلاً من 100 (بث كل 10 مللي ثانية) سيوفر تحديثات أكثر تواترًا لمزامنة الشفاه.
- Regular
- Streaming
يقوم هذا النهج بتوليف الكلام من النص ويؤدي مزامنة الشفاه:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- استخدم Runtime Text To Speech لتوليد الكلام من النص
- استخدم Runtime Audio Importer لاستيراد الصوت المُركب
- قبل تشغيل موجة الصوت المستوردة، اربط بمفوض
OnGeneratePCMData
الخاص بها - في الدالة المقيدة، استدعِ
ProcessAudioData
من مُولد الفونيمات الخاص بك في وقت التشغيل (Runtime)
TTS المحلي المقدم بواسطة ملحق Runtime Text To Speech غير مدعوم حاليًا مع النموذج الواقعي بسبب تعارضات وقت تشغيل ONNX. للتحويل من نص إلى كلام باستخدام النموذج الواقعي، فكر في استخدام خدمات TTS خارجية (مثل OpenAI أو ElevenLabs عبر Runtime AI Chatbot Integrator) أو استخدم النموذج القياسي بدلاً من ذلك.
ملاحظة: إذا كنت تريد معالجة بيانات الصوت في أجزاء أصغر لمزامنة شفاه أكثر استجابة، فاضبط الحساب في دالة SetNumSamplesPerChunk
. على سبيل المثال، قسمة معدل العينات على 150 (بث كل ~6.67 مللي ثانية) بدلاً من 100 (بث كل 10 مللي ثانية) سيوفر تحديثات أكثر تواترًا لمزامنة الشفاه.
يقوم هذا ال نهج باستخدام توليف الكلام من النص إلى كلام مع مزامنة الشفاه في الوقت الحقيقي:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- استخدم Runtime Text To Speech لتوليد كلام متدفق من النص
- استخدم Runtime Audio Importer لاستيراد الصوت المُركّب
- قبل تشغيل موجة الصوت المتدفقة، اربط بمفوّضها
OnGeneratePCMData
- في الدالة المرتبطة، استدعِ
ProcessAudioData
من مُولّد Viseme الخاص بك في وقت التشغيل (Runtime)
إن TTS المحلي المقدم بواسطة إضافة Runtime Text To Speech غير مدعوم حاليًا مع النموذج الواقعي (Realistic) بسبب تعارضات وقت تشغيل ONNX. لتوليد الكلام من النص (text-to-speech) باستخدام النموذج الواقعي، فكّر في استخدام خدمات TTS خارجية (مثل OpenAI أو ElevenLabs عبر Runtime AI Chatbot Integrator) أو استخدم النموذج القياسي (Standard) بدلاً من ذلك.
ملاحظة: إذا كنت تريد معالجة بيانات الصوت في أجزاء أصغر لمزامنة شفاه أكثر استجابة، فاضبط الحساب في دالة 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 لتوليد كلام من النص باستخدام واجهات برمجة تطبيقات (APIs) خارجية (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 لاستيراد بيانات الصوت المُركبة
- قبل تشغيل موجة الصوت المُتدفقة، اربط بمفوض
OnGeneratePCMData
الخاص بها - في الدالة المقيدة، استدعِ
ProcessAudioData
من مُولد Viseme الخاص بك في وقت التشغيل (Runtime)
يستخدم النموذج الواقعي نفس سير عمل معالجة الصوت مثل النموذج القياسي، ولكن مع متغير RealisticLipSyncGenerator
بدلاً من VisemeGenerator
.
في كل من الأمثلة الموضحة للنموذج القياسي، ما عليك سوى استبدال:
VisemeGenerator
بمتغيرRealisticLipSyncGenerator
الخاص بك- أسماء الدوال ومعاملاتها تظل متطابقة بين كلا النموذجين
ملاحظة: إذا كنت ترغب في معالجة بيانات الصوت في أجزاء أصغر لمزامنة الشفاه الأكثر استجابة، قم بتعديل الحساب في دالة SetNumSamplesPerChunk
. على سبيل المثال، قسمة معدل العينات على 150 (بث كل ~6.67 مللي ثانية) بدلاً من 100 (بث كل 10 مللي ثانية) سيوفر تحديثات أكثر تواترًا لمزامنة الشفاه.
هذا النهج يستخدم ملفات صوتية مسجلة مسبقًا أو مخازن مؤقتة للصوت لمزامنة الشفاه:
- النموذج القياسي (الأسرع)
- النموذج الواقعي (أعلى جودة)
- استخدم Runtime Audio Importer لاستيراد ملف صوتي من القرص أو الذاكرة
- قبل تشغيل موجة الصوت المستوردة، قم بالربط مع المفوض
OnGeneratePCMData
الخاص بها - في الدالة المرتبطة، استدعِ
ProcessAudioData
من مُولِّد Viseme الخاص بك في وقت التشغيل (Runtime) - شغِّل موجة الصوت المستوردة ولاحظ حركة الشفاه المتزامنة
يستخدم النموذج الواقعي نفس سير عمل معالجة الصوت مثل النموذج القياسي، ولكن مع المتغير RealisticLipSyncGenerator
بدلاً من VisemeGenerator
.
في كل مثال موضح للنموذج القياسي، ما عليك سوى استبدال:
VisemeGenerator
بمتغيرRealisticLipSyncGenerator
الخاص بك- أسماء الدوال ومعاملاتها تظل متطابقة بين كلا النموذجين
ملاحظة: إذا كنت ترغب في معالجة بيانات الصوت في أجزاء أصغر لمزامنة الشفاه الأكثر استجابة، قم بتعديل الحساب في دالة SetNumSamplesPerChunk
. على سبيل المثال، قسمة معدل العينات على 150 (بث كل ~6.67 مللي ثانية) بدلاً من 100 (بث كل 10 مللي ثانية) سيوفر تحديثات أكثر تواترًا لمزامنة الشفاه.
لتدفق بيانات الصوت من مخزن مؤقت، تحتاج:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- بيانات صوت بتنسيق PCM عائم (مصفوفة من عينات النقطة العائمة) متاحة من مصدر التدفق الخاص بك
- معدل العينات وعدد القنوات
- استدعاء
ProcessAudioData
من Runtime Viseme Generator الخاص بك مع هذه المعلمات كلما أصبحت مقاطع الصوت متاحة
إليك مثالاً لمعالجة Lip Sync من بيانات صوت متدفقة:
ملاحظة: عند استخدام مصادر صوت متدفقة، تأكد من إدارة توقيت تشغيل الصوت بشكل مناسب لتجنب تشويه التشغيل. راجع توثيق Streaming Sound Wave لمزيد من المعلومات حول الإدارة الصحيحة للصوت المتدفق.
يستخدم Realistic Model نفس سير عمل معالجة الصوت مثل Standard Model، ولكن مع المتغير RealisticLipSyncGenerator
بدلاً من VisemeGenerator
.
في كل من الأمثلة الموضحة لـ Standard Model، استبدل ببساطة:
VisemeGenerator
بمتغيرRealisticLipSyncGenerator
الخاص بك- أسماء الدوال والمعلمات تبقى متطابقة بين كلا النموذجين
ملاحظة: عند استخدام مصادر صوت متدفقة، تأكد من إدارة توقيت تشغيل الصوت بشكل مناسب لتجنب تشويه التشغيل. راجع توثيق Streaming Sound Wave لمزيد من المعلومات حول الإدارة الصحيحة للصوت المتدفق.
ملاحظة: إذا كنت تريد معالجة بيانات الصوت في مقاطع أصغر لتحقيق Lip Sync أكثر استجابة، اضبط الحساب في دالة SetNumSamplesPerChunk
. على سبيل المثال، قسمة معدل العينات على 150 (تدفق كل ~6.67 مللي ثانية) بدلاً من 100 (تدفق كل 10 مللي ثانية) سيوفر تحديثات Lip Sync أكثر تكرارًا.
الخطوة 4: إعداد Anim Graph
بعد إعداد Event Graph، انتقل إلى Anim Graph
لتوصيل المولد برسم الحركة للشخصية:
Lip Sync
- Standard (أسرع) نموذج
- Realistic (جودة أعلى) نموذج
- حدد الوضعية التي تحتوي على وجه 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. - اضبط إعداد الطبقة:
- أضف 1 عنصر إلى مصفوفة
Layer Setup
- أضف 3 عناصر إلى
Branch Filters
للطبقة، مع أسماء العظام التاليةBone Name
:FACIAL_C_FacialRoot
FACIAL_C_Neck2Root
FACIAL_C_Neck1Root
- أضف 1 عنصر إلى مصفوفة
- مهم لرسوميات الوجه المخصصة: في
Curve Blend Option
، اختر "Use Max Value". هذا يسمح لرسوميات الوجه المخصصة (التعابير، المشاعر، إلخ) أن تُطبّق بشكل صحيح فوق مزامنة الشفاه. - أنشئ الاتصالات:
- الرسوميات الحالية (مثل
BodyPose
) → مدخلBase Pose
- مخرج رسوميات الوجه (من عقد مزامنة الشفاه و/أو الضحك) → مدخل
Blend Poses 0
- عقدة المزج الطبقي → وضع
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
خيارات تهيئة خاصة بها:
الخاصية | الافتراضي | الوصف |
---|---|---|
سرعة الاستيفاء | 25 | تتحكم في سرعة انتقال حركات الشفاه بين رسوميات الضحك. القيم الأعلى تؤدي إلى انتقالات أسرع وأكثر حدة. |
وقت الإعادة | 0.2 | المدة بالثواني التي يتم بعدها إعادة تعيين الضحك. هذا مفيد لمنع استمرار الضحك بعد توقف الصوت. |
أقصى وزن للضحك | 0.7 | يقوم بتقليص أقصى شدة لرسومية الضحك (0.0 - 1.0). |
الاختيار بين نماذج مزامنة الشفاه (Lip Sync)
عند اتخاذ قرار بشأن نموذج مزامنة الشفاه (Lip Sync) الذي ستستخدمه في مشروعك، ضع في الاعتبار هذه العوامل:
الاعتبار | النموذج القياسي (Standard Model) | النموذج الواقعي (Realistic Model) |
---|---|---|
التوافق مع الشخصيات | MetaHumans وجميع أنواع الشخصيات المخصصة | MetaHumans فقط |
الجودة البصرية | مزامنة شفاه جيدة مع أداء فعال | واقعية محسنة مع حركات فم أكثر طبيعية |
الأداء | مُحسّن لجميع المنصات بما في ذلك الهاتف/الواقع الافتراضي | متطلبات موارد أعلى قليلاً |
حالات الاستخدام | التطبيقات العامة، الألعاب، الواقع الافتراضي/المعزز، الهاتف المحمول | التجارب السينمائية، تفاعلات الشخصيات عن قرب |
التوافق مع إصدار المحرك
إذا كنت تستخدم Unreal Engine 5.2، فقد لا يعمل النموذج الواقعي (Realistic Model) بشكل صحيح بسبب خلل في مكتبة إعادة التشكيل (resampling library) الخاصة بـ UE. لمستخدمي UE 5.2 الذين يحتاجون إلى وظيفة مزامنة شفاه (Lip Sync) موثوقة، يرجى استخدام النموذج القياسي (Standard Model) بدلاً من ذلك.
هذه المشكلة خاصة بـ UE 5.2 ولا تؤثر على إصدارات المحرك الأخرى.
لمعظم المشاريع، يقدم النموذج القياسي (Standard Model) توازنًا ممتازًا بين الجودة والأداء مع دعم أوسع نطاق من أنواع الشخصيات. النموذج الواقعي (Realistic Model) مثالي عندما تحتاج إلى أعلى دقة بصرية خصيصًا لشخصيات MetaHuman في السياقات التي تكون فيها عبء الأداء أقل أهمية.