मुझे कैसे पता चलेगा कि मैं ग्राफिक्स एपीआई को बहुत अधिक कस रहा हूं?


23

कई ग्राफिक्स एपीआई का समर्थन करने वाले रेंडरर बनाते समय, आप आमतौर पर अपने कोड को किसी प्रकार के निम्न स्तर के पुस्तकालय में समाहित करना चाहेंगे जो कुछ ग्राफिक्स API जैसे OpenGL, Vulkan, D3D11 और इसी तरह से बंधा हो;

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

मुझे कैसे पता चलेगा कि मैं एक तंग अमूर्त के बहुत अधिक बना रहा हूँ?


5
क्या आप 100% निश्चित हैं कि आपका रैपर + वल्कन या डी 3 डी 11 ओपनगेल का उपयोग करने से हमेशा तेज है?
मूविंग डक

@ मिंग डक अगर सही तरीके से इस्तेमाल किया जाए, तो हाँ।
गैब्रिएल वेरिएटी

4
मुझे गंभीरता से संदेह होगा कि। वल्कन में अधिकांश लाभ बहुत निम्न-स्तर के होने और बहुत ही अजीब, विशिष्ट तरीके से काम करने से आते हैं। कुछ ऐसा जो सामान्य रूप से जेनेरिक रूप से OpenGL या D3D में समान रूप से करने के लिए पर्याप्त है, लगभग निश्चित रूप से ऐसा नहीं कर सकता है। उसी सामान को फिर से लागू करना जैसा कि ओपनजीएल करता है (जैसे कई वल्कन ट्यूटोरियल करते हैं, विडंबना यह है कि) 99.99% समान प्रदर्शन करता है, जिसमें 20 गुना काम होता है।
डेमन

@Damon यह सही है, लेकिन आधुनिक जीपीयू पर काम करने के लिए नए एपीआई विशेष रूप से तैयार किए गए हैं (और ओपनजीएल की तरह अनुकूलित नहीं हैं ); Vulkan की बात कर रहा है, तो आप कर सकते हैं काफी एक ही एपीआई हर समर्थित मंच पर, का उपयोग इसके विपरीत ओपन, जहां "एम्बेडेड सिस्टम्स" संस्करण का उपयोग करने की आवश्यकता है। कम सीपीयू ओवरहेड और फैंसी सुविधाओं के अलावा हमारे पास बहुत कुछ नहीं है, लेकिन भविष्य में हमारे पास कुछ बहुत ही आश्चर्यजनक तकनीकें हो सकती हैं, जो ओजीएल या डी 3 डी 11 के बजाय वीके या डी 3 डी 12 का उपयोग करके तेजी से चल सकती हैं
गेब्रियल वेलेटी

जवाबों:


44

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

लेकिन मान लें कि आपने पहले ही अपने विकल्पों का मूल्यांकन कर लिया है और इस निष्कर्ष पर पहुंचे हैं कि यह व्यवहार्य है और अपने स्वयं के रोल करने के लिए समय के लायक है।

तब आपके अमूर्त परत के सॉफ्टवेयर आर्किटेक्चर के मुख्य न्यायाधीश आपके फ्रंट-एंड प्रोग्रामर हैं।

  • क्या वे उस गेम सिस्टम को लागू करने में सक्षम हैं जिसे वे किसी भी निम्न-स्तरीय विवरण के बारे में आश्चर्य किए बिना लागू करना चाहते हैं?
  • क्या वे पूरी तरह से अनदेखा करने में सक्षम हैं कि एक से अधिक ग्राफिक्स एपीआई हैं?
  • क्या यह सैद्धांतिक रूप से संभव होगा कि किसी भी फ्रंट-कोड को बदले बिना एक और रेंडर बैकएंड जोड़ा जाए?

यदि हां, तो आप सफल हुए।


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

5
मुझे लगता है कि, अगर आप वास्तव में कई ग्राफिक्स पुस्तकालयों का समर्थन करना है , वहाँ लगभग निश्चित रूप से एक बंद शेल्फ है कि आप की जरूरत है सब कुछ करता है, तो फिर भी आप वास्तव में अपना खुद का रोल नहीं करना चाहिए। (बेशक, कुछ अपवाद हैं, लेकिन अगर आप यह पूछने के लिए पर्याप्त अनुभवहीन हैं कि "मुझे कितना अमूर्त होना चाहिए" तो आप शायद एक ऐसी परियोजना पर काम नहीं कर रहे हैं जिसमें आपको यह करने की आवश्यकता है)
निधि मोनिका का मुकदमा

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

6

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

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

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

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

देखिए पहले क्या काम हुआ है। सोकोल और बीजीएफएक्स एपीआई हैं जो अज्ञेयवाद का स्तर प्रदान करते हैं जो आपके लिए उपयोगी हो सकता है, और समझने में अपेक्षाकृत आसान है (विशेष रूप से पूर्व)।


3

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

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