किस प्रकार के परिवर्तनीय प्रकार में खिलाड़ी की स्थिति डब्ल्यूडब्ल्यूडब्ल्यू जैसे एक MMORPG पर संग्रहीत होती है?


18

मैंने भी जे कार्मैक को इसके बारे में बात करते सुना ...

एक सॉफ्टवेयर एक खिलाड़ी की स्थिति को इतनी सटीकता से कैसे ट्रैक कर सकता है, इतनी बड़ी दुनिया पर होने के नाते, जोनों के बीच लोड किए बिना, और मल्टीप्लेयर स्केल पर? जब यह नेटकोड से गुजरता है तो डेटा कैसे फॉर्मेट किया जाता है?

मैं समझ सकता हूं कि ग्राफिक कार्ड की मेमोरी में वर्टिकल कैसे जमा होते हैं, लेकिन जब मल्टीप्लेयर को सिंक्रनाइज़ करने की बात आती है, तो मैं कल्पना नहीं कर सकता कि सबसे अच्छा क्या है।

जवाबों:


26

स्कॉट बिलास ने डंगऑन घेराबंदी पर काम किया और एक पत्र लिखा, "द कंटीन्यूअस वर्ल्ड ऑफ डंगऑन सीज" । जबकि कालकोठरी घेराबंदी एक MMO नहीं है, यह एक दुनिया है, और वह अपने कागज में खिलाड़ी की स्थिति के बारे में बात करता है। मुझे यह एक महान पढ़ने के लिए मिला। यहाँ प्रासंगिक अनुभाग है:

सटीक मुद्दा

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

फ्लोटिंग पॉइंट के साथ, आप मूल से जितना आगे बढ़ेंगे, उतनी ही सटीक खोएंगे, जिससे सभी तरह की समस्याएँ हो सकती हैं। चीजें सही तरह से नहीं होती हैं, आसन्न जाल के बीच दरारें दिखाई देती हैं, जगह की मात्रा बढ़ने लगती है और बिल्लियां और कुत्ते एक साथ रहना शुरू कर देते हैं। कालकोठरी घेराबंदी स्पष्ट प्रदर्शन लाभ के लिए एकल परिशुद्धता मोड में FPU का उपयोग करता है, और वीडियो हार्डवेयर की मूल परिशुद्धता से मिलान करने के लिए। हालांकि, भले ही हमने सटीकता को बढ़ा दिया, लेकिन अंततः यह समस्या को हल नहीं कर सका क्योंकि दुनिया की योजना बनाई गई थी, और अंत में, अविश्वसनीय रूप से बड़ी थी।

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

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

एक विशिष्ट नोड के सापेक्ष 3 डी स्थिति की अवधारणा को एनकैप्सुलेट करने के लिए, पारंपरिक (x, y, z) वेक्टर को नोड आईडी (x, y, z, नोड) के साथ संवर्धित करना होगा और मूल से एक ऑफसेट का प्रतिनिधित्व करना होगा। इसके बजाय एक विशिष्ट नोड का। इस 4-टुपल को घेराबंदी नोड स्थिति, या घेराबंदी के रूप में समझाया गया है। बाद में, हमने नोड्स के पार झुकाव के बीच तुलना को संभालने के लिए एक सीजेरोट (चतुर्धातुक, नोड) जोड़ा।

वाक्यांश "कोई विश्व स्थान नहीं है" टीम के लिए एक मंत्र बन गया, हालांकि यह शाब्दिक रूप से सभी के लिए पूरी तरह से ग्रॉस करने के लिए वर्षों का समय था जो इसका मतलब था।

आप यहां डंगऑन घेराबंदी पर उनके अधिक कागजात देख सकते हैं ।


यह एक बहुत गू जवाब लगता है! धन्यवाद ! मुझे आश्चर्य होता अगर आज का खेल जीएमपी के पूर्णांक की तरह सीमित संख्या का उपयोग करता।
जोक

3

एक विशाल क्षेत्रविहीन दुनिया के लिए मैं या तो एक डबल सटीक वर्टेक्स के लिए जाऊंगा, या फ्लोटिंग प्वॉइंट के साथ जमीन को विभाजित करूंगा।

प्रत्येक चंक में यह स्वयं समन्वय प्रणाली होगी। जब आप इनमें से प्रत्येक भाग को सीमा पार करते हैं तो आप उस समन्वय प्रणाली के लिए सब कुछ बदल देंगे। वैसे भी वे इसे फ्लाइट सिम में करते हैं।

यदि आपके पास छोटे क्षेत्र हैं, तो मुझे लगता है कि फ्लोट पर्याप्त होगा।


डबल परिशुद्धता जल्दी से विशाल प्रदर्शन और स्मृति लाभ प्रदान करता है। (x, y, z, ज़ोन) 16 बाइट्स है; (x, y, z) युगल कम से कम 24 होंगे। आप उन पर तेजी से गणित नहीं कर सकते हैं, और आप उन्हें ग्राफिक्स कार्ड पर उपयोग नहीं कर सकते।

खैर, फर्मी कार्ड दोहरी सटीकता का उपयोग कर सकते हैं;) लेकिन, हां, इस दृष्टिकोण का जवाब क्या है, इस बारे में कुछ भी बताया गया है।
नेलर

2

मैं वास्तविक स्थान के लिए कहूंगा कि यह 3 फ़्लोट्स का वेक्टर है। लेकिन खिलाड़ी के साथ-साथ एक जोन इंडेक्स भी होगा। (लेकिन स्थान का हिस्सा नहीं है क्योंकि उस ज़ोन सर्वर द्वारा नियंत्रित सब कुछ एक ही ज़ोन में है और इसलिए उसे उसी संरचना संरचना में रहने की आवश्यकता नहीं है।)

याद रखें कम से कम 4 जोन हैं। 4 प्रमुख महाद्वीप। मुझे नहीं लगता कि उनमें से कोई भी एक तरफ लगभग 10 किमी से अधिक है। उदाहरण के लिए, यह ब्लॉग नवीनतम विस्तार से पहले पूरे यात्रा-सक्षम क्षेत्र की गणना 41 वर्ग मील के रूप में करता है। युद्ध के मैदानों के, सभी उदाहरणों में से प्रत्येक अपने-अपने क्षेत्र में हैं और साथ ही अंतरिक्ष का समन्वय भी करते हैं।

LUA API का उपयोग करके आप खिलाड़ी की स्थिति प्राप्त कर सकते हैं GetPlayerMapPosition () पूरे विश्व के नक्शे के साथ एक अनुपात के रूप में 0 से 1 तक दो फ़्लोट लौटाता है।


1

वाह के लिए, मुझे उम्मीद है कि वे एक साधारण फ्लोट x / y / z का उपयोग करते हैं - लेकिन एक विशिष्ट 'ज़ोन' के सापेक्ष

यह 'चलती ज़ोन' को संभालने में मदद करेगा, उदाहरण के लिए, नावों और ज़ेपेलिंस


1

आमतौर पर ऑनलाइन गेम जैसे कि Wow, टिबिआ आदि खिलाड़ी पॉज़ को स्टोर करते हैं। SQl प्लेयर मेटा तालिका में तीन चर X + Y + Z का उपयोग करना। Runescape इसे Z के बिना करता है - इस तरह खिलाड़ी हमेशा ग्राउंड मेष के शीर्ष पर प्रदान किया जाता है।


मेटा टेबल क्या है? मुझे वास्तव में संदेह है कि यह इसे एक DB में संग्रहीत करेगा, इसे वास्तविक समय में उपयोग करने की आवश्यकता है ...
जोकून

(1) उस मामले में मेटा टेबल मूल चरित्र डेटा के साथ DB तालिका है, उदाहरण के लिए। लिंग, स्थिति xyz, स्वास्थ्य की मात्रा, बैंक में नकदी आदि और जो कुछ भी हो सकता है। (2) मैं ओपन टिबिया सर्वर की मेजबानी कर रहा हूं, इसमें प्लेयर पॉस को सर्वर कैश में संग्रहित किया जाता है। लेकिन ... हर 30 ~ s पर सर्वर सेव है और प्लेयर का POS प्लेयर्स मेटा डेटा में जोड़ा जाएगा। इसलिए यदि सर्वर बंद हो जाता है / क्रैश हो जाता है तो खिलाड़ियों की स्थिति डीबी स्थिति में वापस आ जाएगी :)
मिकोलाज मार्किज

-2

एक नाव? ठीक है, 3 डी गेम के लिए 3 की एक सरणी तैरती है। कम से कम हमारे लिए हम पैरों को इकाइयों के रूप में उपयोग करते हैं, इसलिए आपको केवल 3-4 दशमलव स्थानों पर होना चाहिए कि फ्लोट शोर एक समस्या नहीं है। यदि एक बड़ा क्षेत्र केवल एक मील या दो तरफ है, तो यह एक बड़ा सौदा नहीं है। के रूप में MMOs में पारदर्शी ज़ोनिंग के लिए, एक अलग सवाल है। एक पैराग्राफ में कठिन समस्याओं की भव्य योजना में, सूची पर भंडारण की स्थिति बहुत कम है।


विकास के दौरान कुछ बड़े एसटीओ क्षेत्रों में हमारे पास फ्लोटिंग पॉइंट सटीक मुद्दे थे। मुझे नहीं पता कि उनमें से क्या बन गया। यह सर्वोच्च प्राथमिकता नहीं हो सकती है, लेकिन इसे वास्तव में स्तर बनाने के लिए पर्याप्त रूप से जल्दी विचार करने की आवश्यकता है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.