छोटे डेवलपर्स के लिए नंगे OpenGL फ्रेमवर्क / इंजन पर क्या लाभ प्रदान करता है? [बन्द है]


16

मैंने इंडी डिवेलपर्स की एक प्रवृत्ति को फ्रेमवर्क और इंजनों से दूर करने और नंगे ओपनजीएल का उपयोग करने या एसडीएल / एसएफएमएल 2 के साथ संयुक्त रूप से उपयोग करने की दिशा में देखा है। इंडी डेवलपर के रूप में, मैं यह नहीं देख सकता कि निम्न-स्तरीय OpenGL अलग-अलग इंजनों या रूपरेखाओं पर क्या पेशकश कर सकता है।

अधिकांश सभ्य इंजन और चौखटे आपको वह कार्यक्षमता प्रदान करते हैं जिनकी आपको आवश्यकता होती है, और कभी भी आपके रास्ते में नहीं आती हैं। वे सीधे OpenGL से निपटने का विकल्प भी खोल सकते हैं। कुछ भी क्रॉस-प्लेटफॉर्म को संकलित करने के लिए कार्यक्षमता प्रदान करते हैं!

मैं यह समझने की आकांक्षा को समझता हूं कि हुड के नीचे क्या हो रहा है, लेकिन मैं किसी भी अपसाइज को नहीं देख सकता हूं जो ओपनगेल इंजन या फ्रेमवर्क पर इंडी डेवलपर्स को पेश कर सकता है।

क्या आप OpenGL का उपयोग करके स्क्रैच से गेम बनाने के पीछे के तर्क को समझा सकते हैं?


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

जवाबों:


23

यह काफी हद तक एक राय आधारित प्रश्न / उत्तर है, इसलिए यह वास्तव में इस मंच के लिए आदर्श नहीं है, लेकिन वैसे भी:

इंडी के रूप में कोई ढांचा / इंजन क्यों नहीं? यहाँ मेरे दो सेंट हैं:

  • बजट का अभाव: यह शायद सबसे छोटे / इंडी डेवलपर्स के लिए सबसे बड़ा बिंदु है। कई चौखटे या इंजन आपको अधिक महंगे संस्करण खरीदने के बिना अपने उत्पाद को प्रकाशित करने की अनुमति नहीं देंगे (यह मानते हुए कि वहाँ एक सस्ता या मुफ्त संस्करण उपलब्ध है) और / या रॉयल्टी का भुगतान करें, कुछ आपको हमेशा छोटी परियोजनाओं के लिए विचार करना होगा। कभी-कभी आपको प्रति प्लेटफॉर्म पर एक बार भी भुगतान करना पड़ता है।
  • जटिलता: अधिकांश इंजन या फ्रेमवर्क दो श्रेणियों में से एक में आते हैं:
    • वे या तो एक विशेष शैली के लिए बहुत सीमित हैं ( आरपीजी निर्माता एक विशिष्ट उदाहरण है)।
    • या the'yre बस भी बातें की बहुत सारी के साथ सामान्य आप सबसे अधिक संभावना (जैसे वैसे भी उपयोग नहीं होगा एकता )।
  • मालिकाना कोड: अधिकांश इंजन खुले स्रोत नहीं हैं और वास्तविक स्रोत प्राप्त करने के लिए आपको और भी अधिक भुगतान करना होगा (यदि उपलब्ध भी हो)। वास्तविक स्रोत कोड के बिना अन्य प्लेटफार्मों पर पोर्ट करना कठिन या असंभव भी हो सकता है (फिर से, आरपीजी निर्माता एक आदर्श उदाहरण होगा)।
  • भद्दापन: यह मेरी निजी राय है, लेकिन कम से कम मेरे लिए यह प्रायः प्रीमियर इंजनों और रूपरेखाओं पर विचार करते हुए एक बहुत बड़ा लबादा है, खासकर जब आप सिर्फ एक छोटे से खेल का निर्माण कर रहे हों। कौन एक छोटा ब्रेक गेम खेलना चाहता है जो आकार में 200 KB की तरह है लेकिन इसके साथ 50 एमबी रनटाइम लाता है?
  • भाषा की पसंद: कुछ इंजन और फ्रेमवर्क आपके स्वयं के कोड में उपयोग करने के लिए लाइब्रेरी प्रदान नहीं करते हैं। इसके बजाय वे एक रूपरेखा या रनटाइम प्रदान करते हैं जो अपनी स्वयं की स्क्रिप्टिंग भाषा या कुछ सेट भाषा (जैसे जावास्क्रिप्ट या C #) का उपयोग करेगा। यदि आप अपना स्वयं का कस्टम इंजन लिख रहे हैं, तो आपने जो भी भाषा चुनी है उसका उपयोग करने के लिए स्वतंत्र हैं।
  • आपके काम का संरक्षण: यदि आप एक प्रीमेड इंजन या फ्रेमवर्क का उपयोग कर रहे हैं, तो संभावना अधिक है कि अन्य लोगों के पास आपके कोड या परिसंपत्तियों को बदलने या अपघटित करने में बहुत आसान समय हो सकता है, कुछ जिसे आप बचना चाहते हैं (भले ही यह आपके हाईस्कोर को रखने के लिए है) स्वच्छ)। कस्टम कोड और एसेट हैंडलिंग एक बड़ी बाधा को जोड़ते हैं, खासकर जब देशी कोड में संकलित किया जाता है।
  • ब्रांडिंग: यह कई लोगों के लिए मामूली हो सकता है, लेकिन कुछ इंजन और फ्रेमवर्क आपको अपना लोगो या शायद विज्ञापन दिखाने के लिए मजबूर करते हैं, अनिवार्य रूप से आपके फ्रीडम को चुनने के लिए कि कौन / क्या प्रचार करना है। बेशक, यह अक्सर वास्तविक लाइसेंस, लाइसेंस फीस आदि पर निर्भर करता है।
  • लाइसेंस के साथ असंगति: यह कुछ ऐसा है जो इंजन को चुनते समय भी विचार नहीं करता है, लेकिन आप क्या करना चाहते हैं, इसके आधार पर यह एक प्रमुख कारक हो सकता है। यहां तक ​​कि अगर आप कुछ इंजन खरीदते हैं, तो आपको किसी भी स्रोत या संबंधित सामग्री का खुलासा करने से प्रतिबंधित किया जा सकता है। कुछ ऐसा हो सकता है, जिससे आप उपयोगकर्ताओं को सक्षम होना चाहते हैं, भले ही आप कुछ भी असंभव बना सकें। उदाहरण के रूप में वाल्व के स्रोत इंजन ( हाफ-लाइफ 2 , टीम फोर्ट 2 , आदि) को लें: वे अपने स्वयं के प्रोजेक्ट के लिए अपने इंजन का उपयोग करने के लिए मोडर्स की अनुमति दे रहे हैं। यदि ये खेल (उदाहरण के लिए) अवास्तविक इंजन पर आधारित होंगे, तो लाइसेंस शर्तों द्वारा निहित सीमाओं के कारण यह संभव नहीं होगा।

11
प्लस एक और बात: एक बार जब आप ओपनगेल सीख लेते हैं, तो आप इसे जानते हैं। आपको इसे प्रत्येक भाषा में जारी रखने या यह जानने की ज़रूरत नहीं है कि एक विशिष्ट ढांचा / इंजन आपको प्रत्येक नए ढांचे / इंजन के लिए कैसे लागू करना चाहता है। यह भी अधिक पोर्टेबिलिटी की ओर जाता है
वेस

कठिन नहीं सबसे आम समस्या है, यह संभव है कि इंजन या ढांचे में विचार केवल बनाना संभव नहीं है या बहुत जटिल होगा (उदा: minecraft)
akaltar

@ साकलर: सच है, लेकिन उसी समय मैं किसी ऐसे इंजन को चुनने की उम्मीद करूंगा जो इच्छित लक्ष्य को पूरा करे। उदाहरण के लिए एक 2D गेम के लिए 3D इंजन का उपयोग न करें और इसके विपरीत।
मारियो

9

अधिकांश सभ्य इंजन और चौखटे आपको वह कार्यक्षमता प्रदान करते हैं जिनकी आपको आवश्यकता होती है, और कभी भी आपके रास्ते में नहीं आती हैं।

क्या वे? बल्कि यह वास्तव में इस बात पर निर्भर करता है कि आप क्या कर रहे हैं, ग्राफिक रूप से बोल रहे हैं।

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

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

अब आप सामान्य मानचित्रण और यहां तक ​​कि संभवतः लंबन मानचित्रण भी नियोजित कर रहे हैं। "स्प्राइट्स रेंडरिंग" के समान संदर्भ में, लेकिन बहुत सारे प्योर 2 डी इंजनों की आवश्यकता होती है। विशेष रूप से, इसे मल्टीटेक्स्ड "स्प्राइट ब्लिटिंग" की आवश्यकता होती है, जो कि ऐसा कुछ नहीं है जो कई 2D इंजन कर सकते हैं।

यदि आपका इंजन आपके साथ अनुकूलन नहीं कर सकता है तो आप क्या करते हैं? तो इसका मतलब है कि आपको कई पास करने होंगे, एक रंग के लिए और एक सामान्य मानचित्र के माध्यम से प्रकाश व्यवस्था के लिए। लेकिन यह काम नहीं करता है, क्योंकि आपको रंग देखने के लिए लंबन मैपिंग को नियुक्त करने के लिए सामान्य नक्शे की ऊंचाई के क्षेत्र की आवश्यकता होती है। तो अब क्या? पारदर्शिता करने के लिए आपको अल्फा की आवश्यकता होती है, इसलिए आप अल्फा को चोरी नहीं कर सकते। और इंजन सिर्फ मल्टीटेक्स्चर का समर्थन नहीं करता है।

तो आपको निम्न में से एक चुनना होगा:

  1. विचार का त्याग करें। इसका मतलब है कि आपका खेल कार्यात्मक रूप से आपके इंजन द्वारा सीमित है।
  2. मल्टीटेक्स्ट करने के लिए इंजन को हैक करें। यह मानते हुए कि आपके पास स्रोत कोड तक पहुंच है, अब आप इसे किसी और के कोड पर प्रहार करने के लिए खुद पर ले रहे हैं। इसका मतलब यह भी है कि आपको इसे बनाए रखने की ज़रूरत है और इसे अपने ठोकर के साथ नहीं तोड़ना चाहिए।
  3. इंजन की सीमाओं के भीतर आप सबसे अच्छा कर सकते हैं। तो आप सामान्य मानचित्रों पर लंबन प्राप्त कर सकते हैं, लेकिन रंगों पर नहीं। यह वही नहीं हो सकता है जो आप चाहते थे, लेकिन यह कुछ भी नहीं से बेहतर है।

उदाहरण के रूप में, ज्यामिति युद्धों को लें। अधिकांश 2D इंजन इस प्रकार के दृश्यों को चूसते हैं, क्योंकि उनमें से अधिकांश रेखाओं को नहीं बल्कि ड्राइंग स्प्राइट के आसपास बनाए जाते हैं। यह एक ऐसा खेल है जिसमें बहुत ही खास तरह के रेंडर की जरूरत होती है।

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

इसके अलावा, एक बहुत ही व्यावहारिक मुद्दा है: सभी गेम इंजन समान रूप से पोर्टेबल नहीं हैं।

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

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


मुझे आपका उत्तर पसंद है, लेकिन मुझे यह बहुत अजीब लगता है कि आपने XNA को अपने उदाहरण के रूप में चुना। संभवतः पोर्टेबिलिटी को छोड़कर यह आपके द्वारा उल्लिखित किसी भी कमियों से ग्रस्त नहीं है।
सेठ बट्टिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.