कवरेज - एल्गोरिथ्म में दोष - इसके उपयोग से छुटकारा पाने के लिए कैसे?


10

परिचय

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

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

यहां छवि विवरण दर्ज करें

छवि 1 : पूरी तरह से गैर-प्रतिनिधि नमूना, एक आकृति प्रदान करने के लिए जो शीर्ष पंक्ति पर आवर्धित त्रुटि दिखाते हुए त्रिकोण से बना है। एसवीजी स्रोत

समस्या का एक सरल अनुभवहीन समाधान है * कवरेज गणना के बिना सिर्फ सुपर नमूना और छवि को नीचे फ़िल्टर करें। एक बोनस के रूप में आपको बॉक्स फ़िल्टरिंग की तुलना में बेहतर छवि पुनर्निर्माण एल्गोरिदम का उपयोग करने के लिए मिलता है (पढ़ें एक पिक्सेल एक वर्ग 3 नहीं है )। यहां तक ​​कि ऐसे समाधान भी हैं जिनकी वर्तमान समाधानों के रूप में तुलनीय गति है और ये समाधान हार्डवेयर रेखांकन पाइपलाइनों में करना बहुत आसान है (और आप शायद ही इस त्रुटि को GPU पर देखते हैं क्योंकि यह सिर्फ इस समस्या से बचने के लिए बनाया गया है)।

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

सवाल

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

यह कैसे सुनिश्चित करें कि यह त्रुटि आगे प्रसार को रोकती है?


परिशिष्ट (लेकिन मैं इस बारे में नहीं पूछ रहा हूं)

* जाहिर तौर पर मेरा दावा है कि सुपर सैंपलिंग बिना किसी दोष के काम करती है और असाधारण प्रमाण की आवश्यकता होती है। ठीक है, इसलिए काम करने वाले सुपर सैंपलिंग की कुंजी यह है कि सुपर सैंपलिंग कवरेज प्रोसेसिंग नहीं करती है। संक्षेप में सुपर सैंपलर प्रत्येक नमूने को एक बिंदु नमूने के रूप में मानता है। चूंकि बिंदु नमूना अंतर्निहित क्षेत्र की कोई धारणा नहीं बनाता है, इसलिए यह अल्फा तुलना का कारण नहीं है जहां ऐसा नहीं होता है।

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

एल्गोरिथ्म बिल्कुल कम कोड के साथ मूल के समान है और थोड़ा अधिक नमूने हैं। यह इस प्रकार सुसंगत है यदि कवरेज आधारित एल्गोरिथम से अधिक नहीं है। हम यह जानते हैं क्योंकि हम लगभग किसी अन्य सिग्नल प्रोसेसिंग क्षेत्र के साथ-साथ ग्राफिक्स कार्ड में भी सदियों से ऐसे तरीकों का इस्तेमाल कर रहे हैं।

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


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

जवाबों:


6

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

और मुझे लगता है कि वह कारण है जिसकी आप तलाश कर रहे हैं: यदि आप एक ऐसा एल्गोरिथ्म चाहते हैं जिसमें बहुत अधिक मेमोरी और रनिंग टाइम की जरूरत न हो, तो चीजें भोली "पारदर्शिता" दृष्टिकोण की तुलना में बहुत अधिक जटिल हो रही हैं।


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

@ जूजा: क्या आप "रिस्टोरेशन सेटअप को स्टोर करके" का मतलब निकाल सकते हैं, या एक लिंक दे सकते हैं, जहां दृष्टिकोण को एक तरह से समझाया गया है कि एक> 20 पेज के वैज्ञानिक पेपर के माध्यम से खुद को खोदना नहीं है?
डॉक्टर ब्राउन

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

ओह क्षमा करें, आपको नमूनों को संग्रहीत करने की भी आवश्यकता नहीं है यदि आप बॉक्स फ़िल्टरिंग करते हैं, तो आप केवल मूविंग / रनिंग औसत के फार्मूले का उपयोग कर सकते हैं, जिसके लिए आपको अलग-अलग नमूने संग्रहीत करने की आवश्यकता नहीं है
joojaa

@ जूझा: मुझे यह नहीं मिला - क्या आपको सभी संबंधित आकृतियों के नमूनों की गणना करने की आवश्यकता नहीं है , शायद सैकड़ों या हजारों, और बाद में अपने रास्टर डिस्प्ले को फ़िल्टर करें?
डॉक ब्राउन

6

Supersampling समस्या को सामान्य रूप से हल नहीं करेगा: यह केवल इसे कम ध्यान देने योग्य बना देगा। आधे आकार के पिक्सेल के साथ, समस्या ध्यान देने योग्य के रूप में आधी होगी, लेकिन यह दूर नहीं जाएगी।

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

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

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


यह कवरेज गणना की एक समस्या है यदि मेरा सुपरसम्पलिंग कवरेज गणना नहीं करता है तो इसमें समस्याएं नहीं हैं क्योंकि यह वास्तविक उत्तर में परिवर्तित हो जाएगा बस समस्या को कम नहीं करेगा। डू आपको यह साबित करने के लिए कुछ कोड की आवश्यकता है? यह है कि आपका ग्राफिक्स कार्ड कैसे काम करता है और इसे यह समस्या नहीं आती है। अन्यथा आप जो भी खेल देखेंगे वह समस्या को प्रदर्शित करेगा। Im इस उत्तर को नहीं खरीद रहा है क्योंकि यह झूठे तर्क पर आधारित है।
पूजा

@ जूजा खेल या तो कोई एंटी-अलियासिंग नहीं करते हैं या एंटी-अलियासिंग के लिए सुपर-सैंपलिंग का उपयोग करते हैं, जो आमतौर पर एंटी-अलियासिंग के चार स्तर देता है। यह प्रेजेंटेशन क्वालिटी ग्राफिक्स के लिए पर्याप्त नहीं है, जहाँ आप एंटी-एलियासिंग के बारे में 64 स्तर चाहते हैं। तो खेल एक समस्या को दूसरे के लिए स्वैप करते हैं।
पीट किरकम

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