हार्डवेयर-त्वरित वेक्टर ग्राफ़िक्स को बंद क्यों नहीं किया गया?


88

मैं एक ऐसे ऐप पर काम कर रहा हूं जिसमें 60fps पर वेक्टर रास्तों का वास्तविक समय में हेरफेर शामिल है, और मैं इस विषय पर बहुत कम जानकारी से बहुत हैरान हूं। सबसे पहले, मैंने CoreGraphics का उपयोग करके अपने विचार को लागू करने की कोशिश की, लेकिन यह मेरे उद्देश्यों के लिए पर्याप्त प्रदर्शन नहीं कर पाया । मुझे तब पता चला कि OpenVG नामक हार्डवेयर-त्वरित वेक्टर ग्राफिक्स के लिए एक क्रोनोस मानक था , और शुक्र है कि एक तरह की आत्मा ने एक OpenGL ES अर्ध-कार्यान्वयन लिखा था जिसे MonkVG कहा जाता है ।

लेकिन इस तथ्य के बावजूद कि ओपनवीजी एक बहुत ही व्यावहारिक रूप से उपयोगी एपीआई है, यह ख्रोनोस द्वारा कम या ज्यादा छोड़ दिया गया लगता है। विकिपीडिया के अनुसार, 2011 के बाद से, कार्य समूह ने "आगे मानकीकरण के लिए [नियमित] कोई बैठक नहीं करने का निर्णय लिया।" प्रलेखन, सबसे अच्छा मैं पा सकते हैं, सिर्फ एक संदर्भ कार्ड के होते हैं। और क्या अधिक है, इंटरनेट पर कहीं भी OpenVG के मुश्किल से कोई उदाहरण हैं। मैं पलक झपकते ही सैकड़ों OpenGL ट्यूटोरियल्स पा सकता हूं, लेकिन OpenVG विशिष्ट रूप से गायब है।

आपको लगता है कि तेजी से बढ़ते प्रस्तावों की दुनिया में हार्डवेयर-त्वरित वैक्टर अधिक महत्वपूर्ण होंगे, और ऐसा लगता है कि कई कंपनियां ऐसा करने के अपने तरीके लागू कर रही हैं। उदाहरण के लिए, Qt और Flash में हार्डवेयर-त्वरित वैक्टर की योजनाएँ हैं, और Adobe के कई उपकरणों में विकल्प के रूप में हार्डवेयर त्वरण है। लेकिन ऐसा लगता है जैसे पहिया एक मानक पहले से मौजूद होने पर पुनर्निमित हो रहा है!

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


14
इससे पहले कि आप इस प्रश्न को छोड़ दें, कृपया याद रखें कि प्रोग्रामर पर व्यक्तिपरक प्रश्नों की अनुमति है, जब तक कि वे रचनात्मक हैं, जो मुझे लगता है कि यह एक है।
अर्चागोन

मैंने अपवित्र किया क्योंकि यह एक बुरा प्रश्न नहीं लगता है ..
मफिन मैन

1
यह ध्यान रखना दिलचस्प है कि कंप्यूटर ग्राफिक्स वेक्टर ग्राफिक्स के रूप में शुरू हुए । सहित प्रदर्शित करता है।
क्लॉकवर्क-म्यूजियम

1
मेरे सिर के ऊपर से, मैं OpenVG को फिर से जोड़ दूंगा क्योंकि इंडस्ट्री ओपनगेल के साथ हुई बहस के बाद इस पर भरोसा नहीं करती थी। मैं उस सिद्धांत का समर्थन करने के लिए अनुसंधान करने के लिए बहुत आलसी हूं, इसलिए मैं इसे एक टिप्पणी के रूप में छोड़ दूंगा।
माइकल ब्राउन

8
@ एर्लज़ - एफएक्यू से सीधे: प्रोग्रामर.स्टैकएक्सचेंज / एफएक्यू - दूसरा खंड देखें
डीएक्सएम

जवाबों:


34

अद्यतन: उत्तर के नीचे देखें

यह उत्तर थोड़ा और देर से आता है, लेकिन मैं दूसरों को प्रकाश चमकाने की उम्मीद करता हूं (विशेषकर अब यह कि C ++ मानक समिति काहिरा को std में शामिल करना चाहती है):

वास्तव में "त्वरित सदिश ग्राफिक्स" के बारे में कोई भी परवाह नहीं करता है कि जीपीयू कैसे काम करता है। जीपीयू प्रत्येक पिक्सेल को रंग देने के लिए बड़े पैमाने पर समानांतरकरण और SIMD क्षमताओं का उपयोग करके काम करता है। AMD आमतौर पर 64x64 8x8 पिक्सेल के ब्लॉक में काम करता है जबकि NVIDIA कार्ड आमतौर पर 32x32 4x4 पिक्सल में काम करता है [तल पर अपडेट देखें]

यहां तक ​​कि अगर वे एक 3 डी त्रिकोण प्रदान कर रहे हैं, तो GPU पूरे क्वैड्स पर काम करता है जो इस त्रिकोण को कवर करता है। इसलिए यदि कोई त्रिभुज ब्लॉक में सभी 8x8 पिक्सल (या एनवीडिया के मामले में 4x4) को कवर नहीं करता है, तो जीपीयू अनलॉक किए गए पिक्सल के रंग की गणना करेगा और फिर परिणाम को छोड़ देगा। दूसरे शब्दों में, खुला पिक्सेल के लिए प्रसंस्करण शक्ति व्यर्थ है। जब यह बेकार लगता है, यह बड़े पैमाने पर 3 डी त्रिकोणों को प्रस्तुत करने के लिए अविश्वसनीय रूप से अच्छा काम करता है जब एक बड़ी संख्या में जीपीओ कोर (यहां विस्तृत जानकारी: बुनियादी रैस्टराइज़र का अनुकूलन ) के साथ जोड़ा जाता है ।

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

"वेस्ट" की मात्रा को कम करने के लिए पतवार की गणना करके कम किया जा सकता है (जैसे कि NV_path_rendering करता है), लेकिन GPU अभी भी 8x8 / 4x4 ब्लॉक के लिए विवश है (उच्चतर रिज़ॉल्यूशन के साथ शायद NVIDIA के GPU बेंचमार्क स्केल भी, पिक्सल_कोरवर / पिक्सल_वेज़ अनुपात बहुत कम है)।

यही कारण है कि कई लोग "वेक्टर hw त्वरण" के बारे में भी परवाह नहीं करते हैं। जीपीयू केवल कार्य के लिए अच्छी तरह से अनुकूल नहीं हैं।

NV_path_rendering मानदंड से अधिक अपवाद है, और उन्होंने स्टैंसिल बफर का उपयोग करने की उपन्यास चाल पेश की है; जो संपीड़न का समर्थन करता है और बैंडविड्थ उपयोग को काफी कम कर सकता है।

फिर भी, मैं NV_path_rendering के बारे में उलझन में रहता हूं, और googling के एक बिट से पता चलता है कि OpenGL का उपयोग करते समय Qt (recomended तरीका) NVIDIA के NV_path_rendering की तुलना में काफी तेज है: NV पथ प्रतिपादन दूसरे शब्दों में, NVIDIA की स्लाइड्स में एक्सेंडर के संस्करण की तुलना "दुर्घटनावश" ​​की गई। क्यूटी। ओह।

यह तर्क देने के बजाय कि "hw त्वरण के साथ सब कुछ वेक्टर ड्रॉइंग तेज़ है", Qt डेवलपर्स अधिक ईमानदार स्वीकार करते हैं HW त्वरित वेक्टर ड्राइंग बेहतर नहीं है (देखें कि उनके रेंडरिंग कार्य कैसे समझाया गया है: क्यूटी ग्राफिक्स और प्रदर्शन - ओपनजीएल )

और हमने "लाइव संपादन" वेक्टर ग्राफिक्स के भाग को नहीं छुआ है, जिसके लिए मक्खी पर त्रिकोण पट्टी पीढ़ी की आवश्यकता होती है। जटिल svgs का संपादन करते समय, यह वास्तव में गंभीर ओवरहेड जोड़ सकता है।

यह बेहतर है या नहीं, यह अत्यधिक अनुप्रयोगों पर निर्भर करता है; आपके मूल प्रश्न के अनुसार "इसे बंद क्यों नहीं किया गया", मुझे आशा है कि अब इसका उत्तर दिया गया है: कई नुकसान और बाधाओं को ध्यान में रखना पड़ता है, अक्सर बहुत से लोग संदेह करते हैं और एक को लागू नहीं करने में उन्हें पूर्वाग्रहित भी कर सकते हैं। ।

अद्यतन: मुझे बताया गया है कि संख्याएं पूरी तरह से आधार से बाहर हैं, क्योंकि उल्लिखित GPU 64x64 और 32x32 ब्लॉकों में नहीं जुटे हैं, बल्कि 8x8 = 64 और 4x4 = 16 हैं। यह बहुत अधिक पद के निष्कर्ष को स्पष्ट करता है। मैं जल्द ही इस पोस्ट को बाद में अद्यतित जानकारी के साथ अपडेट करूंगा।


2
किलगार्ड ने टिप्पणी के अंत में ज़ैक रुसिन के उस ब्लॉग पोस्ट का जवाब दिया है। उस संस्करण में ड्राइवर बग था जिसे रुसिन ने परीक्षण किया था। नए 3xx ड्राइवर ने 2x-4x के एक कारक द्वारा रुसिन के कोड को हराया। रुसिन ने उसके बाद कोई जवाब नहीं दिया।
सीटी

1
यह भी ध्यान दें कि NV_path_rendering: code.google.com/p/chromium/issues/detail?id=344330 का समर्थन करने के लिए Skia (Google Chrome / Chromium की 2D लाइब्रेरी) में अब काम चल रहा है । मुद्दा इसलिए है क्योंकि OpenGL ES पूरी तरह से जटिल नहीं है NV_path_rendering के साथ संगत।
फिज़ा

1
On-demand.gputechconf.com/gtc/2014/pretations/… पर बहुत नई प्रस्तुति के अनुसार, वहाँ भी Illustrator में NV_path_rendering जोड़ने पर काम है। यह भी कहा गया है कि उपलब्ध होने पर Skia पहले से ही NV_path_rendering का उपयोग करता है (हालाँकि मेरी पिछली टिप्पणी में जो बग रिपोर्ट मैंने लिंक की है वह यह बताती है कि यह काम नहीं कर सकती है और साथ ही साथ कोई उम्मीद भी नहीं कर सकता है)
Fizz

1
इसके अलावा क्रिस विल्सन (एक कैरो डेवलपर और इंटेल कर्मचारी) के पास केवल अच्छी चीजें हैं जो NV_path_rendering के बारे में कहती हैं; यह मूल रूप से कैरो की इच्छा सूची में है: lists.cairographics.org/archives/cairo/2013-March/024134.html
Fizz

25

मुझे नहीं लगता कि यह वास्तव में सच है कि कोई भी वास्तव में "त्वरित वेक्टर ग्राफिक्स" के बारे में परवाह नहीं करता है जैसा कि इस उत्तर में लिखा गया है ।

एनवीडिया एक निष्पक्ष बिट की देखभाल करता है। किलगार्ड के अलावा, जो NV_path_rendering (इसलिए अपनी उंगलियों को बचाने के लिए NVpr) पर प्रमुख तकनीकी व्यक्ति है, खरोनोस के अध्यक्ष, नील ट्रेवेट, जो एनवीडिया में एक VP भी हैं, ने NVpr को पिछले कुछ वर्षों में उतना ही प्रचारित किया है; उसकी बात 1 , बात 2 या बात 3 देखें । और लगता है कि थोड़ा सा भुगतान किया है। इस लेखन के समय के रूप में, NVpr अब गूगल के Skia एडोब इलस्ट्रेटर सीसी (बीटा) का बीटा संस्करण में [Skia की] (जो बारी में गूगल क्रोम में प्रयोग किया जाता है) और स्वतंत्र रूप से में, कम से Kilgard की स्लाइड्स के अनुसार प्रयोग किया जाता है GTC14 ; वहाँ दिए गए वार्ता के कुछ वीडियो भी हैं: किलगार्ड और एडोब के। एक काहिरा देव (जो इंटेल के लिए काम करता है) भी एनवीपीआर में रुचि रखता है। मोज़िला / फ़ायरफ़ॉक्स देवों ने भी NVpr के साथ प्रयोग किया और वे वास्तव में इस त्वरित FOSDEM14 टॉक शो के रूप में GPU त्वरित वेक्टर ग्राफिक्स के बारे में परवाह करते हैं।

Microsoft ने भी थोड़ी परवाह की है क्योंकि उन्होंने Direct2D बनाया है , जिसका उपयोग काफी व्यापक रूप से किया जाता है [यदि आप उपरोक्त बात से मोज़िला देव को मानते हैं]।

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

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

सिर्फ इसलिए कि 2011 में NVpr लिनक्स पर (अपने पहले रिलीज़ किए गए कार्यान्वयन में) इतना महान नहीं था, क्योंकि 2011 में क्यूटी के जैक रस्किन के ब्लॉग पोस्ट में कहा गया था, इसका मतलब यह नहीं है कि वैक्टर / रास्तों का GPU त्वरण श्री गोल्डबर्ग के उत्तर के रूप में निराशाजनक है। प्रतीत होता है कि उससे अनुमान लगाया गया है। वास्तव में किलगार्ड ने उस ब्लॉग पोस्ट के अंत में जवाब दिया है जिसमें अपडेट किए गए ड्राइवरों के साथ क्यूटी के तेज कोड पर 2x-4x सुधार दिखाया गया है और रुसिन ने उसके बाद कुछ भी नहीं कहा है।

वाल्व कॉर्प भी GPU- त्वरित वेक्टर रेंडरिंग के बारे में परवाह करता है, लेकिन अधिक सीमित तरीके से, फ़ॉन्ट / ग्लिफ़ रेंडरिंग से संबंधित है। उन्होंने GPU-त्वरित हस्ताक्षरित दूरस्थ क्षेत्रों (SDF) का उपयोग करके सिगग्राफ 2007 में प्रस्तुत किए गए बड़े फॉन्ट स्मूथिंग का एक अच्छा, तेज कार्यान्वयन किया है , जो कि उनके गेम्स जैसे TF में उपयोग किया जाता है; YouTube पर पोस्ट की गई तकनीक का एक वीडियो प्रदर्शन है (लेकिन मुझे यकीन नहीं है कि यह किसने बनाया है)।

एसडीएफ के दृष्टिकोण में कैलीरो और पंगो देवों में से एक ने ग्लिफी के रूप में कुछ शोधन किए हैं ; इसके लेखक ने linux.conf.au 2014 में एक बात कही। बहुत लंबे-चौड़े घड़ी वाला संस्करण यह है कि वह वेक्टर में एसडीएफ गणना को अधिक सुपाच्य बनाने के लिए (बल्कि रेखापुंज की तुलना में) वाल्व में अधिक सुव्यवस्थित बनाने के लिए बेजियर वक्रों का एक चाप-स्प्लिट सन्निकटन करता है। लेकिन चाप-स्प्लिट सन्निकटन के साथ, गणना अभी भी धीमी थी; उन्होंने कहा कि उनका पहला संस्करण 3 एफपीएस पर चला। इसलिए वह अब "बहुत दूर है" सामान के लिए कुछ ग्रिड-आधारित पुलिंग करता है, जो LOD (विस्तार का स्तर) के रूप में दिखता है, लेकिन एसडीएफ अंतरिक्ष में। इस अनुकूलन के साथ उनका डेमो 60 एफपीएस पर चला (और यह शायद Vsync सीमित था)। हालांकि उनके शेड्स अविश्वसनीय रूप से जटिल हैं और हार्डवेयर और ड्राइवरों की सीमा को धक्का देते हैं। उन्होंने कहा: "हर ड्राइवर / ओएस संयोजन के लिए हमें चीजों को बदलना होगा"। उन्होंने shader संकलक में महत्वपूर्ण कीड़े भी पाए, जिनमें से कुछ तो उनके संबंधित देवों द्वारा तय किए गए थे। तो यह एएए गेमिंग खिताब के विकास की तरह लगता है ...

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

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

TIR, Direct2D को टेसेलेशन पर कम CPU चक्र खर्च करने में सक्षम बनाता है, इसलिए यह दृश्य गुणवत्ता का त्याग किए बिना, GPU को अधिक तेज़ी से और कुशलता से ड्राइंग निर्देश दे सकता है। TIR विंडोज 8 के लिए डिज़ाइन किए गए नए GPU हार्डवेयर में उपलब्ध है जो DirectX 11.1 को सपोर्ट करता है।

नीचे एक चार्ट है, जो एक डायरेक्टएक्स 11.1 GPU पर TIR का समर्थन करते हुए विभिन्न प्रकार की SVG फ़ाइलों से एंटी-अलियासिड ज्यामिति प्रदान करने के लिए प्रदर्शन करता है: [चार्ट फिसल गया]

हमने TIR डिजाइन करने के लिए अपने ग्राफिक्स हार्डवेयर पार्टनर्स [AMD पढ़ें] के साथ मिलकर काम किया। उस साझेदारी के कारण नाटकीय सुधार संभव हुए। DirectX 11.1 हार्डवेयर पहले से ही आज बाजार में है और हम अपने साझेदारों के साथ काम कर रहे हैं ताकि यह सुनिश्चित हो सके कि अधिक TIR- सक्षम उत्पाद मोटे तौर पर उपलब्ध होंगे।

मुझे लगता है कि यह उन अच्छी चीजों में से एक था, जो विन 8 ने जोड़ा था जो ज्यादातर मेट्रो यूआई फियास्को में दुनिया के लिए खो गया था ...


1
लगता है कि एक एमआर पॉल होउक्स ने उस वीडियो को बनाया (लिंक का अनुसरण करें)
स्विफ्टनामेस सेंक

महान उद्धरण और संसाधन।
स्टार्टेक

5

शायद इसलिए क्योंकि इसके लाभ लागत से अधिक नहीं हैं।


एक नॉब प्रश्न के लिए खेद है, लेकिन सामान्य तौर पर, आप स्क्रीन पर दिखाई देने वाली चीजों को कैसे बनाते हैं, जब यह सीपीयू-गणना की गई थी? पहली बार में सीपीयू के लिए इमेज-टू-बी-पोस्टप्रोसेस कैसे उपलब्ध था? क्या आपने दो बार बस के माध्यम से पिक्सेल डेटा की प्रतिलिपि बनाई है?
क्यूबसप्लि 42

@ cubuspl42 सुपर लेट रिप्लाई के लिए क्षमा याचना लेकिन पहले हम जिस सॉफ्टवेयर में काम कर रहे थे, वह ओपनजीएल का उपयोग इस तरह से कर रहा था, जहां हम विंडो को रिजल्ट देने से पहले पीबीओ का उपयोग करके फ्रेम बफर से पिक्सल प्राप्त कर रहे थे। इसमें कुछ निरर्थक कार्य शामिल थे, लेकिन यह सीपीयू के माध्यम से एक खिड़की के लिए रास्टर छवियों के आसपास निर्मित एक विरासत डिजाइन की सीमा थी। ब्लूम तुलना के परिणामस्वरूप, मेरे सहकर्मी ने फ्रेम बफ़र से छवि को पुनः प्राप्त करने से पहले अपने नाजुक शेडर को लिखा। मैंने सिर्फ़ अधिग्रहित छवि में सीपीयू में ब्लूम को लागू करके अपनी तुलना की।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.