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