क्या सामग्री पाइपलाइन उपकरण को इंजन में एम्बेड किया जाना चाहिए?


10

गेम इंजन कितना कम होना चाहिए? इंजन में सामग्री पाइपलाइन का कितना हिस्सा होना चाहिए?

कुछ मामले ऐसे हैं जहां सुपर इंजन उपयोगी हो सकता है:

  • उपयोगकर्ता सामग्री लोड करते समय, उपयोगकर्ता को अपने बनावट को पैकेज करने की आवश्यकता नहीं होती है, इंजन इसे लोड समय पर करेगा।

  • एक स्क्रिप्ट पूर्व-उत्पन्न की तुलना में बहुत बड़े आकार पर एक फ़ॉन्ट का अनुरोध करती है, इंजन ttf फ़ाइल विज्ञापन को पार्स कर सकता है जो एक नई बनावट एटलस का निर्माण कर सकता है।

  • हेलो फोर्ज

इसमें से कोई भी नि: शुल्क नहीं है। इसके लिए आपके सामग्री पाइपलाइन टूल को C ++ में लिखा जाना आवश्यक है। डिवाइस में उपयोग के लिए आपके द्वारा पाइपलाइन में उपयोग किए जाने वाले समर्थन पुस्तकालयों को संकलित करने की आवश्यकता है। इसके लिए आवश्यक है कि सामग्री पीढ़ी छोटी गाड़ी न हो। और यह आम तौर पर आपके इंजन को बड़ा और बेढंगा बनाता है।
कुछ अन्य पेशेवरों और विपक्ष क्या हैं?
क्या पेशेवरों ने विपक्ष को पछाड़ दिया?

कुछ विशिष्ट प्रश्न:

  • क्या इंजन को विभिन्न छवि प्रारूपों को लोड करने में सक्षम होना चाहिए? एक TGA केवल लोडर हाथ कोड के लिए बहुत आसान है।

  • ऑडियो प्रारूपों के बारे में क्या? क्या केवल लोडिंग wav फ़ाइलों का समर्थन करना संभव है? परिवेश संगीत फ़ाइलों के बारे में क्या जो अक्सर विशाल होते हैं।

  • क्या इंजन गतिशील टीटीएफ पार्सिंग और एटलस जेनरेशन के लिए सक्षम होना चाहिए?

  • बनावट पैकिंग।

जवाबों:


11

नोएल ललोपिस के खेल भीतर से ब्लॉग ने हाल ही में "रिमोट गेम एडिटिंग" पोस्ट में छुआ । प्रारंभिक पैराग्राफ:

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

(लेख में नोएल के अधिकांश सामानों के साथ एक उच्च अनुशंसित लेख पढ़ा गया है, चाहे आप 100% सहमत हों या नहीं।)

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

बेहतर प्रदर्शन, कम संपादन समय में तब्दील हो सकता है, अजीब रूप से, इन-इंजन संपादन क्षमताओं में से कुछ को खोने के बावजूद: यदि आप गेम को एक सेकंड में लोड कर सकते हैं तो कुछ प्रयास करना आसान है।

" यूनिक्स दर्शन " के कुछ सिद्धांतों को अपनाने से आपको अपने टूलकिन को लचीला रखने में मदद मिलेगी: एक छोटा मॉड्यूलर पाइप लाइन।

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

हमारी कंपनी में हमारे कलाकार / डिजाइनर-सामना करने वाले अधिकांश उपकरण यूआई मुद्दों पर केंद्रित हैं: एकल संपत्ति या बैचों के हेरफेर में आसानी, आदि। कभी-कभी वे फ़ोटोशॉप या 3 डी मैक्स जैसे केवल 3 पार्टी उपकरण हैं। ये उपकरण एक मध्यवर्ती प्रारूप में निर्यात होते हैं (अक्सर xml जो स्रोत बाइनरी डेटा को संदर्भित करता है, लेकिन हमेशा नहीं)। मध्यवर्ती प्रारूप को बैकएंड "डेटा मेक" टूल द्वारा उठाया जाता है, जो इसे लक्ष्य प्लेटफॉर्म के लिए कुछ उपयोगी और त्वरित-लोडिंग में बनाता है।

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

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

उपकरण - विशेष रूप से बैकेंड डेटा उपकरण बनाते हैं - अक्सर इंजन कोड की तुलना में ढलान और बगियर होते हैं। यह ठीक है, क्योंकि वे रिफलेक्टर / पुनः लिखना, विस्तार करना और परीक्षण करना आसान कर रहे हैं; आपके पास उनके व्यवहार के लिए चश्मा है और कुछ इंजन कोड की तुलना में यूनिट परीक्षण करना काफी आसान है।

आपके सवालों पर मेरी राय:

क्या इंजन को विभिन्न छवि प्रारूपों को लोड करने में सक्षम होना चाहिए? एक TGA केवल लोडर हाथ कोड के लिए बहुत आसान है।

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

मैं उपकरण यहाँ TGA से कन्वर्ट करने के लिए जो भी अपने आंतरिक बनावट प्रारूप है, प्लस मेटाडेटा है।

ऑडियो प्रारूपों के बारे में क्या? क्या केवल लोडिंग wav फ़ाइलों का समर्थन करना संभव है? परिवेश संगीत फ़ाइलों के बारे में क्या जो अक्सर विशाल होते हैं।

हम यहां तीन स्वरूपों का उपयोग करते हैं: ट्रैक किए गए संगीत (.xm), ADPCM (.wav), और Speex (.spx)। यह ज्यादातर इसलिए है क्योंकि हम हैंडहेल्ड पर हैं, और ये प्रारूप डिकोड करने के लिए बहुत हल्के हैं।

क्या इंजन गतिशील टीटीएफ पार्सिंग और एटलस जेनरेशन के लिए सक्षम होना चाहिए? बनावट पैकिंग।

एटलसिंग एक कठिन समस्या है: अपने हाल के प्रश्न के उत्तर देखें। यह लगभग हमेशा ऑफ़लाइन करने के लायक है।

साथ ही आप प्रति-चरित्र मेटाडेटा को लगभग शून्य-लोड-कोड-बेक्ड संरचना में बना सकते हैं।

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


अद्यतन के रूप में, आप बनावट के लिए KTX फ़ाइल प्रारूप का उपयोग करने पर विचार कर सकते हैं । यह structसबसे अधिक GL usecases के लिए ज्यादातर "पढ़ा जाना और जाना" होने का लाभ है (और आपकी टिप्पणियों से ऐसा लगता है जैसे आप GL को लक्षित कर रहे थे) जबकि अभी भी लचीला और अच्छी तरह से परिभाषित किया जा रहा है।

KTX हेडर ओवरहेड आपके लक्ष्य के आधार पर पूरी तरह से बेक्ड डेटा के लिए थोड़ा अधिक हो सकता है, और आप अपने usecase के आधार पर एंडियन स्वैप सपोर्ट को छोड़ना चाह सकते हैं ... लेकिन यह निश्चित रूप से कम से कम डिज़ाइन विचार के लिए एक गण्डर के लायक है।


बढ़िया सामान धन्यवाद। मैंने छवि प्रारूप को लोड करने के लिए अपने स्वयं के आसान निर्माण पर कभी विचार नहीं किया था। क्या पहले से निर्मित न्यूनतम बनावट लोडिंग लाइब्रेरी है। फिर से यह मूल रूप से एक चौड़ाई, ऊंचाई और एन्कोडिंग (यानी GL_RGB555) के साथ बाइट्स की एक धारा है।
deft_code

1
अपने स्वयं के छवि प्रारूप का इतना निर्माण न करें जैसा कि छवि को उस सटीक प्रारूप में मिलता है जो डायरेक्टएक्स, जीएल, या आप जो भी उपयोग कर रहे हैं। =) जहां तक ​​पुस्तकालय जाते हैं: वहाँ एक टन बाहर हैं। टूल के लिए, मैं सिर्फ ImageMagick ( imagemagick.org/script/index.php ) लाइब्रेरी सामान या यहां तक ​​कि प्रोग्राम्स का उपयोग करता हूं ... ImageMagick कोड पुराना-स्कूल और थोड़ा बदसूरत, लेकिन बहुत तेज, लचीला और सड़क पर है -tested। मुझे यकीन है कि अन्य लोगों के पास बहुत सारे अन्य सुझाव होंगे; यदि आप अपने टूलकिन के लिए उदाहरण के लिए C # का उपयोग कर रहे हैं, तो यह बहुत सारा सामान पहले से ही .NET लिबास में बनाया जाएगा ...
leander

1
"मुझे यकीन है कि अन्य लोगों के पास बहुत सारे अन्य सुझाव होंगे" एमएफसी! :) या शायद ओपन। मुझे लगता है कि प्लेटफ़ॉर्म-विशिष्ट प्रारूपों में परिसंपत्तियों को बेक करने के बारे में एक महत्वपूर्ण बिंदु यह है कि जैसे ही आप अधिक स्रोत प्रारूप जोड़ते हैं और अधिक प्लेटफार्मों की संख्या में संयोजन की संख्या विस्फोट हो जाएगी। स्रोत की संपत्तियों को एक मध्यवर्ती प्रारूप में परिवर्तित करना और फिर प्लेटफ़ॉर्म-विशिष्ट स्वरूपों में परिवर्तित करना रूपांतरण मार्गों की संख्या में कटौती करेगा। एक और स्रोत प्रारूप जोड़ें, बस मध्यवर्ती प्रारूप के लिए एक कनवर्टर लिखें। एक अन्य प्लेटफ़ॉर्म जोड़ें, उस प्लेटफ़ॉर्म लक्ष्य प्रारूप में एक बेकर जोड़ें।
क्रिस होवे

1
मुझे लगता है कि इंजन के बाहर जटिलता रखने का मतलब यह नहीं होगा कि कार्यक्षमता इंजन के लिए उपलब्ध नहीं है। इसे अलग रखते हुए हालांकि यह आसानी से इंजन से तलाक हो गया है कुंजी है। मैं पर्याप्त तनाव नहीं कर सकता कि यह संपत्ति के गर्म लोडिंग का समर्थन करने के लिए कितना उपयोगी है, यानी मक्खी पर चीजों को फिर से लोड करना। यह भी आपके सिस्टम में बहुत जटिलता ला सकता है, हालांकि आप यह सुनिश्चित करना चाहते हैं कि यह इस तरह से बनाया गया हो कि खेल को इस बात की परवाह करने की आवश्यकता नहीं है कि संपत्ति कहाँ से आ रही है।
डैश-टॉम-बैंग

3

आपके प्रश्न बहुत व्यक्तिपरक लगते हैं और इस बात पर बहुत अधिक निर्भर करते हैं कि आपके लक्षित दर्शक कौन हैं।

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

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

याद रखें कि सामग्री उपकरण आमतौर पर कम तकनीकी रूप से झुकाव (पढ़ें: कलाकारों) द्वारा उपयोग किए जाते हैं। व्यक्तिगत रूप से, मुझे वास्तव में जिस तरह से एकता काम करती है, वह आप एक स्रोत फ़ाइल (psd, 3ds, ttf, mp3, jpg, mov, जो भी हो) में खींच सकते हैं और यह स्वतः ही इसे अपने आंतरिक स्वरूप में बदल देगा। आंतरिक प्रारूप ज्यादातर अंतिम उपयोगकर्ता से छिपा हुआ है। जब यह स्रोत फ़ाइल बदलने का पता लगाएगा तो यह ऑटो-री-कन्वर्ट भी होगा। लेकिन वह बहुत काम की चीज है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.