इस प्रोजेक्ट के बारे में

Rust के लिए BepuPhysics एक लाइन-बाय-लाइन अनुवाद है, जो अपने लेखक द्वारा C# में लिखे गए एक अत्यधिक प्रदर्शन वाले फिजिक्स इंजन के रूप में वर्णित किया गया है। इस पोर्ट में मूल की SIMD-ऑप्टिमाइज़्ड कोलीज़न डिटेक्शन और कंस्ट्रेंट सॉल्विंग की ध्यान देने का उद्देश्य है, जो बहु-थ्रेडिंग के लिए लॉक-फ्री कार्य योजना और स्वचालित कार्य वितरण जोड़ता है, और बेवी गेम इंजन के साथ वैकल्पिक एकीकरण प्रदान करता है। स्पेसियल क्वेरी समर्थन में फिल्टर किए गए रे कैस्ट और शेप स्वीप शामिल हैं। बिल्ड की आवश्यकताएं नोट करने योग्य हैं: क्रेट को Rust nightly 1.95.0 या नए की आवश्यकता है क्योंकि इसमें portable_simd और generic_const_exprs सुविधाएं उपयोग की जाती हैं, और यह macOS (NEON SIMD) या x86_64 (SSE/AVX2) को टारगेट करता है। स्थापना एक सामान्य Cargo निर्भरता है, जिसमें बेवी फीचर फ्लैग प्लगइन सक्षम करता है। बेवी पथ को सबसे सरल तरीके से शुरू करने के रूप में प्रस्तुत किया गया है। डिफ़ॉल्ट प्लगइन्स के साथ BepuPhysicsPlugin जोड़ा जाता है, ग्रेविटी को रिसोर्स के रूप में डाला जाता है, और बॉडीज़ को घटकों के साथ स्पॉन किया जाता है: डायनामिक, स्टेटिक और काइनेमेटिक बॉडीज़ के लिए RigidBody वेरिएंट; गोले, क्यूबॉइड, कैप्सूल और सिलिंडर के लिए कोलाइडर; और द्रव्यमान, घर्षण, पुनर्स्थापना और रैखिक या कोणीय डैम्पिंग के लिए सामग्री गुण। वेलोसिटी घटक फिजिक्स सिमुलेशन के साथ दो-दिशात्मक सिंक करते हैं। अतिरिक्त ट्यूनिंग घटकों में बॉडी-स्थानीय अक्षों के बारे में लॉक किया गया घूर्णन (जिसमें UPRIGHT प्रीसेट जो यौ खुला रखता है, और ALL प्रीसेट शामिल है), स्पेकुलेटिव मार्जिन जो एक सतह के आगे कितनी दूर संपर्क बनाए जाते हैं, स्लीप थ्रेशोल्ड और केवल स्पेसियल क्वेरी के लिए फिल्टरिंग के लिए उपयोग किए जाने वाले क्वेरी लेयर मास्क शामिल हैं। रिसोर्स में Gravity और BepuConfig शामिल हैं, जो टाइमस्टेप, सबस्टेप, थ्रेड काउंट और निर्धारण के लिए हैं, जो रिप्ले या नेटवर्किंग परिदृश्यों के लिए उपयोग किया जाता है। स्पेसियल क्वेरी को BepuSpatialQuery सिस्टम पैरामीटर के माध्यम से एक्सपोज़ किया गया है, जो सिमुलेशन को साझा मोड में लॉन्च करता है, इसलिए कई क्वेरी सिस्टम समान समय में चल सकते हैं, जिसमें प्रत्येक सिस्टम के लिए स्क्रैच मेमोरी आवंटित की जाती है। क्वेरी को फिजिक्स स्टेप सेट के बाहर योजना बनाई जानी चाहिए। API में सबसे निकटतम हिट और सभी हिट रे कैस्ट और शेप स्वीप शामिल हैं, जिसमें QueryFilter समर्थन करता है जो एंटिटी अपवर्जन, लेयर मास्क और स्टेटिक्स-सिर्फ या बॉडीज़-सिर्फ प्रतिबंधों के साथ है। README में एक SweepResult::StartPenetrating वेरिएंट को अलग से उल्लेख किया गया है जो ऐसे स्वीप के लिए है जो पहले से ही संपर्क में हैं: क्योंकि इस स्थिति में कोई समय के प्रभाव, संपर्क बिंदु या सामान्य परिभाषित नहीं है, इसलिए पोर्ट इसे एक निर्णय के लिए छोड़ता है। एंटिटी रिज़ॉल्यूशन को डॉक्यूमेंट किया गया है कि एक हैंडल के उपयोग से पहले एंटिटी की गतिमानता के आधार पर शाखाबद्ध किया जाता है, क्योंकि बॉडी और स्टेटिक हैंडल जिनकी वास्तविक मान एक हैं, असंबद्ध वस्तुओं को संदर्शित करते हैं। रिपोजिटरी में बेवी उदाहरण जैसे रेन, टावर और हेलो_फिजिक्स शामिल हैं, और यह दर्शाता है कि उन्हें रिलीज़ मोड में चलाना चाहिए क्योंकि डीबग बिल्ड बिना SIMD ऑप्टिमाइज़ेशन के 10 से 100 गुना धीमे होते हैं। तुलना बेंचमार्क एक अलग bepu-benchmarks कार्यक्षेत्र सदस्य में हैं ताकि उनके भारी, प्लेटफॉर्म-विशिष्ट निर्भरताएं लाइब्रेरी से बाहर रहें; इनमें Avian की तुलना और एक वैकल्पिक csharp सुविधा के पीछे, मूल C# BepuPhysics के साथ FFI के माध्यम से एक ही सीन चलाया जाता है। यह सुविधा वैकल्पिक रहती है क्योंकि इसकी मूल निर्भरता MSVC पर लिंक नहीं हो पाती। प्रोजेक्ट को Apache 2.0 लाइसेंस के तहत जारी किया गया है, जो मूल BepuPhysics v2 के समान है, और इसमें रॉस नॉर्डबी को मूल लेखक के रूप में उल्लेख किया गया है, जबकि बेवी वाला वार्पर एवियन फिजिक्स इंजन के डिज़ाइन के आधार पर बनाया गया है।