एक जटिल 3 डी दृश्य में अल्फा सम्मिश्रण को ठीक से कैसे लागू किया जाए?


11

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

ये वे विधियाँ हैं जिनके बारे में मैं अब तक कर रहा हूँ:

  • सबसे पहले मैं हालांकि गहराई से छँटाई गई वस्तु के बारे में, यह केवल इसलिए विफल हो जाता है क्योंकि वस्तुएं सरल आकृतियाँ नहीं हैं, उनमें घटता हो सकता है और एक दूसरे के अंदर लूप हो सकता है। इसलिए मैं हमेशा नहीं बता सकता कि कौन सा कैमरे के करीब है।

  • फिर मैंने त्रिकोणों को छांटने के बारे में सोचा लेकिन यह भी विफल हो सकता है, सोचा कि मुझे यकीन नहीं है कि इसे कैसे लागू किया जाए एक दुर्लभ मामला है जो फिर से एक समस्या पैदा कर सकता है, जिसमें दो त्रिकोण एक दूसरे से गुजरते हैं। फिर कोई नहीं बता सकता कि कौन सा निकट है।

  • अगली बात गहराई बफ़र का उपयोग कर रही थी, कम से कम हमारे पास गहराई बफ़र का मुख्य कारण है छँटाई के साथ समस्याओं के कारण जो मैंने उल्लेख किया था लेकिन अब हमें एक और समस्या मिलती है। चूंकि ऑब्जेक्ट पारदर्शी हो सकते हैं, एक ही पिक्सेल में एक से अधिक ऑब्जेक्ट दिखाई दे सकते हैं। तो किस वस्तु के लिए मुझे पिक्सेल गहराई स्टोर करनी चाहिए?

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

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

जवाबों:


11

संक्षिप्त जवाब

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

लंबा जवाब

यह एक कठिन सवाल है। अधिकांश पुस्तकें मैंने इस विषय पर पढ़ी हैं और इसे यहाँ छोड़ता हूँ:

सभी अपारदर्शी वस्तुओं को रेंडर करके शुरू करें और फिर बैक-टू-फ्रंट ऑर्डर में पारदर्शी वस्तुओं को उनके ऊपर से मिलाएं।

इजीयर ने हालांकि किया की तुलना में कहा, क्योंकि उनके केन्द्रक द्वारा वस्तुओं को छांटने का स्पष्ट दृष्टिकोण सही क्रम क्रम की गारंटी नहीं देता है।

यह वास्तव में एक ही समस्या है कि चित्रकार का एल्गोरिथ्म सामान्य मामले के लिए काम क्यों नहीं करता है और एक गहराई बफर की आवश्यकता है।

इसके साथ ही कहा कि, मेरे पास कुछ पुस्तकों में कुछ समाधान हैं:

  • गहराई छीलने - एक बहु-पास समाधान जो हमें गहराई से बफर सीमा को खत्म कर देता है, जो हमें निकटतम निकटतम टुकड़े देता है, न कि केवल निकटतम। सबसे बड़ा लाभ यह है कि आप किसी भी क्रम में पारदर्शी वस्तुओं को प्रस्तुत कर सकते हैं, और छाँटने की कोई आवश्यकता नहीं है। यह कई पास होने के कारण महंगा हो सकता है लेकिनमैंनेजो लिंक सबसे ऊपर दिया है वह प्रदर्शन को बेहतर बनाता है।

  • स्टैंसिल रूटेड K-Buffer - प्रति ज्यामिति पास पिक्सेल प्रति टुकड़े के गुणकों की परतों को पकड़ने के लिए स्टैंसिल रूटिंग का उपयोग करें। मुख्य नुकसान यह है कि टुकड़ों को एक बाद के प्रसंस्करण पास में हल करने की आवश्यकता होती है।

इसमें समस्या के हार्डवेयर समाधान का भी उल्लेख है, लेकिन मुझे नहीं लगता कि यह वास्तव में उपलब्ध है:

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

अन्य वर्कअराउंड जो सही परिणाम प्रदान नहीं करते हैं, लेकिन कुछ भी नहीं से बेहतर हैं:

  • सभी अपारदर्शी वस्तुओं को प्रस्तुत करने के बाद, पारदर्शी वस्तुओं के लिए जेड-बफर परीक्षण का उपयोग करते रहें लेकिन जेड-बफर लेखन को अक्षम करें । आपको गलत छँटाई से कुछ कलाकृतियाँ मिल सकती हैं लेकिन कम से कम सभी पारदर्शी वस्तुएँ दिखाई देंगी।

और ऊपर दिए गए एफ-बफर व्हाइटपेपर को उद्धृत करते हुए:

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


11

सही उत्तर # 1 है: अपनी सभी चीजों को गहराई से क्रमबद्ध करें और उन्हें प्रस्तुत करें (जाहिर है गहराई से लेखन बंद करें, लेकिन परीक्षण नहीं)। एक "बात" क्या है?

प्रत्येक "चीज़" एक उत्तल वस्तु होनी चाहिए; यह स्वयं को ओवरलैप नहीं कर सकता है। यदि आपके पास एक ऐसी वस्तु है जो अवतल है, तो इसे उत्तल टुकड़ों में तोड़ दिया जाना चाहिए।

यह वह जगह है एक पारदर्शी दृश्य प्रतिपादन के मानक तरीका। क्या यह इंटरपेनिट्रेटिंग मामलों को हल करता है? क्या यह उन मामलों को हल करता है जहां आपके पास 3 ऑब्जेक्ट हैं जहां कोई गहराई ऑर्डर निर्धारित नहीं किया जा सकता है? क्या यह उन मामलों को हल करता है जहां आपके पास एक लंबी वस्तु है जो एक छोटे से एक के साथ ओवरलैप होती है जो इसकी केंद्र गहराई में करीब है? नहीं।

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

आप मानक विधि के साथ कलाकृतियों को प्राप्त कर सकते हैं। लेकिन कम से कम आपका खेल काफी तेजी से चलता है।

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

मुझे नहीं पता कि तकनीक में एक नाम है, लेकिन पूर्व GL4.2 के लिए एक कार्यान्वयन यहां पाया जा सकता है। एक डी 3 डी 11 संस्करण यहां पाया जा सकता है (पावरपॉइंट, पीपीएसएक्स, लिबरे-संगत)।


इस उत्तर पर अच्छे अंक। मैं व्यक्तिगत रूप से काफी अच्छे से बस गया था (जो मैंने अपने जवाब पर वर्णित किया था, एक वर्कअराउंड के रूप में) मैंने जिन तकनीकों को सूचीबद्ध किया है उनमें से अधिकांश शायद अधिक परेशान हैं क्योंकि वे इसके लायक हैं। इसके अलावा, अंत में दिलचस्प तकनीक, मुझे नहीं लगता कि यह रियल-टाइम रेंडरिंग पर सूचीबद्ध था, जिस पर मैंने अपने उत्तर पर शोध किया था। जब यह DX11 स्तर की सुविधाओं की बात आती है तो मैं एक पूर्ण noob हूं।
डेविड गौविया

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