فيزياء الهزة
مكتبة فيزياء الجسم الصلبة والكشف عن التصادم. مناسبة للألعاب وتطبيقات VR. تستخدم من قبل Horizon Forbidden West.
|
|---|
| مقطع فيديو على YouTube يعرض كومة Ragdoll محاكاة مع فيزياء Jolt. |
لمزيد من العروض التجريبية ومقاطع الفيديو ، انتقل إلى قسم العينات.
اعتبارات التصميم
لماذا تخلق محرك فيزياء آخر؟ أولاً ، لقد كان مشروع تعلم شخصي. ثانياً ، أردت معالجة بعض المشكلات التي واجهتها مع محركات الفيزياء الحالية:
- الألعاب تفعل أكثر من محاكاة الفيزياء. هذه الأشياء تحدث عبر خيوط متعددة. نؤكد على الوصول إلى بيانات الفيزياء في وقت واحد خارج تحديث المحاكاة الرئيسية:
- يمكن تحميل / تفريغ أقسام المحاكاة في الخلفية. نقوم بإعداد مجموعة من أجسام الفيزياء على موضوع خلفية دون قفل أو التأثير على المحاكاة. نقوم بإدخال الدفعة في المحاكاة مع الحد الأدنى من التأثير على الأداء.
- يمكن أن تعمل استعلامات التصادم بالتوازي مع إضافة / إزالة أو تحديث الجسم. إذا حدث تغيير في الجسم على نفس الخيط ، فسيكون التغيير مرئيًا على الفور. إذا حدث التغيير في موضوع آخر ، فسيرى الاستعلام متسقًا قبل أو بعد الحالة. البديل هو الحصول على نسخة قراءة وكتابة من العالم. هذا يمنع التغييرات من أن تكون مرئية على الفور ، لذلك نتجنب ذلك.
- يمكن أن تعمل استعلامات التصادم بالتوازي مع محاكاة الفيزياء الرئيسية. نقوم بفحص خشن (استعلام واسع الطور) قبل خطوة المحاكاة ونقوم بفحوصات دقيقة (استعلام مرحلة ضيقة) في الخلفية. وبهذه الطريقة ، يمكن أن تنتشر العمليات طويلة المدى (مثل توليد شبكة التنقل) عبر إطارات متعددة.
- تسبب الاستيقاظ العرضي للهيئات مشاكل في الأداء عند تحميل / تفريغ المحتوى. لذلك ، لن تستيقظ الهيئات تلقائيًا عند إنشائها. لن يتم إيقاظ الجثث المجاورة عند إزالة الجثث. يمكن تشغيل هذا يدويًا إذا رغبت في ذلك.
- المحاكاة تعمل بشكل حتمي. يمكنك تكرار محاكاة لعميل عن بُعد عن طريق تكرار المدخلات فقط إلى المحاكاة. اقرأ قسم المحاكاة الحتمية لفهم الحدود.
- نحاول محاكاة سلوك الأجسام الصلبة في العالم الحقيقي ولكننا نقوم بالتقريب. لذلك ، يجب استخدام هذه المكتبة بشكل أساسي للألعاب أو محاكاة VR.
سمات
- محاكاة الأجسام الصلبة من أشكال مختلفة باستخدام اكتشاف التصادم المستمر:
- جسم كروي
- صندوق
- كبسولة
- مدبب القبش
- اسطوانة
- أسطوانة مدبب
- بدن محدب
- طائرة
- مُجَمَّع
- شبكة (مثلث)
- التضاريس (حقل الارتفاع)
- محاكاة القيود بين الهيئات:
- مُثَبَّت
- نقطة
- المسافة (بما في ذلك الينابيع)
- مفصل
- شريط التمرير (يسمى أيضًا المنشور)
- مخروط
- الرف والترس
- العتاد
- بكرة
- مسارات خطية ناعمة
- Swing-Twist (للكتفين البشريين)
- 6 DOF
- المحركات لقيادة القيود.
- اكتشاف التصادم:
- أشعة الصب.
- اختبار الأشكال مقابل الأشكال.
- صب شكل مقابل شكل آخر.
- يختبر Broadphase فقط لتحديد الكائنات التي قد تتقاطع بسرعة.
- أجهزة استشعار (مجلدات الزناد).
- Ragdolls المتحركة:
- مفتاح صلب (حركية فقط الأجسام الصلبة).
- مفتاح للذنب (وضع سرعات على الأجسام الصلبة الديناميكية).
- محركات قيادة القيود إلى الرسوم المتحركة.
- تعيين هيكل عظمي تفاصيل عالية (الرسوم المتحركة) على هيكل عظمي منخفض التفاصيل (ragdoll) والعكس صحيح.
- محاكاة شخصية اللعبة (كبسولة)
- شخصية الجسم الصلبة. يتحرك خلال محاكاة الفيزياء. أرخص خيار واستجابة تصادم أكثر دقة بين الشخصية والهيئات الديناميكية.
- الطابع الافتراضي. ليس لديه جسم جامد في المحاكاة ولكنه يحاكي واحد باستخدام فحص الاصطدام. تم تحديثه خارج تحديث الفيزياء لمزيد من التحكم. تفاعل أقل دقة مع الهيئات الديناميكية.
- المركبات
- المركبات بعجلات.
- مركبات تتبع.
- الدراجات النارية.
- محاكاة الجسم الناعمة (مثل كرة ناعمة أو قطعة من القماش).
- قيود الحافة.
- قيود الانحناء dihedral.
- قيود حجم رباعي السطوح.
- قيود المرفق طويلة المدى (تسمى أيضا tethers).
- الحد من المحاكاة للبقاء في نطاق معين من قمة البشرة.
- الضغط الداخلي.
- الاصطدام مع أجسام جامدة محاكاة.
- اختبارات الاصطدام ضد الأجسام اللينة.
- حسابات طفو الماء.
- وضع دقة مزدوجة اختيارية يسمح بعوالم كبيرة.
المنصات المدعومة
- Windows (سطح المكتب أو UWP) x86/x64/ARM32/ARM64
- Linux (تم اختباره على Ubuntu) x64/ARM64
- FreeBsd
- Android X86/X64/ARM32/ARM64
- منصة Blue (وحدة تحكم لعبة شهيرة) x64
- ماكوس X64/ARM64
- iOS X64/ARM64
- MSYS2 Mingw64
- Webassembly ، انظر هذا المشروع المنفصل.
مطلوب ميزات وحدة المعالجة المركزية
- في x86/x64 ، فإن الحد الأدنى من المتطلبات هي SSE2. يمكن تجميع المكتبة باستخدام SSE4.1 أو SSE4.2 أو AVX أو AVX2 أو AVX512.
- على ARM64 تستخدم المكتبة النيون و FP16. على ARM32 يمكن تجميعه دون أي تعليمات خاصة وحدة المعالجة المركزية.
الوثائق
لمعرفة المزيد حول Jolt ، انتقل إلى أحدث وثائق الهندسة المعمارية وواجهة API. تتوفر توثيق لإصدار معين أيضًا.
للبدء ، انظر إلى مثال HelloWorld. مثال على HelloWorld باستخدام Cmake FetchContent متاح أيضًا لإظهار كيف يمكنك دمج فيزياء Jolt في مشروع Cmake.
يتم وصف بعض الخوارزميات التي تستخدمها JOLT بالتفصيل في نقاش GDC 2022 الخاص بي: Ergrenging Jolt Physics لـ "Horizon Forbidden West" (الشرائح ، مع ملاحظات السماعات ، الفيديو).
التجميع
- يجمع مع Visual Studio 2019+ أو Clang 10+ أو GCC 9+.
- يستخدم C ++ 17.
- يعتمد فقط على مكتبة القالب القياسية.
- لا تستخدم RTTI.
- لا تستخدم الاستثناءات.
إذا كنت ترغب في التشغيل على منصة Blue ، فستحتاج إلى توفير بيئة البناء الخاصة بك و platformblue.h بسبب متطلبات NDA. هذا الملف متاح في منتدى Platform Blue Developer.
للحصول على تعليمات البناء ، انتقل إلى قسم الإنشاء. عند الترقية من إصدار أقدم من المكتبة ، انتقل إلى مذكرات الإصدار أو أقسام تغييرات API.
أداء
إذا كنت مهتمًا بكيفية قيام Jolt بحجارة مع وحدات المعالجة المركزية المتعددة والمقارنة مع محركات الفيزياء الأخرى ، فقم بإلقاء نظرة على هذا المستند.
هيكل المجلد
- الأصول - يحتوي هذا المجلد على الأصول التي يستخدمها TestFramework والعينات و joltviewer.
- Build - يحتوي على كل ما هو مطلوب لبناء المكتبة ، انظر قسم الإنشاء.
- مستندات - تحتوي على وثائق للمكتبة.
- HelloWorld - تطبيق بسيط يوضح كيفية استخدام مكتبة فيزياء Jolt.
- Jolt - جميع التعليمات البرمجية المصدر للمكتبة موجودة في هذا المجلد.
- JoltViewer - من الممكن تسجيل إخراج محرك الفيزياء باستخدام فئة DebugRenderErrecorder (ملف .jor) ، يحتوي هذا المجلد على رمز المصدر لتطبيق يمكنه تصور التسجيل. هذا مفيد لتصور إخراج الأداء من منصات مختلفة. متوفر حاليًا على Windows فقط.
- Performancetest - يحتوي على تطبيق بسيط يقوم بتشغيل اختبار الأداء ويجمع معلومات التوقيت.
- العينات - هذا يحتوي على تطبيق العينة ، راجع قسم العينات. متوفر حاليًا على Windows فقط.
- TestFramework - إطار عرض لتصور نتائج محرك الفيزياء. تستخدم من قبل العينات و joltviewer. متوفر حاليًا على Windows فقط.
- unittests - مجموعة من اختبارات الوحدة للتحقق من صحة سلوك محرك الفيزياء.
- WebinCludes - عدد من موارد JavaScript المستخدمة من قبل إطار التنميط الداخلي لمحرك الفيزياء.
روابط للغات الأخرى
- ج هنا وهنا
- ج#
- جافا
- جافا سكريبت
- متعرج
التكامل في المحركات الأخرى
انظر قائمة المشاريع التي تستخدم فيزياء Jolt هنا.
رخصة
يتم توزيع المشروع بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.
مساهمات
جميع المساهمات موضع ترحيب! إذا كنت تنوي إجراء تغييرات أكبر ، فيرجى مناقشة أولاً في قسم مناقشة GitHub. بالنسبة للتغييرات غير التافهة ، نطلب منك موافقة اتفاق المساهم. عندما تقوم بإنشاء العلاقات العامة ، سيطالبك مساعد CLA بالتوقيع عليه.