शेडर: Difference between revisions

From Vigyanwiki
No edit summary
Line 40: Line 40:


=== 2डी शेड्स ===
=== 2डी शेड्स ===
2डी शेड्स डिजिटल छवियों पर कार्य करते हैं, जिन्हें कंप्यूटर ग्राफिक्स के क्षेत्र में बनावट (कंप्यूटर ग्राफिक्स) भी कहा जाता है। वे पिक्सेल की विशेषताओं को संशोधित करते हैं। 2D शेडर 3D ज्यामिति के प्रतिपादन में भाग ले सकते हैं। वर्तमान में 2D शेडर का एकमात्र प्रकार पिक्सेल शेडर है।
2डी शेड्स डिजिटल छवियों पर कार्य करते हैं, जिन्हें कंप्यूटर ग्राफिक्स के क्षेत्र में बनावट (कंप्यूटर ग्राफिक्स) भी कहा जाता है। वे पिक्सेल की विशेषताओं को संशोधित करते हैं। 2डी शेडर 3डी ज्यामिति के प्रतिपादन में भाग ले सकते हैं। वर्तमान में 2डी शेडर का एकमात्र प्रकार पिक्सेल शेडर है।


==== पिक्सेल शेड्स ====
==== पिक्सेल शेड्स ====
पिक्सेल शेडर्स, जिन्हें फ़्रैगमेंट (कंप्यूटर ग्राफ़िक्स) शेडर्स के रूप में भी जाना जाता है, प्रत्येक फ़्रैगमेंट के रंग और अन्य विशेषताओं की गणना करते हैं: अधिकांश एकल आउटपुट पिक्सेल को प्रभावित करने वाले कार्य को प्रस्तुत करने की एक इकाई। सबसे सरल प्रकार के पिक्सेल शेड्स एक रंग मान के रूप में एक स्क्रीन पिक्सेल का उत्पादन करते हैं; एकाधिक इनपुट/आउटपुट वाले अधिक जटिल शेड भी संभव हैं।<ref>{{cite web|url=http://www.lighthouse3d.com/tutorials/glsl-tutorial/fragment-shader/|title=GLSL Tutorial – Fragment Shader|date=June 9, 2011}}</ref> पिक्सेल शेड्स में हमेशा एक ही रंग के आउटपुट से लेकर [[ प्रकाश |लाइटिंग]] वैल्यू लागू करने तक, बम्प मैपिंग, शैडो, [[स्पेक्युलर हाइलाइट|स्पेक्युलर हाइलाइट्स]], [[पारदर्शता]] और अन्य घटनाएं करने तक होती है। वे खंड की गहराई (जेड-बफरिंग के लिए) को बदल सकते हैं, या यदि एकाधिक रेंडर लक्ष्य सक्रिय हैं तो एक से अधिक रंग आउटपुट कर सकते हैं। 3डी ग्राफिक्स में, एक पिक्सेल शेडर अकेले कुछ प्रकार के जटिल प्रभाव उत्पन्न नहीं कर सकता है क्योंकि यह दृश्य की ज्यामिति (अर्थात वर्टेक्स डेटा) के ज्ञान के बिना केवल एक ही टुकड़े पर काम करता है। चूंकि, पिक्सेल शेडर्स को स्क्रीन निर्देशांक तैयार करने का ज्ञान होता है, और यदि पूरी स्क्रीन की सामग्री शेडर को बनावट के रूप में पारित की जाती है तो स्क्रीन और आस-पास के पिक्सेल का नमूना ले सकते हैं। यह तकनीक [[ गौस्सियन धुंधलापन |गौस्सियन धुंधलापन]] ,कार्टून/सीएल शेडर्स के लिए ब्लर, या एज डिटेक्शन/एन्हांसमेंट जैसे द्वि-आयामी पोस्टप्रोसेसिंग प्रभावों की एक विस्तृत विविधता को सक्षम कर सकती है। ग्राफिक्स पाइपलाइन में किसी भी दो-आयामी छवियों- [[स्प्राइट (कंप्यूटर ग्राफिक्स)]] या बनावट (कंप्यूटर ग्राफिक्स) के मध्यवर्ती चरणों में पिक्सेल शेडर्स को भी लागू किया जा सकता है, जबकि वर्टेक्स शेडर्स को हमेशा 3 डी दृश्य की आवश्यकता होती है। उदाहरण के लिए, एक पिक्सेल शेडर एकमात्र प्रकार का शेडर है जो [[वीडियो पोस्टप्रोसेसिंग]] के रूप में कार्य कर सकता है या [[ विडियो स्ट्रीम |विडियो स्ट्रीम]] के लिए [[वीडियो फिल्टर]] करने के पश्चात इसे रेखापुंज कर सकता है।
पिक्सेल शेडर्स, जिन्हें फ़्रैगमेंट (कंप्यूटर ग्राफ़िक्स) शेडर्स के रूप में भी जाना जाता है, प्रत्येक फ़्रैगमेंट के रंग और अन्य विशेषताओं की गणना करते हैं: अधिकांश एकल आउटपुट पिक्सेल को प्रभावित करने वाले कार्य को प्रस्तुत करने की एक इकाई। सबसे सरल प्रकार के पिक्सेल शेड्स एक रंग मान के रूप में एक स्क्रीन पिक्सेल का उत्पादन करते हैं; एकाधिक इनपुट/आउटपुट वाले अधिक जटिल शेड भी संभव हैं।<ref>{{cite web|url=http://www.lighthouse3d.com/tutorials/glsl-tutorial/fragment-shader/|title=GLSL Tutorial – Fragment Shader|date=June 9, 2011}}</ref> पिक्सेल शेड्स में हमेशा एक ही रंग के आउटपुट से लेकर [[ प्रकाश |लाइटिंग]] वैल्यू लागू करने तक, बम्प मैपिंग, शैडो, [[स्पेक्युलर हाइलाइट|स्पेक्युलर हाइलाइट्स]], [[पारदर्शता]] और अन्य घटनाएं करने तक होती है। वे खंड की गहराई (जेड-बफरिंग के लिए) को बदल सकते हैं, या यदि एकाधिक रेंडर लक्ष्य सक्रिय हैं तो एक से अधिक रंग आउटपुट कर सकते हैं। 3डी ग्राफिक्स में, एक पिक्सेल शेडर अकेले कुछ प्रकार के जटिल प्रभाव उत्पन्न नहीं कर सकता है क्योंकि यह दृश्य की ज्यामिति (अर्थात वर्टेक्स डेटा) के ज्ञान के बिना केवल एक ही टुकड़े पर काम करता है। चूंकि, पिक्सेल शेडर्स को स्क्रीन निर्देशांक तैयार करने का ज्ञान होता है, और यदि पूरी स्क्रीन की सामग्री शेडर को बनावट के रूप में पारित की जाती है तो स्क्रीन और आस-पास के पिक्सेल का नमूना ले सकते हैं। यह तकनीक [[ गौस्सियन धुंधलापन |गौस्सियन धुंधलापन]] ,कार्टून/सीएल शेडर्स के लिए ब्लर, या एज डिटेक्शन/एन्हांसमेंट जैसे द्वि-आयामी पोस्टप्रोसेसिंग प्रभावों की एक विस्तृत विविधता को सक्षम कर सकती है। ग्राफिक्स पाइपलाइन में किसी भी दो-आयामी छवियों- [[स्प्राइट (कंप्यूटर ग्राफिक्स)]] या बनावट (कंप्यूटर ग्राफिक्स) के मध्यवर्ती चरणों में पिक्सेल शेडर्स को भी लागू किया जा सकता है, जबकि वर्टेक्स शेडर्स को हमेशा 3डी दृश्य की आवश्यकता होती है। उदाहरण के लिए, एक पिक्सेल शेडर एकमात्र प्रकार का शेडर है जो [[वीडियो पोस्टप्रोसेसिंग]] के रूप में कार्य कर सकता है या [[ विडियो स्ट्रीम |विडियो स्ट्रीम]] के लिए [[वीडियो फिल्टर]] करने के पश्चात इसे रेखापुंज कर सकता है।


=== 3डी शेड्स ===
=== 3डी शेड्स ===
3D शेडर [[मॉडल की गिनती]] या अन्य ज्यामिति पर कार्य करते हैं, लेकिन मॉडल या [[बहुभुज जाल]] बनाने के लिए उपयोग किए जाने वाले रंगों और बनावटों तक भी पहुंच सकते हैं। वर्टेक्स शेड्स सबसे पुराने प्रकार के 3D शेडर हैं, जो सामान्यतः प्रति-शीर्ष आधार पर संशोधन करते हैं। नए ज्योमेट्री शेड्स शेडर के भीतर से नए वर्टिकल उत्पन्न कर सकते हैं। टेस्सेलेशन शेडर नवीनतम 3डी शेडर हैं; वे विवरण जोड़ने के लिए एक साथ शीर्षों के बैचों पर कार्य करते हैं—जैसे कि किसी मॉडल को त्रिभुजों के छोटे समूहों में उप-विभाजित करना या रनटाइम पर अन्य आदिम,घटता और टक्कर जैसी चीज़ों को सुधारने के लिए, या अन्य विशेषताओं को बदलने  के लिए।
3डी शेडर [[मॉडल की गिनती]] या अन्य ज्यामिति पर कार्य करते हैं, लेकिन मॉडल या [[बहुभुज जाल]] बनाने के लिए उपयोग किए जाने वाले रंगों और बनावटों तक भी पहुंच सकते हैं। वर्टेक्स शेड्स सबसे पुराने प्रकार के 3डी शेडर हैं, जो सामान्यतः प्रति-शीर्ष आधार पर संशोधन करते हैं। नए ज्योमेट्री शेड्स शेडर के भीतर से नए वर्टिकल उत्पन्न कर सकते हैं। टेस्सेलेशन शेडर नवीनतम 3डी शेडर हैं; वे विवरण जोड़ने के लिए एक साथ शीर्षों के बैचों पर कार्य करते हैं—जैसे कि किसी मॉडल को त्रिभुजों के छोटे समूहों में उप-विभाजित करना या रनटाइम पर अन्य आदिम,घटता और टक्कर जैसी चीज़ों को सुधारने के लिए, या अन्य विशेषताओं को बदलने  के लिए।


==== वर्टेक्स शेड्स ====
==== वर्टेक्स शेड्स ====
वर्टेक्स शेड्स सबसे स्थापित और सामान्य प्रकार के 3डी शेडर हैं और ग्राफिक्स प्रोसेसर को दिए गए प्रत्येक वर्टेक्स (कंप्यूटर ग्राफिक्स) के लिए एक बार चलाए जाते हैं। इसका उद्देश्य वर्चुअल स्पेस में प्रत्येक वर्टेक्स की 3डी स्थिति को 2डी समन्वय में बदलना है, जिस पर यह स्क्रीन पर दिखाई देता है (साथ ही जेड-बफर के लिए गहराई मान)।<ref>{{cite web|url=http://www.lighthouse3d.com/tutorials/glsl-tutorial/vertex-shader/|title=GLSL Tutorial – Vertex Shader|date=June 9, 2011}}</ref> वर्टेक्स शेड्स स्थिति, रंग और बनावट निर्देशांक जैसे गुणों में हेरफेर कर सकते हैं, लेकिन नए कोने नहीं बना सकते। वर्टेक्स शेडर का आउटपुट पाइपलाइन में अगले चरण में जाता है, जो या तो ज्यामिति शेडर है, यदि उपस्थित है, या [[रास्टेराइज़र]] है। वर्टेक्स शेडर्स 3D मॉडल वाले किसी भी दृश्य में स्थिति, गति, प्रकाश और रंग के विवरण पर शक्तिशाली नियंत्रण सक्षम कर सकते हैं।
वर्टेक्स शेड्स सबसे स्थापित और सामान्य प्रकार के 3डी शेडर हैं और ग्राफिक्स प्रोसेसर को दिए गए प्रत्येक वर्टेक्स (कंप्यूटर ग्राफिक्स) के लिए एक बार चलाए जाते हैं। इसका उद्देश्य वर्चुअल स्पेस में प्रत्येक वर्टेक्स की 3डी स्थिति को 2डी समन्वय में बदलना है, जिस पर यह स्क्रीन पर दिखाई देता है (साथ ही जेड-बफर के लिए गहराई मान)।<ref>{{cite web|url=http://www.lighthouse3d.com/tutorials/glsl-tutorial/vertex-shader/|title=GLSL Tutorial – Vertex Shader|date=June 9, 2011}}</ref> वर्टेक्स शेड्स स्थिति, रंग और बनावट निर्देशांक जैसे गुणों में हेरफेर कर सकते हैं, लेकिन नए कोने नहीं बना सकते। वर्टेक्स शेडर का आउटपुट पाइपलाइन में अगले चरण में जाता है, जो या तो ज्यामिति शेडर है, यदि उपस्थित है, या [[रास्टेराइज़र]] है। वर्टेक्स शेडर्स 3डी मॉडल वाले किसी भी दृश्य में स्थिति, गति, प्रकाश और रंग के विवरण पर शक्तिशाली नियंत्रण सक्षम कर सकते हैं।


==== ज्यामिति शेड्स ====
==== ज्यामिति शेड्स ====
ज्यामिति शेड्स को डायरेक्ट 3 डी 10 और OpenGL 3.2 में पेश किया गया था; पहले एक्सटेंशन के उपयोग के साथ OpenGL 2.0+ में उपलब्ध था।<ref>[http://www.opengl.org/wiki/Geometry_Shader Geometry Shader - OpenGL]. Retrieved on December 21, 2011.</ref> इस प्रकार के शेडर उन आदिम से नए ग्राफिक्स [[आदिम (ज्यामिति)]] उत्पन्न कर सकता है, जैसे कि बिंदु, रेखाएँ और त्रिकोण, जो ग्राफिक्स पाइपलाइन की शुरुआत में भेजे गए थे।<ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/bb205123(VS.85).aspx|title=Pipeline Stages (Direct3D 10) (Windows)|website=msdn.microsoft.com}}</ref>
ज्यामिति शेड्स को डायरेक्ट 3डी 10 और OpenGL 3.2 में पेश किया गया था; पहले एक्सटेंशन के उपयोग के साथ OpenGL 2.0+ में उपलब्ध था।<ref>[http://www.opengl.org/wiki/Geometry_Shader Geometry Shader - OpenGL]. Retrieved on December 21, 2011.</ref> इस प्रकार के शेडर उन आदिम से नए ग्राफिक्स [[आदिम (ज्यामिति)]] उत्पन्न कर सकता है, जैसे कि बिंदु, रेखाएँ और त्रिकोण, जो ग्राफिक्स पाइपलाइन की शुरुआत में भेजे गए थे।<ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/bb205123(VS.85).aspx|title=Pipeline Stages (Direct3D 10) (Windows)|website=msdn.microsoft.com}}</ref>


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


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


==== आदिम और मेश शेड्स ====
==== आदिम और मेश शेड्स ====
Line 77: Line 77:


== प्रोग्रामिंग ==
== प्रोग्रामिंग ==
जिस भाषा में शेडर प्रोग्राम किए जाते हैं वह लक्षित वातावरण पर निर्भर करता है। आधिकारिक OpenGL और [[OpenGL ES|ओपनजीएल ईएस]] छायांकन भाषा ओपनजीएल ईएस छायांकन भाषा है, जिसे जीएलएसएल के रूप में भी जाना जाता है, और आधिकारिक डायरेक्ट 3 डी छायांकन भाषा [[HLSL|उच्च स्तरीय छायांकन भाषा]] है, जिसे एचएलएसएल के रूप में भी जाना जाता है। [[सीजी (प्रोग्रामिंग भाषा)]], एक तृतीय-पक्ष छायांकन भाषा जो ओपनजीएल और डायरेक्ट 3 डी शेडर्स दोनों को आउटपुट करती है, [[NVIDIA|एनवीडिया]] द्वारा विकसित की गई थी; हालाँकि 2012 से इसे हटा दिया गया है। एप्प्ल ने [[Metal (iOS API)|मेटल (आईओएस एपीआई)]] के भाग के रूप में मेटल शेडिंग भाषा नामक अपनी स्वयं की छायांकन भाषा जारी की।
जिस भाषा में शेडर प्रोग्राम किए जाते हैं वह लक्षित वातावरण पर निर्भर करता है। आधिकारिक OpenGL और [[OpenGL ES|ओपनजीएल ईएस]] छायांकन भाषा ओपनजीएल ईएस छायांकन भाषा है, जिसे जीएलएसएल के रूप में भी जाना जाता है, और आधिकारिक डायरेक्ट 3डी छायांकन भाषा [[HLSL|उच्च स्तरीय छायांकन भाषा]] है, जिसे एचएलएसएल के रूप में भी जाना जाता है। [[सीजी (प्रोग्रामिंग भाषा)]], एक तृतीय-पक्ष छायांकन भाषा जो ओपनजीएल और डायरेक्ट 3डी शेडर्स दोनों को आउटपुट करती है, [[NVIDIA|एनवीडिया]] द्वारा विकसित की गई थी; हालाँकि 2012 से इसे हटा दिया गया है। एप्प्ल ने [[Metal (iOS API)|मेटल (आईओएस एपीआई)]] के भाग के रूप में मेटल शेडिंग भाषा नामक अपनी स्वयं की छायांकन भाषा जारी की।


=== जीयूआई शेडर संपादक ===
=== जीयूआई शेडर संपादक ===

Revision as of 16:13, 24 March 2023

File:Phong-shading-sample (cropped).jpg
3 डी मॉडलिंग के प्रतिपादन में रोशनी और छाया वाले क्षेत्रों का उत्पादन करने के लिए शेडर्स का सबसे अधिक उपयोग किया जाता है। फोंग छायांकन (दाएं) गौरौड छायांकन पर एक सुधार है, और मूल फ्लैट छायांकन (बाएं) के पश्चात कभी विकसित किए गए पहले कंप्यूटर छायांकन मॉडलों में से एक था, जो रेंडर में घुमावदार सतहों की उपस्थिति को बहुत बढ़ाता है।
File:Example of a Shader.png
शेडर्स का एक और उपयोग विशेष प्रभावों के लिए है, यहां तक ​​कि 2डी छवियों पर भी, (उदाहरण के लिए, एक वेबकैम से एक डिजिटल फोटोग्राफ)। अपरिवर्तित, अपरिवर्तित छवि बाईं ओर है, और उसी छवि में दाईं ओर एक शेडर लगाया गया है। यह शेडर छवि के सभी प्रकाश क्षेत्रों को सफेद और सभी अंधेरे क्षेत्रों को चमकीले रंग की बनावट के साथ बदलकर काम करता है।

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

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

फिल्म निर्माण पोस्ट प्रोसेसिंग (छवियां), कंप्यूटर-जनित इमेजरी और वीडियो गेम में कई तरह के प्रभाव पैदा करने के लिए शेडर्स का व्यापक रूप से उपयोग किया जाता है। सरल प्रकाश मॉडल के अतिरिक्त, शेडर्स के अधिक जटिल उपयोगों में सम्मलित हैं: रंग,रंगीनपन, चमक (एचएसएल / एचएसवी) या छवि के कंट्रास्ट (दृष्टि) को बदलना; डिफोकस विपथन, हल्का खिलना , वॉल्यूमेट्रिक लाइटिंग, साधारण मानचित्रण (डेप्थ इफेक्ट्स के लिए), बोकेह, सार्डिन को मापना, पोस्टराइजेशन, उभार का मानचित्रण , डिस्टॉर्शन (ऑप्टिक्स), क्रोमा कीइंग (तथाकथित ब्लूस्क्रीन /हरा पर्दा इफेक्ट्स के लिए), किनारे का पता लगाना और मोशन पहचान, जैसे साथ ही साइकेडेलिया प्रभाव जैसे कि डेमोसीन में देखे गए।

इतिहास

"शेडर" शब्द के इस प्रयोग को पिक्सर द्वारा उनके रेंडरमैन इंटरफ़ेस विशिष्टता के संस्करण 3.0 के साथ जनता के लिए पेश किया गया था, जो मूल रूप से मई 1988 में प्रकाशित हुआ था।[2]

जैसे-जैसे ग्राफिक्स प्रोसेसिंग यूनिट विकसित हुई, ओपन जीएल और डायरेक्ट 3 डी जैसी प्रमुख ग्राफिक्स सॉफ्टवेयर पुस्तकालय ने शेडर्स का समर्थन करना शुरू कर दिया। पहला शेडर-सक्षम जीपीयू केवल पिक्सेल छायांकन का समर्थन करता था, लेकिन डेवलपर्स को शेडर्स की शक्ति का एहसास होने के पश्चात वर्टेक्स शेडर्स जल्दी से पेश किए गए थे। प्रोग्रामेबल पिक्सेल शेडर वाला पहला वीडियो कार्ड Nvidia GeForce 3 (NV20) था, जिसे 2001 में रिलीज़ किया गया था।[3] ज्यामिति शेड्स को डायरेक्ट 3 डी 10 और OpenGL 3.2 के साथ सम्मुख किया गया था। आखिरकार, ग्राफिक्स हार्डवेयर एक एकीकृत शेडर मॉडल की ओर विकसित हुआ

डिजाइन

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

शेडर्स ग्राफिक्स हार्डवेयर के एक भाग को प्रतिस्थापित करते हैं जिसे सामान्यतः फिक्स्ड फंक्शन पाइपलाइन (एफएफपी) कहा जाता है, तथाकथित क्योंकि यह हार्ड-कोडेड तरीके से कंप्यूटर ग्राफिक्स प्रकाश और बनावट का मानचित्रण बनाता है। शेडर्स इस हार्ड-कोडेड दृष्टिकोण के लिए प्रोग्राम करने योग्य विकल्प प्रदान करते हैं।[4]

मूल ग्राफिक्स पाइपलाइन इस प्रकार है:

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

प्रदर्शित करने के लिए त्रि-आयामी (या द्वि-आयामी) डेटा को उपयोगी द्वि-आयामी डेटा में बदलने के लिए ग्राफिक पाइपलाइन इन चरणों का उपयोग करती है। सामान्य तौर पर, यह एक बड़ा पिक्सेल मैट्रिक्स या फ्रेम बफर होता है।

प्रकार

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

2डी शेड्स

2डी शेड्स डिजिटल छवियों पर कार्य करते हैं, जिन्हें कंप्यूटर ग्राफिक्स के क्षेत्र में बनावट (कंप्यूटर ग्राफिक्स) भी कहा जाता है। वे पिक्सेल की विशेषताओं को संशोधित करते हैं। 2डी शेडर 3डी ज्यामिति के प्रतिपादन में भाग ले सकते हैं। वर्तमान में 2डी शेडर का एकमात्र प्रकार पिक्सेल शेडर है।

पिक्सेल शेड्स

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

3डी शेड्स

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

वर्टेक्स शेड्स

वर्टेक्स शेड्स सबसे स्थापित और सामान्य प्रकार के 3डी शेडर हैं और ग्राफिक्स प्रोसेसर को दिए गए प्रत्येक वर्टेक्स (कंप्यूटर ग्राफिक्स) के लिए एक बार चलाए जाते हैं। इसका उद्देश्य वर्चुअल स्पेस में प्रत्येक वर्टेक्स की 3डी स्थिति को 2डी समन्वय में बदलना है, जिस पर यह स्क्रीन पर दिखाई देता है (साथ ही जेड-बफर के लिए गहराई मान)।[6] वर्टेक्स शेड्स स्थिति, रंग और बनावट निर्देशांक जैसे गुणों में हेरफेर कर सकते हैं, लेकिन नए कोने नहीं बना सकते। वर्टेक्स शेडर का आउटपुट पाइपलाइन में अगले चरण में जाता है, जो या तो ज्यामिति शेडर है, यदि उपस्थित है, या रास्टेराइज़र है। वर्टेक्स शेडर्स 3डी मॉडल वाले किसी भी दृश्य में स्थिति, गति, प्रकाश और रंग के विवरण पर शक्तिशाली नियंत्रण सक्षम कर सकते हैं।

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

ज्यामिति शेड्स को डायरेक्ट 3डी 10 और OpenGL 3.2 में पेश किया गया था; पहले एक्सटेंशन के उपयोग के साथ OpenGL 2.0+ में उपलब्ध था।[7] इस प्रकार के शेडर उन आदिम से नए ग्राफिक्स आदिम (ज्यामिति) उत्पन्न कर सकता है, जैसे कि बिंदु, रेखाएँ और त्रिकोण, जो ग्राफिक्स पाइपलाइन की शुरुआत में भेजे गए थे।[8]

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

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

टेसलेशन शेड्स

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