2010-06-08 17 views
16

आप अक्सर देखते हैं कि Xbox 360, PS3 और Windows पीसी पर एक नया गेम जारी किया जाएगा।गेम कंपनियां एकाधिक प्लेटफार्मों के लिए प्रोग्रामिंग कैसे संभालती हैं?

गेमिंग कंपनियां यह कैसे करती हैं? क्या यह विभिन्न कंपेलरों का उपयोग करके संकलित एक सामान्य स्रोत कोड है? क्या वास्तविक अलग-अलग स्रोत कोड आवश्यक हैं?

उदाहरण समाचार लेख इस घोषणा: http://www.gameranx.com/updates/id/502/article/dungeon-siege-3-announced-to-be-developed-by-obsidian/

+0

मुझे उम्मीद है कि वे हार्डवेयर विशिष्ट परत के ऊपर सामान्य कोड का उपयोग करें, इसलिए एक्सबॉक्स पर वे डायरेक्टएक्स का उपयोग कर सकते हैं और इसलिए उस परत के लिए पुस्तकालय हैं, लेकिन उनके पास लिनक्स पर ओपनजीएल परत के लिए एक ही इंटरफ़ेस होगा, इसलिए उन्हें केवल स्वैप करने की आवश्यकता है एक मंच से दूसरे मंच पर जाने के लिए ग्राफिक्स/ऑडियो/आईओ पुस्तकालयों को बाहर निकालें। –

+0

एक्सएनए एक महत्वपूर्ण उदाहरण है जो जेम्स ब्लैक के बारे में बात कर रहा है - सिद्धांत रूप में, कम से कम, यह विंडोज और एक्सबॉक्स दोनों के साथ-साथ विकास के प्रयास को काफी कम करता है। –

उत्तर

14

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

इनमें से कई इंजन कई चीजों के लिए अपनी स्क्रिप्टिंग भाषाओं या हुक का समर्थन करते हैं, इसलिए यह एक बार लिखता है।

उदाहरण के लिए, असत्य इंजन पर एक नज़र डालें: http://www.unrealtechnology.com/technology.php

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

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

3

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

यदि कंपनी एक गेम इंजन का उत्पादन करती है, तो डेवलपर्स केवल उस पर शीर्ष पर विकसित हो सकते हैं, जिससे इंजन को क्रॉस प्लेटफ़ॉर्म विनिर्देशों को संभालने के लिए छोड़ दिया जा सकता है।

मुझे लगता है कि कला/मीडिया विभाग सभी प्लेटफार्मों के लिए समान है।

2

यह अक्सर वर्चुअल मशीन के साथ पूरा होता है जो गैर-समय-महत्वपूर्ण गेम मैकेनिक्स और समय-महत्वपूर्ण लेकिन प्लेटफार्म-विशिष्ट संचालन के लिए एक अमूर्त परत को संभालता है।

विशेष विधियां अत्यधिक मालिकाना, गुप्त हैं, और गेम निर्माता की सबसे मूल्यवान संपत्तियों में से हैं।

1

यह सब अनुमान है क्योंकि मैं ऐसी कंपनी के लिए काम नहीं करता जो कंसोल गेम बनाता है, लेकिन एक सॉफ्टवेयर डेवलपर के रूप में अनुभव से बात कर रहा हूं जो मुझे लगता है कि कई बार ऐसा होता है कि बाह्य पुस्तकालयों का उपयोग स्रोत कोड के खिलाफ किया जाता है जो लिखा गया है एक सामान्य भाषा में, जैसे सी ++ या कुछ। बहुत सारे कोर गेम कोड (गेम लूप, भौतिकी सामान इत्यादि) का उपयोग किया जा सकता है क्योंकि सिंटैक्स लाइब्रेरी में लाइब्रेरी के साथ समान है।

हालांकि, वहां बड़ी संख्या में कोड लिखा जाना है (और परीक्षण) जो मंच के लिए अद्वितीय है। उदाहरण के लिए, अधिकांश (यदि नहीं सभी) ग्राफिक्स कार्ड से संबंधित कोड को Xbox 360 बनाम PS3 के लिए अलग होना होगा।

यह कोर फ़ंक्शंस पर बड़ी मात्रा में पोर्टेबिलिटी की अनुमति देता है और फिर UI सामग्री और ग्राफिक्स से संबंधित सामग्री प्लेटफ़ॉर्म-विशिष्ट (हमेशा यूआई के लिए नहीं) होती है।

इसके अलावा, बड़ी गेम कंपनियों के पास एक परियोजना पर काम कर रहे 100 डेवलपर्स हैं, इसलिए उनके पास कुछ इंडी डेवलपर्स की तुलना में बहुत अधिक संसाधन हैं।

हालांकि यह कभी भी सही नहीं है। आपको हमेशा कुछ कोड पोर्ट करना होगा। जब तक आप एडोब एयर का उपयोग नहीं कर रहे हैं, लेकिन आपका गेम कंसोल के लिए है (और रीयल गेम्स विकसित करने के लिए एडोब एयर का उपयोग कौन करता है?)

+0

मुझे गंभीरता से संदेह है कि एक बड़ी गेम परियोजना में सैकड़ों डेवलपर्स होंगे। डेवलपर्स महंगी हैं और डेवलपर्स की बड़ी टीमें और भी महंगे हैं, सभी अतिरिक्त प्रबंधकीय ओवरहेड के साथ। अधिकांश दुकानों में केवल कुछ डेवलपर्स होना पसंद करते हैं, मौजूदा इंजन का पुन: उपयोग करते हैं और फिर सामग्री (कला संपत्ति, स्तर, कहानी इत्यादि) में अपने प्रोजेक्ट बजट का निवेश करते हैं –

+1

कई खेलों में सैकड़ों लोग काम करते हैं, लेकिन उनमें से अधिकांश कलाकार हैं । मुझे लगता है कि गेम में कितना नया विकास चल रहा है, इस पर निर्भर करता है कि वास्तविक सॉफ्टवेयर डेवलपर्स 10-30 रेंज में हैं। –

3

वास्तव में, कुछ ढांचे हैं जो कई प्लेटफॉर्म पर चलाने में सक्षम हैं।

उदाहरण के लिए:

  • XNA Framework लगभग एक ही कोड बेस के साथ विंडोज, एक्सबॉक्स, और विंडोज फोन पर चला सकते हैं। (लगभग 9 0% वही सी # कोड सभी प्लेटफार्मों पर चल सकता है।)
  • Unity 3D पीसी, मैक, ब्राउज़र, आईफोन, वाईआई का समर्थन करता है, और यह जल्द ही एंड्रॉइड का भी समर्थन करेगा।

ऐसे अन्य ढांचे भी हैं।

इसके अलावा, अधिकांश लोकप्रिय गेम इंजन (उदाहरण के लिए अवास्तविक, आदि) कई प्लेटफॉर्म पर पोर्ट किए जाते हैं।

+0

यूनिटी 3 डी (http: // unity3d।कॉम /) पीसी, मैक, ब्राउज़र, आईफोन, वाईआई, एससन एंड्रॉइड का समर्थन करता है। – bertelmonster2k

+0

@ bertelmonster2k - धन्यवाद, यह भी एक अच्छा उदाहरण है। अगर आपको कोई फर्क नहीं पड़ता तो मैंने इसे अपने जवाब में जोड़ा। :) – Venemo

+0

मुझे यकीन है कि unity3d जल्द ही आईओएस 4.0 बकवास पर विचार करने के लिए आईफोन का समर्थन नहीं करेगा। http://arstechnica.com/apple/news/2010/04/steve-jobs-weighs-on-iphone-os-dev-controversy.ars लेकिन कौन जानता है। ऐप्पल बहुत चंचल है। – NotMe

5

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

मैं त्रिभुज युक्त 3 डी मॉडल प्रस्तुत करने के लिए इंजन को कॉल कर सकता हूं। इंजन इस प्लेटफॉर्म स्वतंत्रता परत में कॉल करके इस मॉडल को प्रस्तुत करता है जो वर्तमान में उपयोग किए गए प्लेटफ़ॉर्म के लिए कार्यान्वयन का उपयोग करता है।

4

दो तरीके खेल कंपनियों ऐसा करने के होते हैं:

1) लेखन/एक बहु इंजन 2) एक खेल Porting का उपयोग कर

एक बहु इंजन प्लेटफ़ॉर्म-विशिष्ट कार्यों के लिए कपोल-कल्पना (एक Windows बनाने की सुविधा होगी एपीआई कॉल, डायरेक्टएक्स बनाम ओपनजीएल इत्यादि में प्रतिपादन) ताकि सभी काम एक बार किया जा सके, फिर दोनों मशीनों के लिए बनाया गया हो। आमतौर पर यह Direct3D कॉल और क्या नहीं जैसी चीज़ों के लिए सरल रैपर विधियों को लिखने का विषय है। मल्टीप्लार्टर समर्थन के साथ ग्राउंड अप से अधिकांश नए गेम इंजन बनाए जा रहे हैं। अन्य मल्टीप्लार्टर समर्थन जोड़ रहे हैं।

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

विभिन्न कारणों से, पोर्ट किए गए गेम प्रदर्शन समस्याओं से पीड़ित हो सकते हैं, आमतौर पर पानी के नीचे के दृश्यों के बावजूद। PS3 या CoD पर ऑरेंज बॉक्स पर एक नज़र डालें: बंदरगाहों के दो उदाहरण गलत होने के लिए Wii के लिए आधुनिक युद्ध। ओबी के लिए, वाल्व ने खेल (ओं) को ईए को पोर्ट करने का कार्य आउटसोर्स किया। दूसरे उदाहरण में, एक्टिजन ने फैसला किया कि Wii से अधिक लाभ प्राप्त करने के लिए डिज़ाइन किए गए नए इंजन के शीर्ष पर गेम बनाने के बजाए एक कमजोर मंच पर अधिक शक्तिशाली हार्डवेयर के लिए डिज़ाइन किए गए इंजन पर एक गेम को पोर्ट करने के लिए और अधिक समझदारी हुई है।

1

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

भले ही यह कोडिंग की बात आती है, भले ही यह बहुत काम करे, यह सौदा का बड़ा नहीं है। मूल कार्यक्षमता को लिखना एक हफ्ते या आठ लेता है, शेष डिजाइन और योजना में अधिक है। बस याद रखें कि 3 डी समग्र गेम का केवल 10% है। ये मेरे दो सेंट एक पूर्व खेल डेवलपर के रूप में हैं।

2

मुझे एक साक्षात्कार पढ़ना याद है (या शायद यह एक .plan फ़ाइल/ब्लॉग था) जॉन कारमैक ने कुछ साल पहले दिया था। वह कई प्लेटफार्मों के विकास के बारे में चर्चा कर रहा था। (यदि स्मृति सेवा करता है तो वे मोबाइल प्लेटफॉर्म के लिए शीर्षक जारी कर रहे थे) उन्होंने जो सलाह दी थी वह हमेशा सबसे कम सिस्टम चश्मे के साथ मंच को लक्षित करना था जिसे आप पहले समर्थन देने की योजना बना रहे थे। उनका तर्क था कि नीचे से स्केल करना कहीं अधिक आसान है। यदि आप नवीनतम उच्च अंत ग्राफिक्स पर ध्यान केंद्रित करते हैं तो आप केवल उच्च अंत में उपलब्ध सुविधाओं के आधार पर हवाओं की संभावना है। मुख्यधारा और निचले अंत सिस्टम के लिए वापस स्केल करना बहुत कठिन बना रहा है। वैसे भी, मैंने सोचा कि यह बहुत अच्छी सलाह थी।

+0

यह किसी भी प्रकार के विकास के लिए बहुत अधिक जाता है, है ना? – Rook

0

मैं कहूंगा "बड़े पैमाने पर वे नहीं करते हैं।" सभी पैसे विंडोज़ या कंसोल में हैं और कई कंसोल एक विशेष लाइसेंस चाहते हैं। मैंने कुछ बंदरगाहों को देखा है लेकिन वे हमेशा पिछले संस्करण से ब्रांच किए गए एक अलग कोड बेस हैं।

1

आवश्यक रूप से वीडियो गेम से संबंधित नहीं है, लेकिन बहु-प्लेटफ़ॉर्म सॉफ़्टवेयर करने के लिए मैंने देखा है कि सबसे अच्छा चलना जीओएफ (http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) में था। विंडोिंग सिस्टम पर केस स्टडी पढ़ें।

0

अक्सर निर्दिष्ट प्लेटफ़ॉर्म के संकलन से पहले उचित कोड शामिल या उपयोग किए जाने से पहले वे # परिभाषा (उदाहरण के लिए सी ++ कोड में) का उपयोग करते हैं। बड़ी परियोजनाओं में कभी-कभी किसी गेम के हिस्से अलग-अलग होते हैं और अलग-अलग आईडीई में लिखे जाते हैं और अलग-अलग (प्लेटफॉर्म विशिष्ट) कंपाइलर्स में संकलित होते हैं।

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

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