घनत्व फ़ंक्शन के आधार पर वॉल्यूमेट्रिक डेटा को रेंडर करने के लिए मैं ग्राफिक्स पाइपलाइन का उपयोग कैसे कर सकता हूं?


12

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

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

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

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


क्या 'फंक्शन डेंसिटी फंक्शन' एक टॉटोलॉजी है?
छप्पर

@ चरण, वह एक टाइपो था। इसके बस "डेसिटी फंक्शनलन" जो अंतरिक्ष में "पदार्थ" की उपस्थिति का प्रतिनिधित्व करता है।
द लाइट स्पार्क

2
ऐसा लगता है कि आप एक आइसोसर्फ़ का निर्माण करना चाहते हैं, जो एक अच्छी तरह से अध्ययन की गई समस्या है। क्या आपने http.developer.nvidia.com/GPUGems3/gpugems3_ch07.html देखा है या Metaballs पर खोजा है, पॉइंट क्लाउड विज़ुअलाइज़ेशन, आइसोसर्फ़ एक्सट्रैक्शन, या वॉल्यूम रेंडरिंग? इसके अलावा, आपको किस प्रकार के प्रदर्शन की आवश्यकता होती है, जो आपके द्वारा गणना की जटिलता के साथ संयोजित होने पर आपके द्वारा खोजी जाने वाली तकनीक की पसंद पर बहुत बड़ा बदलाव लाएगा। मुझे लगता है कि आपको यह भी पता चलेगा कि कैमरा चलते समय प्रति पिक्सेल झिलमिलाता होगा, और उप-पिक्सेल की आवश्यकता होगी।
पैट्रिक ह्यूजेस

जवाबों:


18

आप पूरी तरह से वॉल्यूमेट्रिक डेटा रेंडर करने के लिए GPU का उपयोग कर सकते हैं।

चूंकि आप स्क्रीन पर प्रति पिक्सेल फ़ंक्शन के एक सेट का मूल्यांकन करना चाहते हैं, एक साधारण दृष्टिकोण पूर्ण स्क्रीन त्रिकोण को प्रस्तुत करना है। यह केवल एक त्रिभुज है जो पूरी स्क्रीन को कवर करता है (वास्तव में, यह स्क्रीन से अधिक कवर करता है, क्योंकि स्क्रीन त्रिकोणीय नहीं है, लेकिन ऑफ-स्क्रीन के हिस्से GPU द्वारा खारिज कर दिए गए हैं)। फिर आप अपने वॉल्यूम के माध्यम से एक किरण का निर्माण करने के लिए पिक्सेल शेडर (जो पिक्सेल के स्क्रीन निर्देशांक प्राप्त करता है) का उपयोग कर सकते हैं, कार्यों का मूल्यांकन कर सकते हैं, जो भी आपको करने की आवश्यकता है।

(अन्य उत्तरों के विपरीत, मैं गणना करने वाले शेडर की अनुशंसा नहीं करता हूं क्योंकि ऐसा लगता है कि आप प्रति पिक्सेल संचालन करना चाहते हैं, और एक पूर्ण-स्क्रीन त्रिकोण + पिक्सेल शेडर आमतौर पर गणना करने वाले shader की तुलना में अधिक कुशल है - हालांकि कंप्यूट शेड्स भी निश्चित रूप से काम करेंगे।)

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

BTW, यह आपको Iñigo Quílez द्वारा दो त्रिकोणों के साथ रेंडरिंग वर्ल्ड्स पढ़ने में रुचि हो सकती है , एक बात जो वर्णन करती है कि फुल-स्क्रीन पिक्सेल shader तकनीक का उपयोग करके गणितीय कार्यों (विशेष रूप से, दूरस्थ क्षेत्रों) का उपयोग करके रचित 3D दृश्यों को कैसे प्रस्तुत किया जाए।


तो क्या पिक्सेल शेडर मनमाने इनपुट्स (जैसे स्ट्रिंग्स या अन्य प्रकार की उपयोगकर्ता परिभाषित ऑब्जेक्ट) में लेता है तो मैं अपने कार्यों में पास कर सकता हूं?
द लाइट स्पार्क

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

@ TheLightSpark अधिकार, आप स्ट्रिंगर को पास नहीं करेंगे (शेडिंग भाषाओं में स्ट्रिंग प्रकार भी नहीं है), आप अपने इच्छित कार्यों के लिए shader कोड जनरेट और संकलित करना चाहेंगे। यदि आवश्यक हो तो रनटाइम पर किया जा सकता है।
नाथन रीड

अपना जवाब पढ़ना शुरू कर दिया, मैंने एक त्रिकोण आकार के मॉनिटर की कल्पना की?) क्या इसका एक फायदा है कि दो के बजाय केवल एक त्रिभुज का उपयोग किया जाए जो स्क्रीन को बिना पिक्सल को कवर किए कवर करता है?
दानीझर

@danijar हां, क्वाड का उपयोग करने में इसका थोड़ा फायदा है क्योंकि पूर्ण स्क्रीन क्वाड का उपयोग करने पर विकर्ण के साथ कुछ पिक्सेल दो बार छायांकित होंगे। दूसरी ओर, ऑफ-स्क्रीन पिक्सल को त्यागना मुफ्त है क्योंकि रैस्टराइज़र उन पिक्सेल को शुरू करने के लिए उत्पन्न नहीं करेगा।
नाथन रीड

6

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


5

यह बहुत पसंद है जैसे आप GPU कम्प्यूट शेडर का उपयोग करना चाहते हैं, या अपनी आवश्यकताओं को पूरा करने के लिए पाइपलाइन को बढ़ाने में मदद करने के लिए "Shader Storage Buffer" ऑब्जेक्ट का उपयोग करें। गणितज्ञ, वैज्ञानिक और अन्य लोग जो मानक ग्राफिक्स में अनुवाद नहीं करने वाली चीजों के लिए जीपीयू की तलाश करते हैं, वे इस तरह की चीजों का उपयोग करते हैं।

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

http://community.arm.com/groups/arm-mali-graphics/blog/2014/04/17/get-started-with-compute-shaders

यदि यह आपको सही दिशा में इंगित नहीं करता है, तो क्या आप की अवधारणा का विस्तार करने में मन लगेगा जो शीर्ष / खंड प्रतिमान में फिट नहीं है?


मैंने जो कुछ भी कर रहा हूं उसे शामिल करने के लिए मैंने अपना जवाब संपादित किया। कंप्यूट shader के जवाब लग रहे हैं, लेकिन सिर्फ मुझे बताओ अगर वहाँ कुछ और है कि मैं कर सकता है।
द लाइट स्पार्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.