एक उन्नत भौतिकी सॉल्वर के साथ सिमुलेशन और प्रदर्शन में सुधार


2016 में, हमने नए भौतिकी प्रतिबंधों के विविध सेट के लिए समर्थन जोड़ा, जिससे डेवलपर्स को नए सॉल्वर में माइग्रेट करने के लिए प्रोत्साहित किया गया और भौतिकी इंजन की रचनात्मक क्षमताओं का विस्तार हुआ। किसी भी नए स्थान में डिफ़ॉल्ट रूप से PGS सॉल्वर का उपयोग किया गया, साथ ही क्लासिक सॉल्वर पर वापस जाने का विकल्प भी था।
हमने मध्य-2018 में हाइब्रिड LDL-PGS सॉल्वर के परिचय के साथ उच्च द्रव्यमान अंतर और जटिल तंत्रों से जुड़ी कुछ स्थिरता समस्याओं को सुलझाया। इसने पुराने सॉल्वर को अप्रचलित बना दिया, और इसे 2019 में पूरी तरह से अक्षम कर दिया गया, जिससे सभी जगहें स्वचालित रूप से PGS पर माइग्रेट हो गईं।
2019 में, मल्टी-थ्रेडिंग का उपयोग करके प्रदर्शन में और सुधार किया गया, जो सिमुलेशन को सिमुलेट किए जा रहे हिस्सों के जुड़े द्वीपों वाले जॉब्स में विभाजित करती है। हमें अभी भी LDL से संबंधित प्रदर्शन समस्याएं थीं, जिन्हें हमने अंततः 2020 की शुरुआत में हल कर दिया।
भौतिकी इंजन को अभी भी प्रदर्शन के लिए बेहतर और अनुकूलित किया जा रहा है, और हम निकट भविष्य में नई सुविधाएँ जोड़ने की योजना बना रहे हैं।
भौतिकी के नियमों को लागू करना

एक फिजिक्स इंजन का मुख्य उद्देश्य एक आभासी वातावरण में पिंडों की गति का अनुकरण करना है। हमारे फिजिक्स इंजन में, हम उन पिंडों पर ध्यान केंद्रित करते हैं जो कठोर हैं, जो एक-दूसरे से टकराते हैं और जिनमें एक-दूसरे के साथ प्रतिबंध होते हैं।
एक फिजिक्स इंजन दो चरणों में व्यवस्थित होता है: टकराव का पता लगाना और हल करना। टकराव का पता लगाने वाला चरण कठोर पिंडों से संबंधित ज्यामिति के बीच प्रतिच्छेदन खोजता है, जिससे टकराव के बिंदु, सामान्य तल और प्रवेश की गहराई जैसी उपयुक्त टकराव जानकारी उत्पन्न होती है। फिर एक सॉल्वर, पता लगाए गए टकरावों और उपयोगकर्ता द्वारा प्रदान की गई बाधाओं के प्रभाव में कठोर पिंडों की गति को अपडेट करता है।

यह गति हल करने वाले (solver) द्वारा भौतिकी के नियमों, जैसे ऊर्जा और संवेग का संरक्षण, की व्याख्या का परिणाम है। लेकिन इसे 100% सटीकता से करना अत्यधिक महंगा है, और वास्तविक समय में इसे सिम्युलेट करने का तरीका प्रदर्शन बढ़ाने के लिए अनुमान लगाना है, बशर्ते परिणाम भौतिक रूप से यथार्थवादी हो। जब तक गति के मूलभूत नियम एक उचित सहनशीलता के भीतर बनाए रखे जाते हैं, यह समझौता कंप्यूटर गेम सिमुलेशन के लिए पूरी तरह से स्वीकार्य है।
छोटे कदम उठाना
फिजिक्स इंजन का मुख्य विचार टाइम-स्टेपिंग का उपयोग करके गति को डिस्क्रेटाइज़ करना है। प्रतिबंधित और अप्रतिबंधित कठोर पिंडों की गति के समीकरणों को सीधे और सटीक रूप से एकीकृत करना बहुत मुश्किल होता है। डिस्क्रेटाइज़ेशन गति को छोटे समय अंतरालों में विभाजित करता है, जहाँ समीकरणों को सरल और रैखिक बनाया जाता है, जिससे उन्हें लगभग हल करना संभव हो जाता है। इसका मतलब है कि प्रत्येक समय चरण के दौरान, किसी प्रतिबंध में शामिल कठोर पिंडों के संबंधित भागों की गति को रैखिक रूप से अनुमानित किया जाता है।

हालाँकि एक रैखिकीकृत समस्या को हल करना आसान होता है, यह घूर्णी गति जैसी गैर-रैखिक व्यवहारों वाले सिमुलेशन में ड्रिफ्ट उत्पन्न करती है। बाद में हम उन शमन विधियों को देखेंगे जो ड्रिफ्ट को कम करने और सिमुलेशन को अधिक विश्वसनीय बनाने में मदद करती हैं।
समाधान


यह एनिमेशन दिखाता है कि एक PGS सॉल्वर पुनरावृत्ति प्रक्रिया के प्रत्येक चरण में शरीरों की स्थितियों को कैसे बदलता है, जिसका उद्देश्य ऐसी स्थितियाँ खोजना है जो बॉल और सॉकेट प्रतिबंधों का सम्मान करते हुए प्रत्येक चरण पर द्रव्यमान के केंद्र को संरक्षित रखें (यह IK ड्रैगर द्वारा उपयोग किया जाने वाला एक प्रकार का स्थिति सॉल्वर है)। हालांकि इस उदाहरण का एक सरल विश्लेषणात्मक समाधान है, यह PGS के पीछे के विचार का एक अच्छा प्रदर्शन है। प्रत्येक चरण पर, सॉल्वर एक बाधा को स्थिर करता है और दूसरी को टूटने देता है। कुछ पुनरावृत्तियों के बाद, पिंड अपनी सही स्थिति के बहुत करीब आ जाते हैं। इस विधि की एक विशेषता यह है कि कुछ कठोर पिंड अपनी अंतिम स्थिति के चारों ओर कंपन करते हुए प्रतीत होते हैं, खासकर जब भारी पिंडों के साथ युग्मन क्रियाएं होती हैं। यदि हम पर्याप्त पुनरावृत्तियाँ नहीं करते हैं, तो पीला हिस्सा स्पष्ट रूप से एक अमान्य स्थिति में रह सकता है जहाँ इसकी दो बाधाओं में से एक का गंभीर रूप से उल्लंघन होता है। इसे उच्च द्रव्यमान अनुपात समस्या कहा जाता है, और यह भौतिकी इंजनों के लिए एक बड़ी समस्या रही है क्योंकि यह अस्थिरता और विस्फोटों का कारण बनती है। यदि हम बहुत अधिक पुनरावृत्तियाँ करते हैं, तो सॉल्वर बहुत धीमा हो जाता है, और यदि हम नहीं करते हैं तो यह अस्थिर हो जाता है। दोनों पक्षों के बीच संतुलन बनाना एक दर्दनाक और लंबी प्रक्रिया रही है।
निवारण रणनीतियाँ
एक सॉल्वर में गलतताओं के दो प्रमुख स्रोत होते हैं: टाइम-स्टेपिंग और पुनरावृत्ति समाधान (फ्लोटिंग पॉइंट ड्रिफ्ट भी होता है लेकिन यह पहले दो की तुलना में मामूली है)। ये गलतियाँ सिमुलेशन में त्रुटियाँ उत्पन्न करती हैं, जिससे यह सही पथ से भटक जाता है। इस ड्रिफ्ट का कुछ हिस्सा सहनीय है, जैसे कि थोड़ी अलग वेग या ऊर्जा का नुकसान, लेकिन कुछ नहीं है, जैसे कि अस्थिरता, बड़ी ऊर्जा वृद्धि या विस्थापित प्रतिबंध।

इसलिए सॉल्वर में अधिकांश जटिलता गणनात्मक अशुद्धियों के प्रभाव को कम करने के तरीकों के कार्यान्वयन से आती है। हमारा अंतिम कार्यान्वयन कुछ पारंपरिक और कुछ नवीन शमन रणनीतियों का उपयोग करता है:
- वार्म स्टार्टिंग: पुनरावृत्तिशील सॉल्वर की अभिसरण दर बढ़ाने के लिए पिछले समय-चरण के समाधान से शुरुआत करना
- पोस्ट-स्टेबलाइज़ेशन: सिस्टम को प्रतिबंध मैनिफोल्ड पर वापस प्रोजेक्ट करना ताकि प्रतिबंध ड्रिफ्ट को रोका जा सके
- नियमितीकरण: बाधाओं का अनुपालन जोड़ना, यह सुनिश्चित करना कि कोई समाधान मौजूद है और वह अद्वितीय है
- पूर्व-अवस्थाकरण: एक रैखिक उप-प्रणाली के सटीक समाधान का उपयोग करना, जिससे जटिल तंत्रों की स्थिरता में सुधार होता है
रणनीतियाँ 1, 2 और 3 काफी पारंपरिक हैं, लेकिन 3 में हमने सुधार किया है और इसे परिपूर्ण बनाया है। साथ ही, यद्यपि 4 कोई नई बात नहीं है, हमने इसका कोई व्यावहारिक कार्यान्वयन नहीं देखा है। हम बड़े विरल प्रतिबंध मैट्रिक्स के लिए एक मौलिक फैक्टरेशन विधि और इसे PGS के साथ संयोजित करने का एक नया कुशल तरीका उपयोग करते हैं। परिणामी कार्यान्वयन शुद्ध PGS की तुलना में केवल थोड़ा धीमा है, लेकिन यह सुनिश्चित करता है कि समानता प्रतिबंधों से आने वाली रैखिक प्रणाली का सटीक समाधान निकाला गया है। परिणामस्वरूप, समानता प्रतिबंध केवल समय विखंडन से आने वाली ड्रिफ्ट से ही प्रभावित होते हैं। हमारी विधियों का विवरण मेरी GDC 2020 प्रस्तुति में शामिल है। वर्तमान में, हम असमानता प्रतिबंधों और टकरावों पर लागू प्रत्यक्ष विधियों की जांच कर रहे हैं।
अधिक विवरण प्राप्त करें
परंपरागत रूप से संयुक्त यंत्रों के लिए दो गणितीय मॉडल हैं: एक हैं फीदरस्टोन द्वारा शुरू किए गए अपवर्जित निर्देशांक विधियाँ, जो प्रत्येक जोड़ पर स्वतंत्रता की डिग्री को पैरामीटराइज़ करती हैं, और दूसरे हैं पूर्ण निर्देशांक विधियाँ जो एक लाग्रांजियन रूपरेखा का उपयोग करती हैं।
हम दूसरे सूत्रीकरण का उपयोग करते हैं क्योंकि यह कम प्रतिबंधात्मक है और इसके लिए बहुत सरल गणित और कार्यान्वयन की आवश्यकता होती है।
रॉब्लॉक्स इंजन प्रतिबंधों की गतिशील प्रतिक्रिया की गणना करने के लिए विश्लेषणात्मक विधियों का उपयोग करता है, जो पहले उपयोग की जाने वाली पेनल्टी विधियों के विपरीत है। विश्लेषणात्मक विधियों को पहली बार बाराफ 1989 में पेश किया गया था, जहाँ उनका उपयोग समानता और असमानता दोनों प्रतिबंधों को एक सुसंगत तरीके से संबोधित करने के लिए किया जाता है। बाराफ ने देखा कि संपर्क मॉडल को द्विघात प्रोग्रामिंग का उपयोग करके तैयार किया जा सकता है, और उन्होंने एक ह्यूरिस्टिक समाधान विधि प्रदान की (जो हमारी सॉल्वर में उपयोग की जाने वाली विधि नहीं है)।
बल-आधारित फॉर्मूलेशन का उपयोग करने के बजाय, हम वेग-स्थान में एक इम्पल्स-आधारित फॉर्मूलेशन का उपयोग करते हैं, जिसे मूल रूप से मिरटिच-कैनी 1995 द्वारा पेश किया गया था और स्टुअर्ट-ट्रिंकल 1996 द्वारा और बेहतर बनाया गया था, जो विभिन्न संपर्क प्रकारों के उपचार को एकीकृत करता है और घर्षण वाले संपर्कों के लिए समाधान के अस्तित्व की गारंटी देता है। प्रत्येक टाइमस्टेप पर, कंस्ट्रेंट इम्पल्स के कारण वेग में तात्कालिक परिवर्तनों को लागू करके बाधाओं और टकरावों को बनाए रखा जाता है। इम्पल्स-आधारित सिमुलेशन क्यों बेहतर है, इसका एक उत्कृष्ट स्पष्टीकरण कैटो 2014 की GDC प्रस्तुति में निहित है।
घर्षण रहित संपर्कों को बाराफ 1994 में वर्णित एक रैखिक पूरकता समस्या (LCP) का उपयोग करके मॉडल किया जाता है। घर्षण को प्रोजेक्टेड गॉस-साइडल के पुनरावृत्तियों के साथ अंतर्सूत्रित करते हुए, घर्षण शंकु पर एक गैर-रैखिक प्रक्षेपण के रूप में जोड़ा जाता है।
प्रतिबंधों में स्थिति संबंधी त्रुटियाँ उत्पन्न करने वाली संख्यात्मक ड्रिफ्ट को क्लाइन-पाई 2003 द्वारा पेश की गई छद्म-वेगों का उपयोग करके एक पोस्ट-स्टेबिलाइज़ेशन तकनीक के साथ हल किया जाता है। इसमें स्थिति क्षेत्र में एक दूसरे LCP को हल करना शामिल है, जो सिस्टम को वापस कंट्रेन्ट मैनिफोल्ड पर प्रक्षेपित करता है।
LCPs को कैटो 2005 (कैटो 2009 भी देखें) द्वारा लोकप्रिय किए गए PGS / इम्पल्स सॉल्वर का उपयोग करके हल किया जाता है। यह विधि पुनरावृत्तिशील है और प्रत्येक व्यक्तिगत बाधा को क्रमबद्ध तरीके से ध्यान में रखती है और उसे स्वतंत्र रूप से हल करती है। कई पुनरावृत्तियों के बाद, और आदर्श परिस्थितियों में, सिस्टम एक वैश्विक समाधान पर अभिसरित हो जाता है।
इसके अतिरिक्त, समानता बाधाओं में उच्च द्रव्यमान अनुपात की समस्याओं को समानता बाधाओं के बाधा मैट्रिक्स के विरल एलडीएल विघटन का उपयोग करके पीजीएस (PGS) को पूर्व-शर्त करके सुलझाया जाता है। बाधा मैट्रिक्स के सघन उप-मैट्रिक्स को एक विधि का उपयोग करके विरल किया जाता है जिसे हम बॉडी स्प्लिटिंग (Body Splitting) कहते हैं। यह बाराफ 1996 में उपयोग किए गए एलडीएल विघटन के समान है, लेकिन यह अधिक सामान्य यांत्रिक प्रणालियों की अनुमति देता है, और बाधा स्थान में प्रणाली को हल करता है। अधिक जानकारी के लिए, आप मेरी GDC 2020 प्रस्तुति देख सकते हैं।
हमारे सॉल्वर की संरचना गुएंडेलमैन-ब्रिडसन-फेडकीव के विचार का अनुसरण करती है, जहाँ वेग और स्थिति स्टेपिंग को कंट्रेन्ट समाधान द्वारा अलग किया जाता है। हमारी समय अनुक्रमण इस प्रकार है:
- वेग स्थान और स्थिति स्थान में प्रतिबंध समाधान
- वेग क्षेत्र और स्थिति क्षेत्र में प्रतिबंध समाधान
- स्थिति अग्रिम करना
इस योजना का यह फायदा है कि यह केवल मान्य वेगों को ही एकीकृत करती है, और बाहरी बल के अनुप्रयोग में विलंब को सीमित करती है, लेकिन संख्यात्मक ड्रिफ्ट के कारण प्रतिबंध के थोड़े से अनुभूत उल्लंघन की अनुमति देती है।
कठोर पिंड सिमुलेशन के लिए एक उत्कृष्ट संदर्भ 'एर्लेबेन 2005' नामक पुस्तक है, जिसे हाल ही में मुफ्त में उपलब्ध कराया गया है। आप भौतिकी-आधारित एनिमेशन पर ऑनलाइन व्याख्यान, फिजिक्स इंजन बनाने पर निल्सन सौतो का एक ब्लॉग, आधुनिक सॉल्वर विधियों पर एरिन कैटो की एक बहुत अच्छी जीडीसी प्रस्तुति, और बुलेट फिजिक्स फोरम और गेमडेव जैसे फोरम पा सकते हैं, जो प्रश्न पूछने के लिए उत्कृष्ट स्थान हैं।
निष्कर्ष में
गेम फिजिक्स सिमुलेशन का क्षेत्र कई दिलचस्प समस्याएं प्रस्तुत करता है जो रोमांचक और चुनौतीपूर्ण दोनों हैं। इसमें बहुत सारे शानदार गणित और भौतिकी को सीखने और आधुनिक अनुकूलन तकनीकों का उपयोग करने के अवसर हैं। यह गेम डेवलपमेंट का एक ऐसा क्षेत्र है जो गणित, भौतिकी और सॉफ्टवेयर इंजीनियरिंग को मजबूती से जोड़ता है।
भले ही रॉब्लॉक्स के पास एक अच्छा रिगिड बॉडी फिजिक्स इंजन है, फिर भी ऐसे क्षेत्र हैं जहाँ इसे बेहतर और अनुकूलित किया जा सकता है। साथ ही, हम फ्रैक्चरिंग, विकृति, सॉफ्टबॉडी, क्लॉथ, एयरोडायनामिक्स और वॉटर सिमुलेशन जैसी रोमांचक नई परियोजनाओं पर काम कर रहे हैं।
न तो रॉब्लॉक्स कॉर्पोरेशन और न ही यह ब्लॉग किसी भी कंपनी या सेवा का समर्थन या अनुमोदन करता है। साथ ही, इस ब्लॉग में निहित जानकारी की सटीकता, विश्वसनीयता या पूर्णता के संबंध में कोई गारंटी या वादा नहीं किया जाता है।
यह ब्लॉग पोस्ट मूल रूप से Roblox Tech Blog पर प्रकाशित हुई थी।


