नमस्ते! आज मैं पर चर्चा जारी रखता हूं। यह लेख पिछले वाले से दो गुना बड़ा होगा. कसी पकड़! यूनिटी में प्रतिपादन शेडर क्या है? पिछले लेख में वर्णित बातों के आधार पर, शेडर एक छोटा प्रोग्राम है जिसका उपयोग हमारी परियोजनाओं में दिलचस्प प्रभाव पैदा करने के लिए किया जा सकता है। इसमें गणितीय गणनाएँ और निर्देशों (आदेशों) की सूचियाँ शामिल हैं। वे हमें हमारे कंप्यूटर स्क्रीन पर ऑब्जेक्ट को कवर करने वाले क्षेत्र में प्रत्येक पिक्सेल के लिए रंग संसाधित करने या ऑब्जेक्ट परिवर्तनों के साथ काम करने की अनुमति देते हैं (उदाहरण के लिए, गतिशील घास या पानी बनाने के लिए)। यह प्रोग्राम हमें अपने बहुभुज ऑब्जेक्ट के गुणों के आधार पर तत्व (समन्वय प्रणालियों का उपयोग करके) खींचने की अनुमति देता है। शेडर्स को पर निष्पादित किया जाता है क्योंकि इसमें एक समानांतर आर्किटेक्चर होता है जिसमें हजारों छोटे, कुशल कोर होते हैं जो एक साथ कार्यों को संभालने के लिए डिज़ाइन किए जाते हैं। वैसे, सीपीयू को अनुक्रमिक सीरियल प्रोसेसिंग के लिए डिज़ाइन किया गया था। GPU ध्यान दें कि यूनिटी में शेडर से संबंधित तीन प्रकार की फ़ाइलें हैं। सबसे पहले, हमारे पास ".shader" एक्सटेंशन वाले प्रोग्राम हैं जो विभिन्न प्रकार की रेंडरिंग पाइपलाइनों को संकलित करने में सक्षम हैं। दूसरा, हमारे पास ".shadergraph" एक्सटेंशन वाले प्रोग्राम हैं जो केवल URP या HDRP में संकलित हो सकते हैं। इसके अलावा, हमारे पास ".hlsl" एक्सटेंशन वाली फ़ाइलें हैं जो हमें अनुकूलित फ़ंक्शन बनाने की अनुमति देती हैं। इनका उपयोग आम तौर पर कस्टम फ़ंक्शन नामक नोड प्रकार में किया जाता है, जो शेडर ग्राफ़ में पाया जाता है। ".cginc" एक्सटेंशन के साथ एक अन्य शेडर प्रकार भी है - कंप्यूट शेडर। यह ".shader" CGPROGRAM से संबद्ध है, जबकि ".hlsl" ".shadergraph" HLSLPROGRAM से संबद्ध है। यूनिटी में, शेडर पीढ़ी के लिए कम से कम चार प्रकार की संरचनाएं परिभाषित की गई हैं। उनमें से, हम शीर्ष और खंड शेडर्स, स्वचालित प्रकाश गणना के लिए सतह शेडर्स और अधिक उन्नत अवधारणाओं के लिए शेडर्स की गणना का संयोजन पा सकते हैं। शेडर भाषा में एक छोटा सा भ्रमण इससे पहले कि हम सामान्य रूप से शेडर्स लिखना शुरू करें, हमें यह ध्यान रखना चाहिए कि यूनिटी में तीन शेडर प्रोग्रामिंग भाषाएं हैं: एचएलएसएल (उच्च स्तरीय शेडर भाषा - माइक्रोसॉफ्ट) Cg (ग्राफिक्स के लिए C - NVIDIA) - एक अप्रचलित प्रारूप शेडरलैब - एक घोषणात्मक भाषा - यूनिटी हम जल्दी से Cg, देखेंगे और HLSL को थोड़ा स्पर्श करेंगे। ShaderLab को सीजी एक उच्च स्तरीय प्रोग्रामिंग भाषा है जिसे अधिकांश जीपीयू पर संकलित करने के लिए डिज़ाइन किया गया है। NVIDIA ने इसे Microsoft के सहयोग से विकसित किया और HLSL के समान एक सिंटैक्स का उपयोग किया। शेडर्स सीजी भाषा के साथ काम करने का कारण यह है कि वे एचएलएसएल और जीएलएसएल (ओपनजीएल शेडिंग लैंग्वेज) दोनों के साथ संकलित कर सकते हैं, जिससे वीडियो गेम के लिए सामग्री बनाने की प्रक्रिया तेज और अनुकूलित हो सकती है। यूनिटी में सभी शेडर्स (शेडर ग्राफ़ और कंप्यूट को छोड़कर) शेडरलैब नामक घोषणात्मक भाषा में लिखे गए हैं। इस भाषा का सिंटैक्स हमें यूनिटी इंस्पेक्टर में शेडर के गुणों को प्रदर्शित करने की अनुमति देता है। यह बहुत दिलचस्प है क्योंकि हम वास्तविक समय में चर और वैक्टर के मूल्यों में हेरफेर कर सकते हैं, वांछित परिणाम प्राप्त करने के लिए अपने शेडर को अनुकूलित कर सकते हैं। शेडरलैब में, हम मैन्युअल रूप से कई गुणों और कमांड को परिभाषित कर सकते हैं, उनमें फ़ॉलबैक भी शामिल है। यह यूनिटी में मौजूद विभिन्न प्रकार की रेंडरिंग पाइपलाइनों के साथ संगत है। फ़ॉलबैक मल्टीप्लेटफ़ॉर्म गेम में कोड का एक मूलभूत ब्लॉक है। यह हमें त्रुटि उत्पन्न करने वाले शेडर के बजाय किसी अन्य शेडर को संकलित करने की अनुमति देता है। यदि संकलन के दौरान एक शेडर टूट जाता है, तो फ़ॉलबैक एक और शेडर लौटाता है, और ग्राफ़िक्स हार्डवेयर अपना काम जारी रख सकता है। यह आवश्यक है ताकि हमें Xbox और PlayStation के लिए अलग-अलग शेडर्स न लिखना पड़े बल्कि एकीकृत शेडर्स का उपयोग करना पड़े। यूनिटी में बुनियादी शेडर प्रकार यूनिटी में बुनियादी शेडर प्रकार हमें विभिन्न उद्देश्यों के लिए उपयोग किए जाने वाले सबरूटीन बनाने की अनुमति देते हैं। आइए चर्चा करें कि प्रत्येक प्रकार किसके लिए जिम्मेदार है: इस प्रकार के शेडर को लेखन कोड के अनुकूलन की विशेषता है जो बेस लाइटिंग मॉडल के साथ इंटरैक्ट करता है और केवल बिल्ट-इन आरपी के साथ काम करता है। मानक सतह शेडर। अनलिट शेडर. यह प्राथमिक रंग मॉडल को संदर्भित करता है और आधार संरचना होगी जिसका उपयोग हम आम तौर पर अपने प्रभाव बनाने के लिए करते हैं। संरचनात्मक रूप से, यह अनलिट शेडर के समान है। ये शेडर्स मुख्य रूप से बिल्ट-इन आरपी पोस्ट-प्रोसेसिंग प्रभावों में उपयोग किए जाते हैं और इसके लिए "ऑनरेंडरइमेज ()" फ़ंक्शन (सी#) की आवश्यकता होती है। छवि प्रभाव शेडर. इस प्रकार की विशेषता इस तथ्य से है कि इसे वीडियो कार्ड पर निष्पादित किया जाता है और यह संरचनात्मक रूप से पहले उल्लिखित शेडर्स से बहुत अलग है। शेडर की गणना करें. एक प्रयोगात्मक प्रकार का शेडर जो वास्तविक समय में किरण अनुरेखण को एकत्र करने और संसाधित करने की अनुमति देता है। यह केवल HDRP और DXR के साथ काम करता है। रेट्रेसिंग शेडर। एक खाली ग्राफ़-आधारित शेडर जिसके साथ आप नोड्स का उपयोग करके शेडर भाषाओं के ज्ञान के बिना काम कर सकते हैं। रिक्त शेडर ग्राफ़. यह एक सब-शेडर है जिसका उपयोग अन्य शेडर ग्राफ़ शेडर्स में किया जा सकता है। उप ग्राफ़. एकता में प्रतिपादन एक कठिन विषय है, इसलिए इस गाइड को ध्यान से पढ़ें। शेडर संरचना शेडर्स की संरचना का विश्लेषण करने के लिए, हमें बस अनलिट पर आधारित एक सरल शेडर बनाना होगा और उसका विश्लेषण करना होगा। जब हम पहली बार शेडर बनाते हैं, तो यूनिटी संकलन प्रक्रिया को आसान बनाने के लिए डिफ़ॉल्ट कोड जोड़ती है। शेडर में, हम पा सकते हैं ताकि GPU उनकी व्याख्या कर सके। संरचित कोड के ब्लॉक यदि हम अपना शेडर खोलते हैं, तो इसकी संरचना समान दिखती है: Shader "Unlit/OurSampleShaderUnlit" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags {"RenderType"="Opaque"} LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma multi_compile_fog #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; UNITY_FOG_COORDS(1) float4 vertex : SV_POSITION; }; sampler 2D _MainTex; float4 _MainTex; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); UNITY_TRANSFER_FOG(o, o.vertex); return o; } fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); UNITY_APPLY_FOG(i.fogCoord, col); return col; } ENDCG } } } वर्तमान उदाहरण और इसकी मूल संरचना से यह थोड़ा और स्पष्ट हो जाता है। एक शेडर यूनिटी एडिटर इंस्पेक्टर (इंस्पेक्टरपाथ) और एक नाम (शेडरनाम) में एक पथ से शुरू होता है, फिर गुण (उदाहरण के लिए, बनावट, वैक्टर, रंग, आदि), फिर सबशेडर। अंत में, एक वैकल्पिक फ़ॉलबैक पैरामीटर विभिन्न वेरिएंट का समर्थन करता है। शेडरलैब के साथ काम करना अधिकांश शेडर्स यूनिटी इंस्पेक्टर में शेडर और उसके पथ, साथ ही उसके नाम की घोषणा करके शुरुआत करते हैं। दोनों गुण, जैसे सबशेडर और फ़ॉलबैक, शेडरलैब घोषणात्मक भाषा में "शेडर" फ़ील्ड के अंदर लिखे गए हैं। Shader "OurPath/shaderName" { // The shader code will be here } प्रोजेक्ट के भीतर आवश्यकतानुसार पथ और शेडर नाम दोनों को बदला जा सकता है। शेडर गुण उन मापदंडों की एक सूची से मेल खाते हैं जिन्हें यूनिटी इंस्पेक्टर के भीतर से हेरफेर किया जा सकता है। मूल्य और उपयोगिता दोनों की दृष्टि से आठ अलग-अलग गुण हैं। हम इन गुणों का उपयोग उस शेडर के सापेक्ष करते हैं जिसे हम गतिशील रूप से या रनटाइम में बनाना या संशोधित करना चाहते हैं। किसी संपत्ति को घोषित करने का सिंटैक्स इस प्रकार है: PropertyName ("display name", type) = defaultValue "प्रॉपर्टीनाम" संपत्ति के नाम को दर्शाता है (उदाहरण के लिए, _मेनटेक्स), "डिस्प्ले नाम" यूनिटी इंस्पेक्टर में संपत्ति का नाम निर्दिष्ट करता है (उदाहरण के लिए, बनावट), "प्रकार" इसके प्रकार को इंगित करता है (उदाहरण के लिए, रंग, वेक्टर, 2डी, आदि)। अंत में, "डिफ़ॉल्ट वैल्यू" संपत्ति को निर्दिष्ट डिफ़ॉल्ट मान है (उदाहरण के लिए, यदि संपत्ति "रंग" है, तो हम इसे सफेद (1, 1, 1, 1, 1, 1) के रूप में सेट कर सकते हैं। शेडर का दूसरा घटक सबशेडर है। सही लोडिंग के लिए प्रत्येक शेडर में कम से कम एक सबशेडर होता है। जब एक से अधिक सबशेडर होते हैं, तो यूनिटी उनमें से प्रत्येक को संसाधित करेगी और हार्डवेयर विनिर्देशों के अनुसार सबसे उपयुक्त एक का चयन करेगी, जो पहले से शुरू होगी और सूची में अंतिम से समाप्त होगी (उदाहरण के लिए, आईओएस और एंड्रॉइड के लिए शेडर को अलग करने के लिए)। जब सबशेडर समर्थित नहीं है, तो यूनिटी मानक शेडर के अनुरूप फ़ॉलबैक घटक का उपयोग करने का प्रयास करेगी ताकि हार्डवेयर ग्राफिकल त्रुटियों के बिना अपना कार्य जारी रख सके। Shader "OurPack/OurShader" { Properties { ... } SubShader { // Here will be the shader configuration } } आप पैरामीटर और सब-शेडर के बारे में और अधिक पढ़ सकते हैं। यहां यहां सम्मिश्रण हमें दो पिक्सेल को एक में संयोजित करने की प्रक्रिया के लिए सम्मिश्रण की आवश्यकता है। ब्लेंडिंग बिल्ट-इन और एसआरपी दोनों में समर्थित है। सम्मिश्रण उस चरण में होता है जो पिक्सेल के अंतिम रंग को उसकी गहराई के साथ जोड़ता है। यह चरण स्टैंसिल बफर, जेड-बफर और रंग मिश्रण को निष्पादित करते समय फ्रैगमेंट शेडर चरण के बाद रेंडरिंग पाइपलाइन के अंत में होता है। डिफ़ॉल्ट रूप से, यह प्रॉपर्टी शेडर में नहीं लिखी जाती है, क्योंकि यह एक वैकल्पिक सुविधा है और मुख्य रूप से पारदर्शी वस्तुओं के साथ काम करते समय उपयोग की जाती है। उदाहरण के लिए, इसका उपयोग तब किया जाता है जब हमें कम-अपारदर्शिता वाले पिक्सेल को दूसरे के सामने खींचने की आवश्यकता होती है (यह अक्सर यूआई में उपयोग किया जाता है)। हम यहां सम्मिश्रण सक्षम कर सकते हैं: Blend [SourceFactor] [DestinationFactor] आप सम्मिश्रण के बारे में अधिक पढ़ सकते हैं। यहां जेड-बफर (गहराई-बफर) दोनों अवधारणाओं को समझने के लिए, हमें पहले सीखना होगा कि जेड-बफ़र (जिसे डेप्थ बफ़र के रूप में भी जाना जाता है) और गहराई परीक्षण कैसे काम करते हैं। शुरू करने से पहले, हमें यह विचार करना चाहिए कि पिक्सेल में गहराई मान होते हैं। ये मान डेप्थ-बफ़र में संग्रहीत होते हैं, जो यह निर्धारित करता है कि कोई वस्तु स्क्रीन पर किसी अन्य वस्तु के सामने जाती है या पीछे। दूसरी ओर, गहराई परीक्षण, एक ऐसी स्थिति है जो यह निर्धारित करती है कि डेप्थ-बफ़र में एक पिक्सेल अपडेट किया जाएगा या नहीं। जैसा कि हम पहले से ही जानते हैं, एक पिक्सेल का एक निर्दिष्ट मान होता है जिसे आरजीबी रंग में मापा जाता है और रंग बफर में संग्रहीत किया जाता है। ज़ेड-बफ़र एक अतिरिक्त मान जोड़ता है जो कैमरे से दूरी के संदर्भ में पिक्सेल की गहराई को मापता है, लेकिन केवल उन सतहों के लिए जो इसके सामने वाले क्षेत्र के भीतर हैं। यह 2 पिक्सेल को रंग में समान लेकिन गहराई में भिन्न होने की अनुमति देता है। ऑब्जेक्ट कैमरे के जितना करीब होगा, Z-बफर मान उतना ही छोटा होगा, और छोटे बफर मान वाले पिक्सेल बड़े मान वाले पिक्सेल को अधिलेखित कर देंगे। अवधारणा को समझने के लिए, मान लीजिए कि हमारे दृश्य में एक कैमरा और कुछ आदिम हैं, और वे सभी "Z" अंतरिक्ष अक्ष पर स्थित हैं। "बफ़र" शब्द "मेमोरी स्पेस" को संदर्भित करता है जहां डेटा अस्थायी रूप से संग्रहीत किया जाएगा, इसलिए ज़ेड-बफ़र हमारे दृश्य में ऑब्जेक्ट और कैमरे के बीच गहराई मान को संदर्भित करता है जो प्रत्येक पिक्सेल को सौंपा गया है। यूनिटी में ZTest मापदंडों की बदौलत हम गहराई परीक्षण को नियंत्रित कर सकते हैं। को मारने के बिल्ट-इन आरपी और यूआरपी/एचडीआरपी दोनों के साथ संगत यह संपत्ति नियंत्रित करती है कि पिक्सेल गहराई को संसाधित करते समय बहुभुज के कौन से चेहरे हटा दिए जाएंगे। इसका अर्थ क्या है? याद रखें कि बहुभुज वस्तु में आंतरिक किनारे और बाहरी किनारे होते हैं। डिफ़ॉल्ट रूप से, बाहरी किनारे दृश्यमान होते हैं (CullBack)। हालाँकि, हम आंतरिक किनारों को सक्रिय कर सकते हैं: वस्तु के दोनों किनारों का प्रतिपादन किया गया है ख़त्म करो. डिफ़ॉल्ट रूप से, ऑब्जेक्ट के पिछले किनारे प्रदर्शित होते हैं वापस खींचो. वस्तु के सामने के किनारों का प्रतिपादन किया गया है। सामने खींचो. इस कमांड के तीन मान हैं, बैक, फ्रंट और ऑफ। बैक कमांड डिफ़ॉल्ट रूप से सक्रिय है; हालाँकि, आमतौर पर, अनुकूलन उद्देश्यों के लिए कलिंग से जुड़ी कोड की लाइन शेडर में दिखाई नहीं देती है। यदि हम पैरामीटर बदलना चाहते हैं, तो हमें "Cull" शब्द जोड़ना होगा और उसके बाद वह मोड जोड़ना होगा जिसका हम उपयोग करना चाहते हैं। Shader "Culling/OurShader" { Properties { [Enum(UnityEngine.Rendering.CullMode)] _Cull ("Cull", Float) = 0 } SubShader { // Cull Front // Cull Off Cull [_Cull] } } हम "UnityEngine.Rendering.CullMode" निर्भरता के माध्यम से गतिशील रूप से कॉन्फ़िगर भी कर सकते हैं। यह Enum है और इसे किसी फ़ंक्शन के तर्क के रूप में पारित किया जाता है। यूनिटी इंस्पेक्टर में कलिंग पैरामीटर को सीजी/एचएलएसएल का उपयोग करना हमारे शेडर में, हम डिफ़ॉल्ट निर्देशों के कम से कम तीन प्रकार पा सकते हैं। ये सीजी या एचएलएसएल में शामिल प्रोसेसर निर्देश हैं। उनका कार्य हमारे शेडर को कुछ कार्यों को पहचानने और संकलित करने में मदद करना है जिन्हें अन्यथा इस तरह पहचाना नहीं जा सकता है: यह वर्टेक्स शेडर चरण को वर्टेक्स शेडर के रूप में GPU में संकलित करने की अनुमति देता है। #प्रैग्मा वर्टेक्स वर्ट। यह निर्देश प्राग्मा वर्टेक्स के समान कार्य करता है, इस अंतर के साथ कि यह "फ्रैग" नामक एक फ्रैगमेंट शेडर चरण को कोड में एक फ्रैगमेंट शेडर के रूप में संकलित करने की अनुमति देता है। #प्रैग्मा खंड खंड। पिछले निर्देशों के विपरीत, इसका दोहरा कार्य है। सबसे पहले, मल्टी_कंपाइल एक वेरिएंट शेडर को संदर्भित करता है जो हमें अपने शेडर में विभिन्न कार्यक्षमता वाले वेरिएंट उत्पन्न करने की अनुमति देता है। दूसरा, शब्द "_फॉग" में यूनिटी में लाइटिंग विंडो से फॉग कार्यक्षमता शामिल है। यदि हम पर्यावरण/अन्य सेटिंग में जाते हैं, तो हम अपने शेडर के फ़ॉग विकल्पों को सक्रिय या निष्क्रिय कर सकते हैं। #प्रैग्मा मल्टी_कंपाइल_फॉग। हम सीजी/एचएलएसएल फाइलों को अपने शेडर में भी प्लग कर सकते हैं। आमतौर पर हम ऐसा तब करते हैं जब हम UnityCG.cginc में प्लग इन करते हैं। इसमें कोहरे के निर्देशांक, क्लिपिंग के लिए वस्तु की स्थिति, बनावट परिवर्तन, कोहरे का वहन और UNITY_PI स्थिरांक सहित बहुत कुछ शामिल है। सीजी/एचएलएसएल के साथ हम जो सबसे महत्वपूर्ण काम कर सकते हैं वह है वर्टेक्स और फ्रैगमेंट शेडर्स के लिए प्रत्यक्ष प्रसंस्करण फ़ंक्शन लिखना, इन भाषाओं के चर और बनावट निर्देशांक (TEXCOORD0) जैसे विभिन्न निर्देशांक का उपयोग करना। #pragma vertex vert #pragma fragment frag v2f vert (appdata v) { // Ability to work with the vertex shader } fixed4 frag (v2f i) : SV_Target { // Ability to work with fragment shader } आप सीजी/एचएलएसएल के बारे में अधिक पढ़ सकते हैं। यहां शेडर ग्राफ शेडर ग्राफ़ यूनिटी के लिए एक नया समाधान है जो आपको शेडर भाषा के ज्ञान के बिना अपना समाधान बनाने की अनुमति देता है। इसके साथ काम करने के लिए विज़ुअल नोड्स का उपयोग किया जाता है (लेकिन कोई भी उन्हें शेडर भाषा के साथ संयोजित करने से मना नहीं करता है)। शेडर ग्राफ़ केवल एचडीआरपी और यूआरपी के साथ काम करता है। आपको याद रखना चाहिए कि शेडर ग्राफ़ के साथ काम करते समय, यूनिटी 2018 के लिए विकसित संस्करण बीटा संस्करण हैं और उन्हें समर्थन नहीं मिलता है। यूनिटी 2019.1+ के लिए विकसित संस्करण सक्रिय रूप से संगत हैं और उन्हें समर्थन मिलता है। एक और मुद्दा यह है कि यह बहुत संभावना है कि इस इंटरफ़ेस के साथ बनाए गए शेडर विभिन्न संस्करणों में सही ढंग से संकलित नहीं हो सकते हैं। ऐसा इसलिए क्योंकि हर अपडेट में नए फीचर्स जोड़े जाते हैं। तो, क्या शेडर ग्राफ़ शेडर विकास के लिए एक अच्छा उपकरण है? निश्चित रूप से यह है। और इसे न केवल एक ग्राफिक्स प्रोग्रामर बल्कि एक तकनीकी डिजाइनर या कलाकार भी संभाल सकता है। ग्राफ़ बनाने के लिए, हमें बस यूनिटी संपादक में इच्छित प्रकार का चयन करना होगा। शुरू करने से पहले, आइए शेडर ग्राफ़ स्तर पर वर्टेक्स/फ़्रैगमेंट शेडर का संक्षेप में परिचय दें। जैसा कि हम देख सकते हैं, वर्टेक्स शेडर चरण में तीन परिभाषित प्रवेश बिंदु हैं, जैसे: स्थिति (3), सामान्य (3), और स्पर्शरेखा (3), बिल्कुल सीजी या एचएलएसएल शेडर की तरह। जब एक नियमित शेडर से तुलना की जाती है, तो इसका मतलब है कि स्थिति (3) = स्थिति [एन], सामान्य (3) = सामान्य [एन] और स्पर्शरेखा (3) = स्पर्शरेखा [एन]। शेडर ग्राफ़ में तीन आयाम क्यों होते हैं, लेकिन Cg या HLSL में 4 होते हैं? याद रखें कि एक वेक्टर के चार आयाम उसके घटक W से मेल खाते हैं, जो ज्यादातर मामलों में "एक या शून्य" होता है। जब W = 1, वेक्टर किसी स्थान या बिंदु स्थिति से मेल खाता है। जबकि जब W = 0, वेक्टर अंतरिक्ष में एक दिशा से मेल खाता है। इसलिए, अपना शेडर सेट करने के लिए, हम पहले संपादक के पास जाते हैं और दो पैरामीटर बनाते हैं: रंग - _रंग और बनावट2डी - _मेनटेक्स। शेडरलैब गुणों और हमारे प्रोग्राम के बीच एक लिंक बनाने के लिए, हमें CGPROGRAM फ़ील्ड में वेरिएबल बनाना होगा। हालाँकि, शेडर ग्राफ़ में यह प्रक्रिया भिन्न है। हमें उन गुणों को खींचना और छोड़ना होगा जिन्हें हम नोड कार्यक्षेत्र में उपयोग करना चाहते हैं। Texture2D को सैंपल टेक्सचर 2D नोड के साथ मिलकर काम करने के लिए हमें बस इतना करना है कि _MainTex प्रॉपर्टी के आउटपुट को इनपुट टेक्सचर (T2) से कनेक्ट करें। दोनों नोड्स (रंग और बनावट) को गुणा करने के लिए, हमें बस मल्टीप्लाई नोड को कॉल करना होगा और दोनों मानों को इनपुट बिंदु के रूप में पास करना होगा। अंत में, हमें फ्रैगमेंट शेडर चरण में बेस कलर में कलर आउटपुट भेजने की आवश्यकता है। अब शेडर को सहेजें, और हमारा काम हो गया। हमारा पहला शेडर तैयार है. हम नोड और ग्राफ़ अनुभागों में विभाजित सामान्य ग्राफ़ सेटअप की ओर भी रुख कर सकते हैं। उनके पास अनुकूलन योग्य गुण हैं जो हमें रंग प्रजनन को बदलने की अनुमति देते हैं। हम सम्मिश्रण, अल्फा क्लिपिंग आदि के लिए विकल्प पा सकते हैं। इसके अलावा, हम अपने शेडर ग्राफ कॉन्फ़िगरेशन में नोड्स के गुणों को अनुकूलित कर सकते हैं। नोड्स स्वयं कुछ फ़ंक्शंस के एनालॉग प्रदान करते हैं जिन्हें हम शेडरलैब में लिखते हैं। उदाहरण के तौर पर, फ़ंक्शन क्लैंप का कोड: void Unity_Clamp_float4(float4 In, float4 Min, float4 Max, out float4 Out) { Out = clamp(In, Min, Max); } इस तरह, हम अपने जीवन को सरल बना सकते हैं और दृश्य ग्राफ़ की कीमत पर शेडर्स लिखने का समय कम कर सकते हैं। निष्कर्ष मैं शेडर्स के बारे में बहुत अधिक और लंबे समय तक बात कर सकता हूं, साथ ही रेंडरिंग प्रक्रिया पर भी बात कर सकता हूं। मैंने में सभी बुनियादी बातों पर चर्चा की है। यहां मैंने रेट्रेसिंग शेडर्स और कंप्यूट-शेडिंग पर चर्चा नहीं की है। मैंने शेडर भाषाओं को सतही तौर पर कवर किया है और केवल हिमशैल की नोक से प्रक्रियाओं का वर्णन किया है। यूनिटी में रेंडरिंग पर इस गाइड