2012-06-29 14 views
7

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

सी ++ के साथ zlib (या कोई अन्य) जैसी लाइब्रेरी का उपयोग करना, यह रनटाइम डिकंप्रेशन कैसे किया जाता है?

डेविड

+2

मैं नहीं जानता कि क्या पा सकते हैं 'परिसंपत्ति' का अर्थ यहां विशेष रूप से है, लेकिन यदि आपके पास बहुत अलग संपीड़ित फ़ाइलें हैं, तो आप मांग पर डिकंप्रेस करने की कोशिश कर सकते हैं + कुछ कैशिंग। इसलिए जब फ़ाइल की आवश्यकता होती है तो स्मृति में एक फ़ाइल को डिकंप्रेस किया जाता है, और उसके बाद इसे कैश किया जाता है, और अगर किसी समय के लिए इसकी आवश्यकता नहीं होती है तो कैश से हटा दिया जाता है जब कैश को बहुत बड़ा होने से रोकने के लिए अन्य फ़ाइलों को डिकंप्रेस करने की आवश्यकता होती है। – sashoalm

+0

परिसंपत्ति से मेरा मतलब है कि गेम के लिए आवश्यक फाइलें, छवियों, मेष, सामग्री, शेडर्स जैसी चीजें हैं जो – Constan7ine

+0

"गेम कोडिंग पूर्ण" में वर्णित विधि सैटून का बहुत अधिक था। – risingDarkness

उत्तर

9

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

सबसे कम से उच्चतम करने के लिए गति के क्रम में

अब स्मृति है जैसे:

  • डीवीडी
  • हार्ड ड्राइव
  • रैम

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

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

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

जॉन Karmack QuakeCon 2011 मुख्य वक्ता के रूप जहां वह इस पूरी प्रक्रिया के बारे में बताया था शायद एक छोटा सा (अन्य भयानक बातों के अलावा) एक पोस्ट में की तुलना में मैं कर सकते हैं बेहतर है, आप इसे here

+0

वाह आपके उत्कृष्ट उत्तरों के लिए धन्यवाद दोस्तों! – Constan7ine

0

संपत्ति संपीड़न के साथ खेल इंजन सौदा

ऐसे ज्यामिति मॉडल (ट्राईऐन्ग्युलेशंस/बहुभुज मॉडल), बनावट, आदि प्रत्येक परिसंपत्ति वर्ग के लिए एक अलग है के रूप में विभिन्न खेल इंजन संपत्ति हैं संपीड़न रणनीति। क्या आप अधिक विशिष्ट हो सकते हैं ?

मॉडल संपीड़न के लिए, Check this

+0

ठीक है बनावट कहें। कारण मैं यह कहता हूं क्योंकि जिन इंजनों के साथ मैंने पहले काम किया है, वे लगभग एक या दो फाइलों में लगभग हर चीज को संपीड़ित करते हैं जो वे रनटाइम – Constan7ine

+0

पर उपयोग करते हैं, मुझे लगता है कि आपको यह देखना चाहिए: http://www.webpronews.com/google- वार्ता-बनावट-संपीड़न-के-खेल-पर-जीडीसी -2013 – Ram

3

संपीड़न कब, कहाँ और कई अलग अलग परतों पर कई मायनों में हो सकता है, और कैसे अपने इस्तेमाल किया पूरी तरह से निर्भर हैं क्या इसके लक्ष्य & लक्ष्य हैं (संपीड़न हमेशा अंतरिक्ष की बचत के बारे में नहीं है डिस्क पर)।

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

एक दूसरे स्तर को संपत्ति पर ही किया जा सकता है/किया जा सकता है, उदाहरण के तौर पर, बनावट कई अलग-अलग तरीकों से संपीड़ित की जा सकती है, लेकिन मुख्य रूप से ब्लॉक संपीड़न (एस 3 टीटी/डीXTएन, बीसीएन) का उपयोग इन दिनों किया जाता है क्योंकि इसकी डिकंप्रेशन समर्थित है हार्डवेयर में (या ड्राइवर द्वारा अनुकरण), इसलिए जब एक बार संग्रह/डिस्क के लिए पढ़ा जाता है, तो कोई और डिकंप्रेशन करने की आवश्यकता नहीं होती है।

संपीड़न रणनीति भी शान्ति जो स्मृति लेआउट के लिए बहुत संवेदनशील होते हैं, सीमित संसाधन हैं और छोटे कैश आदि

ग के साथ zlib की तरह एक पुस्तकालय (या किसी अन्य) का उपयोग करना है पर विशेष रूप से मंच के साथ बदलता, ++ , यह रनटाइम डिकंप्रेशन कैसे किया जाता है?

आम तौर पर आप संग्रह की स्मृति मैप की गई फ़ाइलों का उपयोग और राम के लिए, एक एएए संग्रह प्रणाली है कि अच्छी तरह से प्रलेखित है कि इस MPQ format (बर्फ़ीला तूफ़ान मनोरंजन द्वारा प्रयोग किया जाता है, अधिक जानकारी के here का एक अच्छा उदाहरण सीधे संपीड़ित करना चाहते हैं), यह विभिन्न प्रकार के संपीड़न एल्गोस का उपयोग करता है, जैसे डायब्लो I के लिए डिफ्लेट, वॉरक्राफ्ट III के लिए zlib, वर्ल्ड वार्कक्राफ्ट में bzip2, और उन्होंने हाल ही में एससीआईआई जैसे अपने नए गेम के लिए एलजेड और स्पैस संपीड़न जोड़ा।

जेन वासनबर्ग 'थीसिस (Optimizing File Accesses via Ordering and Caching) में फ़ाइल प्रबंधन का एक अच्छा टूटना है, जो कि ब्याज भी हो सकता है।

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