सरल उत्तर यह है कि आप प्रत्येक ड्रॉ कॉल के बीच उन्हें बदल सकते हैं। एक shader सेट करें, एक चायदानी खींचें, दूसरा shader सेट करें, दूसरा चायदानी ड्रा करें।
अधिक जटिल सामान के लिए जहां आपको एक ही वस्तु जैसे कि कलंक, चमक और इतने पर कई शेड्स लगाने की आवश्यकता होती है। आपके पास मूल रूप से बनावट (नों) के लिए सब कुछ है। फिर आप अपनी पूरी स्क्रीन पर एक क्वाड रेंडर करते हैं, जो एक अन्य शेडर का उपयोग करते हुए उस बनावट के साथ लागू होता है।
उदाहरण के लिए यदि आप एक चमक प्रभाव प्रदान करना चाहते हैं, तो आपको सबसे पहले अपने नियमित रूप से चमकने वाले दृश्य को प्रस्तुत करना होगा, फिर सामान के रंगीन सिल्हूट को प्रस्तुत करना होगा जिसे आप एक बनावट पर चमकना चाहते हैं, फिर आप एक ब्लर शेडर पर स्विच करते हैं और अपना रेंडर करते हैं उस बनावट के साथ क्वाड आपके गैर-चमक वाले दृश्य पर संलग्न है।
एक और तकनीक है जिसे डिफर्ड शेडिंग कहा जाता है जहां आप बिना रोशनी के दृश्य प्रस्तुत करते हैं और बाद में इसे स्क्रीन स्पेस में लागू करते हैं। मुख्य लक्ष्य प्रति पिक्सेल प्रकाश व्यवस्था के खर्च को कम करना है।
आम तौर पर आप एक रंगीन बफर प्रस्तुत करते हैं जो स्क्रीन पर डाला जाता है। आस्थगित छायांकन के साथ आप इसके बजाय एक रंग बफर के साथ-साथ एक शैडर पास में एक सामान्य और गहराई बफर प्रस्तुत करते हैं (आप सामान्य वैक्टर और गहराई को सामान्य और ऊंचाई मानचित्रण की तरह बनावट में संग्रहीत कर सकते हैं)।
इसका मतलब है कि, प्रत्येक पिक्सेल के लिए, आप रंग और सामान्य गैर-पारदर्शी ज्यामिति (गहराई या आंख से दूरी) के निकटतम टुकड़े की स्थिति जानते हैं। इसके कारण आप स्क्रीन पर प्रत्येक पिक्सेल के लिए प्रकाश व्यवस्था को लागू कर सकते हैं जो आपके द्वारा प्रस्तुत प्रत्येक वस्तु के प्रत्येक दृश्यमान पिक्सेल के बजाय। याद रखें कि यदि दृश्य पूरी तरह से बैक ऑर्डर के सामने प्रस्तुत नहीं किया गया है, तो कुछ ऑब्जेक्ट को अन्य ऑब्जेक्ट्स के ऊपर खींचा जाएगा।
छाया के लिए आप वास्तव में अपने प्रकाश के दृष्टिकोण से सिर्फ गहराई बफर प्रस्तुत करते हैं, फिर उस गहन जानकारी का उपयोग करके काम करते हैं जहां प्रकाश हमला करता है। इसे शैडो मैपिंग कहा जाता है (एक अन्य दृष्टिकोण भी है जिसे शैडो वॉल्यूम कहा जाता है जो ज्यामिति के एक सिल्हूट को काम करता है और इसे बाहर निकालता है, लेकिन आपका अभी भी शेड का उपयोग करने वाला है।)
और अधिक आधुनिक ओपन (3.0+) के साथ आप एक का उपयोग फ्रेमबफर वस्तु Renderbuffers के साथ संलग्न ऑब्जेक्ट है। चूंकि रेंडरबफर्स को एक बनावट की तरह माना जा सकता है। आप जैसी चीजों 1 शेडर सी अलग-अलग renderbuffers को प्रस्तुत करना है हो सकता है (ताकि आप फिर अपने normals अपने बनावट प्रस्तुत करना की जरूरत नहीं है तो चमक घटक) लेकिन अंतर्निहित अभ्यास अब भी वही है।
ओवरहेड पर सहेजने के लिए जितना संभव हो सके, कम से कम shader स्विच की संख्या को कम करना वांछनीय है। तो कुछ इंजन एक साथ एक ही सामग्री के साथ सब कुछ समूहित करेंगे ताकि यह सब एक साथ खींचा जा सके।