हल, डोमेन और ज्योमेट्री शेड्स किसके लिए उपयोग किए जाते हैं?


21

मैंने अपने (पूर्व) नियोक्ता के लिए 3 डी गेम प्रोग्रामिंग का अपना उचित हिस्सा किया है, और अपने स्वयं के इंडी गेम्स के लिए अपने स्वयं के कस्टम इंजनों में भी।

प्रारंभ में, मैंने डायरेक्ट 3 डी 9, और डी 3 डीएक्स 9 के साथ शुरुआत की, जिसने मेरे लिए बहुत कुछ किया, और मुझे छाया के संदर्भ में सोचने की आवश्यकता नहीं थी।

उसके बाद, मैंने अपना पहला Direct3D 9 शेड्स लिखा, लेकिन ज्यादातर मैंने जो कुछ भी किया उसके लिए एक बहुत ही साधारण शेडर का उपयोग किया।

मेरे गेम इंजन के सबसे हाल के पुनरावृत्ति में, मैं डायरेक्ट 3 डी 11 में चला गया, और इसके साथ ही मैंने बहुत सारे शेड बनाए। मैंने GPU स्किनिंग, GPU कैलकुलेटेड कण, बहुत सारी लाइटिंग और पोस्ट प्रोसेसिंग इफेक्ट्स, सभी GPU में किए। वास्तव में अच्छा सामान।

अब तक मैंने केवल वर्टेक्स और पिक्सेल / टुकड़े टुकड़े का उपयोग किया है। हालांकि अभी भी बहुत सारी चीजें हैं जो मैंने अभी भी नहीं की हैं, मेरा मानना ​​है कि मुझे इस बात का ठोस ज्ञान है कि वर्टेक्स और पिक्सेल / टुकड़े टुकड़े क्या करते हैं, और यह कि सभी पूरी 3 डी पाइपलाइन में कैसे फिट होते हैं।

अधिक हाल के घटनाक्रमों के साथ पकड़ने पर, मुझे नए शेडर चरणों के साथ बहुत दिलचस्पी हो गई है। यही है, ज्यामिति शेडर, और यहां तक ​​कि नया, हल और डोमेन शेड्स।

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

मेरा अनुमान है कि ज्यामिति shader का मुख्य उपयोग GPU में ज्यामिति को प्रोग्राम करने के लिए होगा। एक सामान्य उपयोग एक एकल शीर्ष के आधार पर बिलबोर्ड क्वैड बनाने के लिए होगा, लेकिन मैं वास्तव में कई अन्य सामान्य परिदृश्यों के अलावा भग्न और अन्य सामान उत्पन्न करने की कल्पना नहीं करता हूं जो आप प्रोग्रामेटिक रूप से 100% उत्पन्न कर सकते हैं।

हल और डोमेन शेड के लिए, ऐसा लगता है जैसे वे टेसलेशन से संबंधित हैं (किसी न किसी सतह से चिकनी सतह बनाना?), और एक साथ या बिल्कुल भी उपयोग नहीं किया जाना चाहिए। "पैच" शब्द भी यहाँ आम लगता है।

किसी को भी मुझे समझाने की परवाह है, व्यावहारिक रूप में, ये नए-नए shader चरणों क्या हैं, वे 3D पाइपलाइन में कैसे फिट होते हैं, और किन मामलों में मुझे उनका उपयोग करने पर विचार करना चाहिए?


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

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

मुझे पता नहीं है, "व्यावहारिक उपयोग के उदाहरण" मेरे लिए थोड़ा व्यापक है। मैंने हालांकि इस पर कड़ा कदम उठाया, लेकिन इस टिप्पणी से पहले यह आपके लिए "वे क्या करते हैं" पर बहुत अधिक ध्यान केंद्रित कर रहे हैं।

@ जोश: क्या आप उपयोग करते हैं, या क्या आपने वास्तविक दुनिया में इन चरणों का इस्तेमाल किया है?
पांडा पायजामा

1
उन लोगों के लिए एक FYI, जिनके पास गैर-प्रत्यक्ष पृष्ठभूमि है (स्वयं की तरह), इन दोनों को ओपनजीएल और वुलकान में "टेसलेशन कंट्रोल शेडर" और "टेसेलेशन मूल्यांकन शेडर" कहा जाता है।
शाहबाज़

जवाबों:


13

हल और डोमेन

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

पतवार shader एक इनपुट पैच लेता है और एक आउटपुट पैच (या पैच बनाता है; यह वह जगह है जहाँ पैच का उपखंड आमतौर पर होता है)। पैच के बारे में लगातार मेटाडेटा को पतवार के बाद और पाइप लाइन के बाद के चरणों में संसाधित करने के लिए आउटपुट के साथ गणना की जा सकती है।

पतवार shader का उत्पादन एक (निश्चित कार्य) tessellation चरण के माध्यम से चलता है जो उचित प्रकार (जैसे, quads या त्रिकोण) के टाइलयुक्त, सामान्यीकृत डोमेन का उत्पादन करता है।

डोमेन शेडर को इन डोमेन के विरुद्ध निष्पादित किया जाता है ताकि किसी डोमेन में किसी भी बिंदु के वास्तविक शीर्ष स्थान की गणना की जा सके, जो पूर्वोक्त टेसलेशन के परिणामस्वरूप हुआ था। डोमेन shader इस प्रकार एक शीर्ष स्थिति का उत्पादन करता है।

टेसलेशन चरण पाइपलाइन में वर्टेकर शेडर चरण के बाद होता है।

ज्यामिति शेड्स

ज्यामिति के शेड एक तरह से सरलीकृत पतवार / डोमेन शेड जैसे होते हैं। वे केवल इनपुट वर्टिकल लेते हैं और आउटपुट वर्टिकल उत्पन्न करते हैं। दिए गए इनपुट वर्टेक्स के लिए, कई आउटपुट वर्टीकल का उत्पादन किया जा सकता है, इसलिए उनका उपयोग "ज्यामिति उत्पन्न करने" के लिए किया जा सकता है।

ज्यामिति shader चरण शीर्ष shader के बाद, और tessellation चरण के बाद होता है।

उपयोग

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

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

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

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

आगे पढ़ने के लिए, जिसमें मैं यथोचित रूप से याद कर सकता हूँ या यहाँ जा सकता हूँ, की तुलना में अधिक विस्तार सहित:


4
ध्यान रखें कि पतवार और डोमेन शेड के लिए Direct3D फ़ीचर लेवल 11.0 या बाद के हार्डवेयर की आवश्यकता होती है, और ज्योमेट्री शेडर्स को Direct3D फ़ीचर लेवल 10.0 या बाद के हार्डवेयर की आवश्यकता होती है। इसके अलावा, अधिकांश वीडियो कार्ड डिज़ाइन ज्यामिति शेडर चरण को बहुत कम समर्पित हार्डवेयर नहीं देते हैं, इसलिए व्यवहार में उनकी उपयोगिता मूल रूप से उनकी तुलना में बहुत कम है।
वाल्कबर्न

@ChuckWalbourn: मैं वास्तव में और अधिक सुनना चाहूंगा, यदि आप चाहें, तो एक अलग उत्तर में
पांडा पायजामा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.