पिक्सेल शेडर्स हमें फ्रेमबफ़र या डेप्थ बफर से सीधे पढ़ने की अनुमति क्यों नहीं देते हैं?


18

मुझे फ़्रेमवर्क या पिक्सेल शेडर में डीपबफ़र का नमूना देना एक अत्यंत उपयोगी सुविधा होगी। यहां तक ​​कि वर्तमान पिक्सेल के पीछे जो कुछ भी है उसकी गहराई या रंग को जानने में सक्षम है।

OpenGL और DirectX दोनों ने मुझे ऐसा क्यों नहीं करने दिया? मैं उम्मीद कर रहा था कि किसी प्रकार की हार्डवेयर सीमा हो सकती है, लेकिन अल्फा सम्मिश्रण सम्मिश्रण गणना के लिए फ्रेम बफ़र में रंग का उपयोग करता है, और जेड-परीक्षण वर्तमान स्थान पर गहराई बफर का नमूना लेता है। सीधे-सीधे इन मूल्यों को उजागर क्यों नहीं किया? क्या मैं भविष्य में इसे देखने की उम्मीद कर सकता हूं?

जवाबों:


20

यह है एक हार्डवेयर सीमा। टुकड़ा shader प्रोग्राम करने योग्य पाइपलाइन का हिस्सा है, लेकिन लक्ष्य बफ़र (s) के साथ अंतिम रंग मिश्रण इस बिंदु पर व्यापक रूप से उपलब्ध / कमोडिटी हार्डवेयर में प्रोग्राम करने योग्य नहीं है (यह ब्लेंड स्टेट्स के माध्यम से कॉन्फ़िगर करने योग्य है, लेकिन आप मनमाना नहीं लिख सकते हैं कोड जो जीपीयू को अंतर्निर्मित मिश्रण संचालन में बदलता है)।

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

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

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

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


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

4

कष्टप्रद होने पर, यह हार्डवेयर निर्माताओं को कई और पारदर्शी तरीकों से प्रतिपादन प्रक्रिया का अनुकूलन करने की अनुमति देता है।

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


4

पिक्सेल शेडर रंग और गहराई बफ़र्स से नहीं पढ़ सकता क्योंकि:

पिक्सेल ए और बी को ठीक उसी क्षण हार्डवेयर में छायांकित किया जा सकता है, हालांकि बी अंततः ए (ए के बाद) के शीर्ष पर प्रतिपादन करता है।

यदि आपने इसे बनाया है तो हार्डवेयर को B से पहले A को शेड करने की गारंटी दी जाती है, तो हार्डवेयर के कुछ भाग A के छायांकित होने पर कुछ भी नहीं करने के लिए बैठते हैं, और तब B के छायांकित होने पर हार्डवेयर के कुछ भाग बिना कुछ किए बैठ जाते हैं।

सबसे खराब स्थिति में, आपके द्वारा छाया किए गए सभी पिक्सल एक दूसरे के ऊपर रेंडर करते हैं, और हजारों जीपीयू थ्रेड पर हजारों - एक को छोड़कर सभी बेकार हो जाते हैं। यह एक धागा धैर्यपूर्वक पिक्सेल ए, फिर बी, फिर सी ...

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