Проста відповідь полягає в тому, що ви змінюєте їх між кожним розіграшем. Встановіть шейдер, намалюйте чайник, встановіть інший шейдер, намалюйте ще один чайник.
Для більш складних матеріалів, де потрібно застосувати кілька шейдерів до одного об'єкта, наприклад, розмиття, світіння тощо. В основному у вас все відтворене текстурою. Потім ви візуалізуєте чотирьохконтролер на весь ваш екран із застосованою текстурою, використовуючи інший шейдер.
Наприклад, якщо ви хочете надати ефект світіння, спочатку потрібно нанести звичайну не світиться сцену, а потім надати лише кольоровий силует речей, які ви хочете світитися на текстурі, після чого переключитесь на шейдер розмиття та відтворите свій квадратик з цією текстурою, прикріпленою до твого неблискучого сцени.
Існує ще одна методика під назвою " Відкладене затінення", де ви створюєте сцену без освітлення та застосовуєте її пізніше в екрані. Основна мета - зменшити витрати на освітлення на один піксель.
Зазвичай ви надаєте кольоровий буфер, який розміщується на екрані. Завдяки відкладеному затіненню ви натомість надаєте кольоровий буфер, а також буфер звичайного та глибинного покроку в одному проході шейдера (ви можете зберігати нормальні вектори та глибину в текстурі, як при звичайному відображенні та висоті).
Це означає, що для кожного пікселя ви знаєте положення найближчого фрагмента непрозорої геометрії (глибина або відстань від очей) колір і нормаль. Через це ви можете застосовувати освітлення до кожного пікселя на екрані, а не до кожного видимого пікселя кожного об'єкта, який ви надаєте. Пам’ятайте, що якийсь об’єкт буде намальований поверх інших об’єктів, якщо сцена не буде ідеально відтворена перед тим, як зробити зворотній порядок.
Для тіней ви насправді представляєте лише буфер глибини з точки зору свого світла, а потім використовуєте інформацію про глибину, щоб визначити, куди потрапляє світло. Це називається тіньовим картографуванням (існує також інший підхід, який називається тіньовими обсягами, який розробляє силует геометрії та видавлює його, але ви все ще будете використовувати шейдери.).
З більш сучасним OpenGL (3.0+) ви використовуєте об'єкт Framebuffer із доданими об'єктами Renderbuffers. Оскільки до рендербуферів можна ставитися як до текстури. Ви можете зробити такі речі, як мати 1 шейдер на декількох різних рендербуферах (так що вам не доведеться надавати текстуру, то ваші нормалі, а потім компоненти світіння), але основна практика все одно така.
Також бажано максимально зменшити кількість вимикачів шейдерів, щоб економити накладні витрати. Таким чином, деякі двигуни згрупують все з одним і тим же матеріалом разом, щоб все можна було оформити відразу.