मल्टीप्लेयर अंतरिक्ष विभाजन के लिए कुशल समाधान?


10

यह सवाल थोड़ा पेचीदा है, लेकिन मैं इसे स्पष्ट करने की कोशिश करूंगा।

आइए हम कहते हैं कि मैं एक ऑनलाइन गेम का निर्माण कर रहा हूं (MMO- पैमाने पर नहीं), लेकिन यह एक आधिकारिक सर्वर दृष्टिकोण में अधिक से अधिक खिलाड़ियों का समर्थन करता है। मुझे बहुत सारे एआई सिम्युलेटेड दुश्मनों के साथ वास्तव में बड़ी दुनिया चाहिए।

मुझे कुछ CPU के बारे में पता है जो सर्वर CPU को अंतरिक्ष को विभाजित करके सहेजने और प्रसंस्करण की आवश्यकता नहीं है। मैंने पहले ही दुनिया को क्षेत्रों से अलग कर दिया है, जिसके लिए लोडिंग समय और छोटे संक्रमण की आवश्यकता होगी, जो मुझे लगता है कि स्थानीय स्तर पर (अकेले या कुछ दोस्तों के साथ भी) खेलते समय गेमप्ले की गुणवत्ता बनाए रखना महत्वपूर्ण है। मुझे उम्मीद नहीं है कि खिलाड़ी एक या दो से अधिक क्षेत्रों में होंगे।

समस्या यह है कि एक क्षेत्र बहुत बड़ा हो सकता है, और एक बार में बहुत सारे एनपीसी अनुकरण कर सकते हैं। खिलाड़ियों के अनुभव को प्रभावित किए बिना मैं इसे कैसे संभाल सकता हूं? प्रति क्षेत्र और समान रूप से एक सर्वर जैसे दृष्टिकोण तालिका में नहीं हैं।

मैं मुख्य रूप से दुश्मनों की भीड़ को पकड़ने के लिए डेटा संरचनाओं की तलाश कर रहा हूं, और यहां तक ​​कि शांतिपूर्ण एनपीसी भी। प्रश्न को अंतिम रूप देने के लिए, कृपया ध्यान दें कि वाहन मौजूद हैं, इसलिए एक क्षेत्र के भीतर यात्रा करने के लिए काफी तेज है, "जब" को प्रभावित करने वाले क्षेत्रों को प्रभावित करता है।


क्या आप केवल एक भौतिक सर्वर तक सीमित हैं?
पैट्रिक ह्यूजेस

अंततः, नहीं। लेकिन सादगी और साध्यता दोनों के लिए, अभी के लिए, मैं इस परियोजना को और अधिक जटिल नहीं कर सकता :)
ग्रिम्सहॉ

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

मैं आपकी बात से पूरी तरह सहमत हूँ, और शायद मैं अपने प्रश्न में कुछ चूक गया हूँ। क्या होगा अगर बॉक्स 'सेल के दाईं ओर एक खिलाड़ी है, और दाईं पड़ोसी सेल के बाईं ओर एक और है? उन्हें एक दूसरे को देखना चाहिए! दुनिया का खेल वाह जैसे खेल के लिए जारी है। यह वही है जो मुझे समझ में नहीं आता है, इसे कुशल रखते हुए एक निरंतर विश्व ग्रिड कैसे बनाया जाए? निश्चित रूप से ऐसे हालात हैं जब दो "सर्वर" के खिलाड़ियों को एक-दूसरे को देखना चाहिए :)
ग्रिम्सव

1
और हाँ, अगर आप दोनों के पास बहुत सारा सामान होने वाला है और आपके ऊपर बहुत सारे खिलाड़ी वास्तव में हर जगह और हर समय सक्रिय रहने के लिए योजना बना रहे हैं, तो कोई जादुई तरीका नहीं है। यही कारण है कि एक MMO सर्वर समूह के एकल बक्से केवल 200-500 खिलाड़ियों को अधिकतम सेवा देते हैं और NPCs के लिए MMO AI पैथेटिक रूप से बेवकूफ (गणना करने के लिए सस्ता उर्फ) है।
पैट्रिक ह्यूजेस

जवाबों:


5

जो मैं समझता हूं कि आपके पास आपके सर्वर पर किसी प्रकार की भौतिकी चल रही होगी।

यदि ऐसा है तो अंतरिक्ष विभाजन के अलावा AI / भौतिकी के लिए अन्य तकनीकें भी उपलब्ध हैं। अधिक से कम स्पष्ट करने के लिए:

  • प्राथमिकता: खिलाड़ियों के साथ कोई सीधा संवाद नहीं करने वाले एनपीसी अपने रिफ्रेश रेट को कम करके सीपीयू समय प्राप्त कर सकते हैं। आप प्राथमिकता वाली कतारों का उपयोग कर सकते हैं और पहली से आखिरी तक उच्च प्राथमिकता के साथ कतारों को चला सकते हैं, जबकि अन्य कतारें प्रत्येक चक्र की केवल 1/2, 1/4 या 1/8 चलेंगी। इस तरह से आप यह सुनिश्चित करते हैं कि प्रत्येक वस्तु किसी न किसी बिंदु पर चलती है लेकिन आप सीपीयू की खपत को कम करते हैं।
  • भौतिकी को भी कम किया जा सकता है (केवल टकराव के बक्से और क्षेत्रों का उपयोग घूमते समय और दृष्टि से दूर किया जा सकता है)।
  • खिलाड़ियों के दूर रहने के दौरान एनपीसी और पर्यावरण को बहुत बुनियादी व्यवहार आवंटित करके एआई / सिमुलेशन को सरल बनाना। आमतौर पर यह शिकार करने, इकट्ठा करने, खेती करने के बजाय दुश्मनों के लिए घूमता या स्कैन करता होगा ...
  • कुछ भौतिकी और एआई को ग्राहकों को भी सौंपा जा सकता है। यदि आपको सर्वर पर वास्तव में सीपीयू की कमी है, तो आप ऑब्जेक्ट को आंशिक रूप से हल होने के रूप में टैग कर सकते हैं और ग्राहक उन वस्तुओं की भौतिकी और स्थिति को स्थानीय रूप से समायोजित करेंगे (फ्लोटिंग एनपीसी से बचने के लिए)। क्लाइंट को AI चलाने में कुछ ज़िम्मेदारी दी जा सकती है (एक खिलाड़ी के खिलाफ़ लड़ाई के दौरान लक्षित खिलाड़ी का डिवाइस सीधे हमलावर NPCs चला सकता है)
  • खिलाड़ियों के लिए, सर्वर पर भौतिकी को भी कम किया जा सकता है और ग्राहकों को टकराव के समाधान में अधिक जिम्मेदारी मिलेगी। Ex: आप अपने वाहन के साथ एक वस्तु को मारते हैं, सर्वर केवल टकराव के बक्से पर टकराव को हल करेगा और टकराव में संभावित रूप से वस्तुओं को टैग करेगा। क्लाइंट एक टाइमस्टैम्प के साथ सर्वर को रिज़ॉल्यूशन भेजेगा जो ऑब्जेक्ट्स टैग किए जाने पर इसे स्वीकार करेगा और समाधान सही लगता है।

एक बार जब आप इन तंत्रों को लागू कर लेते हैं तो आप यह तय कर सकते हैं कि आपको उनकी कितनी और कितनी बार जरूरत है। इसके बारे में महान बात यह है कि बाद में आप कुछ सर्वर जोड़ सकते हैं जो क्लाइंट एप्लिकेशन के बजाय कुछ कार्यों को संभालने में सक्षम होंगे।

निश्चित रूप से अनुमानित टकराव का पता लगाने से कुछ विपथन पैदा होंगे, लेकिन आप समय-समय पर और अधिक सटीक जोड़कर उन्हें हल करने में सक्षम होंगे।

इसके अलावा भौतिकी के बारे में आपको उन कार्यों पर ध्यान देना चाहिए जो ओपनसीएल या सीयूडीए जैसे जीपीजीपीयू प्रणाली के कुछ प्रकार का समर्थन करते हैं यदि आपके पास किसी सर्वर तक पहुंच है जो या तो समर्थन करता है।


प्राथमिकता वाले अपडेट के साथ एक क्षेत्र के अंतरिक्ष विभाजन का संयोजन ठीक वैसा ही होना चाहिए जैसा कि मुझे चाहिए, खिलाड़ियों की थोड़ी मात्रा के लिए इष्टतम, और बहुत सारे क्षेत्रों के लोड होने पर अभी भी अनुकूलित। धन्यवाद।
ग्रिम्सव

@DevilWithin इसे मदद करनी चाहिए, और इसके लिए क्लाइंट की तरफ से बदलाव की आवश्यकता नहीं है। मैंने उत्तर में कुछ और विवरण भी जोड़े।
कोयोट

सरलीकृत ऐ एक अद्भुत विचार है। जबकि NPC खिलाड़ियों से बहुत दूर है, उन्हें ज्यादातर मामलों में आगे बढ़ने के अलावा कुछ भी करने की आवश्यकता नहीं है। इसका मतलब है कि मैं बस एक ही कर सकता हूं कि वे क्या कर रहे हैं, हर 1 मिनट या कुछ और, बस उन्हें दुनिया भर में घूमने के लिए .. उन्हें लाश के रूप में कल्पना करते हुए, वे ऐसा करेंगे!
ग्रिम्सव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.