أصبحت الفيزياء جزءًا لا يتجزأ من أي لعبة حديثة. سواء كان ذلك محاكاة بسيطة للأنسجة أو فيزياء كاملة الحركة. ألعاب المحمول ليست استثناء. ومع ذلك ، عند إعداد الفيزياء لهم ، تحتاج إلى إلقاء نظرة على القيود المرتبطة بالأداء الضعيف نسبيًا لأجهزة الجيل الأقدم المدعومة.
أخبر الفنان الفني الرائد ثلاثي الأبعاد
Banzai.Games Roman Tersky كيف قام فريقه بدمج الفيزياء في طريقة اللعب الخاصة بلعبة القتال المتنقلة Shadow Fight 3 ، والتي كانت التقنيات المستخدمة في التحسين وكيف أعاد كتابة الفيزياء من نقطة الصفر للحصول على الشخصيات لتحقيق الحتمية الكاملة في PVP متزامن.
فيزياء الحالة الصلبة

تحتوي معدات الشخصيات الموجودة في Shadow Fight 3 على العديد من العناصر التي تخضع للمحاكاة الفيزيائية ، مما يضيف ديناميكيات لما يحدث على الشاشة. واحدة من الصعوبات الرئيسية التي واجهناها عند إعداد الفيزياء لهذه العناصر هي حقيقة أن العظام التي يتم تلوينها موجودة داخل التسلسل الهرمي للهيكل العظمي للشخصية بنفسه. عندما تتحرك ، فإنها تكرر تحول العظام الأم ولا تتلقى دفعة واقعية جسديا.
جهاز كشف العظام
الحل الأسهل هو فصل العظام. بعد تهيئة جميع عناصر المعدات باستخدام برنامج نصي ، نقوم بإزالة عظام العناصر النشطة فعليًا من التسلسل الهرمي لهيكل الشخصية ، وباستخدام مكون
Character Character ، نقوم بإنشاء اتصال مع العظم الأصل.

ومع ذلك ، فقد واجهنا خطأً بسيطًا ناشئًا عن سحب إطار في الثانية: في هذه الحالة ، فإن العظم الخاضع للمحاكاة الفيزيائية ، مع تأخير بسيط ، "يلحق" العظام التي يتصل بها المفصل. كقاعدة عامة ، هذا الخطأ غير مهم لدرجة أنه يمكن إهماله. بالنسبة للحالات الأخرى ، تم تطبيق حل بديل.
الدافع وهمية
ضع في اعتبارك هذا الحل باستخدام مثال خوذة اللصوص ، والذي يخضع قمة Spartan للمحاكاة الفيزيائية. نقسم المشط إلى 5 أجزاء ، كل منها كان لونه لعظام مختلفة. في إعدادات المفصل لهذه العظام ، يضعون حدودًا على الدوران على طول المحور المرغوب وتعيين المعلمة
Twist Limit Spring المسؤولة عن تأثير الزنبرك.

بالنسبة لمحاكاة واقعية ماديًا ، تم إخراج عظام القمة من التسلسل الهرمي للشخصيات ، ولكن في حالة انخفاض إطار في الثانية ، على سبيل المثال ، على جهاز ضعيف ، امتدت الشبكة القبيحة بسبب "اللحاق بالركب" العظام.

لذلك ، قررنا ترك عظام كريست داخل التسلسل الهرمي للشخصية ، وزيادة ديناميتها لمنحهم دفعة وهمية. للقيام بذلك ، احتجنا في كل الرسوم المتحركة (باستثناء الموقف القتالي) لتحديد الوقت الذي يجب فيه تطبيق الدافع ، وكذلك اتجاهه.
يمكن للمرء قراءة عدد الإطارات في الرسوم المتحركة الحالية ، ثم طرح 15-20 لقطة من هذه القيمة وتطبيق الدافع بعد الفرق المستلم. ومع ذلك ، تمكنا من تجنب الحساب غير الضروري عن طريق ربط لحظة النبض بنهاية
الفاصل الزمني للرسوم المتحركة
دون انقطاع .
كل الرسوم المتحركة (مرة أخرى ، باستثناء الموقف القتالي) لها فترة تم تكوينها مسبقًا والتي لا يمكن للاعب خلالها مقاطعتها. بعد هذه الفترة أو في وقت استلام التأثير ، ينتهي الفاصل
غير المتقطع من عمله ، وفي هذه اللحظة يتم تشغيل الدافع الخاص بنا. كل ما كان مطلوبًا هو تكوين استثناءات للعديد من الرسوم المتحركة.

وبالتالي ، يتم تشغيل الدافع عدة إطارات قبل نهاية كل الرسوم المتحركة ، كما نحتاج. في لحظة تهيئة النبض ، نقرأ الإحداثيات التي كان فيها العظم في الإطار السابق والحالي ، مستقبلاً ناقل الحركة. على هذا المحور يتم تطبيق الدافع لدينا.
عناصر المعدات
من أجل التحسين ، نحاول استخدام المصادمات بأقل قدر ممكن عند محاكاة الفيزياء لعناصر مختلفة من معدات الشخصيات. في معظم الحالات ، نجحنا في القيام بذلك عن طريق معالجة القيود فقط على طول المحاور في الإعدادات المشتركة للعظام التي يتم إجراء المحاكاة عليها.


في بعض الحالات (على سبيل المثال ، مع لوحات معدنية) استخدام المصادم أمر لا مفر منه. ومع ذلك ، فإن العبء الرئيسي ليس هو وجود المصادمات ، ولكن حساب تصادماتهم. يساعد
ضبط مصفوفة تضارب الطبقة في
إعدادات المشروع على تقليل هذا الحمل. بالنسبة لهذه العناصر ، نستخدم طبقتين منفصلتين تتصادمان فيما بينهما فقط ، وبالتالي نتجنب سوء تقدير الاصطدامات مع مصادمات الطبقات الأخرى (الأسلحة والأرضيات والجدران وغيرها)

استنساخ البدنية
يحتوي Shadow Fight 3 على عدة أنواع من الأسلحة التي تستخدم فيها المحاكاة البدنية خارج الرسوم المتحركة المهاجمة. في الوقت الحالي ، هذا سكين على سلسلة ، kusarigama ، nunchaku و flail. للأسباب الموضحة أعلاه ، قررنا إزالة عظام السلاح من التسلسل الهرمي للشخصيات خارج الرسوم المتحركة المهاجمة وإعادتها عندما لا تكون المحاكاة البدنية مطلوبة. من خلال التعامل مع المعلمة
Is Kinematic في مكون
Rigidbody للعظام ، اعتمادًا على الموقف ، نقوم بتشغيل الفيزياء وإيقافها.
ومع ذلك ، عند استخدام Kusarigama وسكين على السلسلة ، واجهنا زيادة الحمل على الأجهزة الضعيفة وحصلنا على انخفاض في الثانية. نشأت المشكلة على وجه التحديد عندما عادت العظام إلى التسلسل الهرمي للشخصية وتم إيقاف المحاكاة المادية لها. ويرجع ذلك إلى حقيقة أن تغيير العظم الأصل يتحول في التسلسل الهرمي للهيكل العظمي يضع ضغطًا على محرك الفيزياء لكل عظمة ابنة يوجد
عليها عنصر
Rigidbody ، حتى إذا كانت المعلمة
Is Kinematic نشطة. وكلما طالت التسلسل الهرمي ، زاد الحمل.

كان الحل لإنشاء استنساخ مادي. النظر في هذا مع مثال سكين على سلسلة.
أثناء تحميل المعركة ، تم تهيئة هيكلين عظميين له: الهيكل الرئيسي ، والذي يقع داخل التسلسل الهرمي للشخصية ، واستنساخه البدني. لا يوجد أي عنصر
Rigidbody في عظام الهيكل العظمي الرئيسي ؛ فقط المسارات المتحركة تؤثر على تحولها. عظام الثانية لها اتصالات مضبوطة (المفاصل)
ومكون Rigidbody مع المعلمة النشطة Is Kinematic.
بينما يتأثر تحول عظام الهيكل العظمي الرئيسي بمسار الرسوم المتحركة ، على سبيل المثال ، أثناء الإضراب ، تظل المعلمة
Is Kinematic في مكون
Rigidbody لعظام الاستنساخ المادي نشطة. لا تتحول العظام ولا تخضع للمحاكاة البدنية. خلال الإطار الأخير من الرسوم المتحركة ، تتم مزامنة التحولات العظمية للهيكلين العظميين. يقرأ الاستنساخ المادي موقع وتناوب عظام الهيكل العظمي الرئيسي وتعيين المعلمات نفسها بالضبط. ثم يتم إلغاء تنشيط Kinematic ، ويتم محاكاة عظام الاستنساخ المادي. علاوة على ذلك ، حتى بداية الرسم المتحرك التالي ، وهو بالفعل الهيكل الرئيسي ، يقرأ كل إطار التحولات في عظام الاستنساخ المادي ، والتي تتحرك في تلك اللحظة في الفيزياء ، وتعيين هذه المعلمات على عظامهم. هذا النهج قد قلل إلى حد كبير من الحمل على محرك الفيزياء وتحسين الأداء على الأجهزة ضعيفة.

محاكاة الأنسجة
عند إعداد محاكاة الأنسجة كجزء من أداء الأجهزة المحمولة ، فإن القيد الرئيسي هو استخدام تصادمات الأنسجة مع المصادم. بديل أرخص هو صقل
السطحية الاختراق للركائز النسيج. نظرًا لوجود عدد كبير من الرسوم المتحركة ومختلف أشكال الشخصيات في لعبتنا ، فقد تم تجميع قائمة من أكثرها خطورة ، حيث تم فحص جميع الأنسجة للاختراق من خلال أجزاء أخرى من الجسم.


كما استخدمنا محاكاة الأنسجة لإنشاء تأثير لهب FX على الأسلحة وعلى رأس Shadow Mind. في إعدادات
القماش لهذه العناصر ، أوقفنا تأثير الجاذبية وقمنا بتعيين قيم التسارع على طول المحور ص: ثابت ، بحيث يتحرك اللهب للأعلى ، وبشكل عشوائي للتأثير في التصفيق. لذلك عند التحرك لن يكون هناك تشويه حاد للهندسة ، قمنا بتعيين القيمة المتزايدة للمقاومة (
التخميد ). وبالتالي ، حصلنا على واقعية ورخيصة إلى حد ما من حيث تأثير لهب الأداء.


الفيزياء الحتمية لحماية الأصناف النباتية المتزامن
في وقت الوفاة وفي مواقف معينة ، عند تنشيط الشخصيات في Shadow Fight 3 ، يتم تنشيط محاكاة للفيزياء. لفترة طويلة ، تم استخدام الفيزياء الحالة الصلبة الأسهم الوحدة لهذا الغرض. ومع ذلك ، عند إدخال PVP متزامن في المشروع ، كان لا بد من التخلي عنها لصالح تطويرها.
PVP متزامن ينطوي على نفس محاكاة لعبة على عميلين. لا توجد مشاكل في الرسوم المتحركة ، حيث تم حساب كل شيء مقدمًا ، في حين تنشأ بعض المشكلات في الفيزياء.
والحقيقة هي أن حسابات الفاصلة العائمة ، والتي تستخدم داخل الفيزياء في الوحدة ، تعمل بشكل مختلف على المعالجات من مختلف الشركات المصنعة. في هذا الصدد ، خلال اللعبة ، تتراكم الأخطاء في موضع الشخصيات - على عميل واحد ، تقع الشخصية بشكل مختلف عن الآخر. وإذا كان من الممكن تصحيح هذا التناقض خارج الفيزياء بسهولة عن طريق مزامنة الموقف بشكل دوري بناءً على مؤشرات من أحد العملاء ، ثم في وقت بدء الفيزياء ، بسبب خطأ بدء الموضع ، يتطور المحاكاة الفيزيائية بشكل مختلف على عميلين.
نتيجة لذلك ، تكون الشخصية بشكل كبير في أماكن مختلفة ومواقع مختلفة. بعد هذا التناقض ، سينشأ موقف عاجلاً أم آجلاً يتم فيه تسجيل الهجمات على عميل واحد وليس على الآخر.
الحل الأبسط ، للوهلة الأولى ، هو اتخاذ موقف الشخصية على عميل ونقله إلى عميل آخر أثناء مزامنته أثناء المحاكاة المادية. لكن regdoll الخاص بالشخصية هو تسلسل هرمي طويل من العظام مع عدد كبير من المواد الصلبة المستقلة (الأطراف ، الرأس) ، من أجل المزامنة الصحيحة للموضع الذي تحتاج إليه لنقل كمية كبيرة من البيانات في فترة زمنية قصيرة. تبين أن هذا الخيار "باهظ الثمن" ، لذلك قررنا أن نكتب فيزياء خاصة بنا ، والتي ستكون حتمية. حتى نتمكن من التأكد من أن الحالات المادية للأحرف تتزامن مع أي عميل ، بغض النظر عن المعالج الذي تتم العمليات الحسابية عليه.

إذن ما هو regdoll لدينا؟ يتكون الجسم من العقد ، وهي نقاط مادية ، وليس لها اتجاه ، ولكن هناك موقفًا وكتلة ، ويتم تحقيق روابط صلابة قابلة للتعديل بينهما. يتم ربط مجموعة من هذه العقد بكل عظمة داخل الهيكل العظمي للشخصية. تتضمن هذه البنية عدم وجود اصطدامات داخلية وقيود في المفاصل ، ويتم تنفيذ التصادمات والاحتكاكات الخارجية على مستوى العقدة. عندما تتحرك العقد في الفضاء ، تؤخذ في الاعتبار الجاذبية والقوى الخارجية والقصور الذاتي.
بين العقدتين هناك نوعان من الروابط:
الأضلاع الصلبة (الأزرق)
والعضلات المرنة (الأحمر). تلعب الأضلاع دور العظام ، مما يجبر العقد على أن تكون على مسافة معينة من بعضها البعض ويمنعها من الانتثار في اتجاهات مختلفة. تشكل العضلات من أي موضع بداية شكلًا معينًا من العقد ، حيث تقوم بتجميعها معًا إذا كانت المسافة بينهما أكبر من القيمة المستهدفة ، ودفعها بعيدًا إذا كانت أقل.


نلقي نظرة "تحت غطاء محرك السيارة" ونرى كيف يعمل. أولاً ، نسمح للعقود بالتحرك بحرية ، ثم نضبط الروابط بشكل تكراري بحيث تتعافى إلى خصائصها المستهدفة. لتكرار واحد من تعديل العضلات ، هناك حاجة لتكرار تعديل الضلع. من خلال جعل الأضلاع أكثر صلابة ، يمكننا أن نتأكد من أن وصلات الأضلاع لن تنكسر بعد تعرض العضلات للعقد.

نتيجة لذلك ، كلما تمكنت العقد من التحول في مرحلة الحركة الحرة ، يجب استثمار التكاليف الحسابية لاستعادة الأضلاع والعضلات. لتقليل هذه التكاليف وخطر حدوث خلل هيكلي ، قررنا تقسيم العملية التكرارية إلى عدة خطوات. وهذا هو ، في إطار واحد عدة مرات ، الحركة الحرة للعقد ويحدث تصحيحها. في خطوة واحدة ، تمكنت العقد من التحرك أقل من ذلك بكثير ، ويصبح ضبطها أسهل بكثير. وبالتالي ، فإننا ننقذ بجدية عدد التكرارات اللازمة لضبط الأضلاع والعضلات.

تحدد مجموعة أطوال العضلات الشكل المستهدف ، والذي تسعى الشخصية من أي موضع بعد الانتقال إلى المحاكاة البدنية. لتجنب التحولات المفاجئة والاضطرابات الهيكلية ، أضفنا نقاط الاستيفاء. في لحظة دخولنا إلى الفيزياء ، نأخذ الصورة الحالية للشخصية ونجعلها هي الهدف ، وبعد ذلك نقوم بتحويلها إلى خمسين إطارًا إلى موضع الهدف المحدد مسبقًا ، ونحصل على انتقال سلس.

المشكلة الرئيسية التي واجهناها عند استخدام الفيزياء لدينا هي التواء دوري للأطراف ، وخاصة الأسلحة. ويرجع ذلك إلى حقيقة أنه في وقت الانتقال إلى الفيزياء ، قد تكون الشخصية في وضع بعيد عن الهدف ، حيث تشد عضلاته. للتقليل إلى أدنى حد ممكن ، وفي المستقبل ، تجنب مثل هذه الحالات ، تم تطبيق عدد من التدابير. بادئ ذي بدء ، أنشأنا العديد من الأهداف التي يمكن للعضلات تشديد العقد. في الوقت الذي ندخل فيه الفيزياء ، نأخذ الصورة الحالية ، وننظر إلى أي هدف محدد مسبقًا هو الأقرب إليه ، ونشدد العقد به.

في البداية ، عند الانتقال إلى الفيزياء ، دفعت العضلات العقد بثبات ، وبذلك وصلت إلى الموضع المطلوب. في كثير من الأحيان أدت حدة هذا التنافر إلى حقيقة أن الأطراف الملتوية بقوة. أضفنا زيادة سلسة في قوة العضلات ، مما أدى إلى تحسن كبير في الوضع. خلال أول إطارين بعد بدء محاكاة الفيزياء ، تظل قوة العضلات عند الحد الأقصى لتثبيت العقد بعد تطبيق دفعة لها. ثم تسترخي العضلات ، وتصبح قوتها 55٪ ، ثم تزيد عن 120 إطارًا ، تزداد القوة تدريجيًا لتصل إلى 100٪.

الخطوة الأخيرة كانت إضافة عقدتي تثبيت: الجبهة عند مستوى الصدر والظهر على مستوى الساقين. هذه العقد لها صلات ضلع بعقد ثابتة للصدر والحوض ، على التوالي ، وتشديد العقد غير المستقرة بالعضلات. العقد استقرار لها قيمة كتلة منخفضة وليس لديها تصادم مع الأرض ، على عكس العقد الأخرى.

في gif أدناه ، ترى النتيجة: حصلنا على فيزياء حتمية تمامًا ، مبنية على حسابات عدد صحيح ، تعمل بثبات بمعدل 60 إطارًا في الثانية ، حتى على أضعف الأجهزة التي ندعمها.

اتبع ألعاب Banzai على الشبكات الاجتماعية: Facebook ، Vkontakte ، Instagram ، LinkedIn
يحتاج فريق ألعاب Banzai إلى خبير متخصص في VFX. اقرأ المزيد عن الوظيفة الشاغرة هنا .