2009-04-17 9 views
5

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

केवल एक चीज है जो मुझे नहीं पता (अच्छी तरह से, तकनीकी रूप से, मुझे इसके लिए एक समाधान पता है, लेकिन मुझे उम्मीद है कि कुछ और सुरुचिपूर्ण और तेज है): असल में, मेरे पास प्रत्येक भाग के लिए एक अलग धागा है मेरे इंजन - ग्राफिक्स, इनपुट, भौतिकी, ऑडियो, आदि

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

मेरे पास इस डेटा को स्थानांतरित करने के लिए घटक हैं, केवल समस्या ही उत्पन्न कर रही है।

अब तक, मैं दो अलग-अलग दृष्टिकोण के बारे में सोचा है

  • हर अद्यतन के लिए पूरी संरचना कॉपी - बहुत ही सरल है, लेकिन संभवतः समय और स्मृति intensife (मैं बड़े इंजन के साथ अनुभव नहीं है - होगा इस व्यवहार्य हो?)
  • नज़र रखें, जिन्हें दृश्य के कुछ हिस्सों कुछ झंडे के साथ दृश्य नोड्स चिह्नित करके बदल गया है, और बदल हिस्सों पर तो केवल कॉपी करने

दृष्टिकोण एक स्मृति का एक बड़ा राशि की नक़ल की, लेकिन बिना प्रसंस्करण पाउ के आर, दो दृष्टिकोण रिवर्स करेंगे: प्रसंस्करण शक्ति के बहुत सारे, कम स्मृति की प्रतिलिपि बनाई गई।

क्या कोई सामान्य उत्तर है कि एक सामान्य गेमिंग वातावरण में कौन सा दृष्टिकोण तेज होगा?

उत्तर

4

नहीं, कोई स्वीकार्य सामान्य उत्तर नहीं है, यह गेम विकास में अनुसंधान का एक वर्तमान क्षेत्र है।

मेरा 2 सेंट पारंपरिक ज्ञान है - जो वास्तव में उपयोग करने के लिए आपके विशिष्ट उपयोग मामले पर निर्भर करता है - यदि आपके गेम में बहुत सारे डेटा हैं (यानी यह अधिकांश स्मृति गहन है, जैसे अधिकांश ब्लॉकबस्टर शीर्षक), तो आप शायद चाहेंगे बस परिवर्तनों को प्रेषित करें। यदि आपका गेम स्मृति गहन नहीं है (उदाहरण के लिए, आर्केड गेम्स), तो आप शायद पूरी वस्तु को कॉपी करने से दूर हो सकते हैं।

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

+0

कुछ सिद्धांत: डीडीआर 2-1066 रैम की पीक ट्रांसफर दर 8533 एमबी/एस है, और मुझे प्रति सेकेंड कम से कम 100 अपडेट चाहिए, इसलिए, एक अपडेट 85 एमबी से छोटा होना चाहिए। आईडी के रूप में 32 बिट इन्ट्स का उपयोग करते हुए, एक भौतिकी नोड को कम से कम 32 बाइट्स (स्थिति और अभिविन्यास के लिए कम से कम 4 अद्वितीय आईडी के लिए) होना चाहिए। 10.000 ऑब्जेक्ट्स को उतारना, इसका मतलब प्रति अपडेट प्रतिलिपि बनाने के लिए 312,5 केबी होगा (अधिकतम का 0,3%) हालांकि, इसमें नोड पदानुक्रम के लिए ओवरहेड शामिल नहीं है। आसानी से संभव होना चाहिए। – Mononofu

संबंधित मुद्दे