Câu trả lời đơn giản là bạn thay đổi chúng giữa mỗi lần gọi rút thăm. Đặt một shader, vẽ một ấm trà, đặt một shader khác, vẽ một ấm trà khác.
Đối với những thứ phức tạp hơn, nơi bạn cần áp dụng nhiều shader cho chỉ một đối tượng như mờ, phát sáng và vân vân. Về cơ bản, bạn có mọi thứ được kết xuất thành kết cấu. Sau đó, bạn kết xuất một hình tứ giác trên toàn bộ màn hình của bạn với kết cấu đó được áp dụng trong khi sử dụng một shader khác.
Ví dụ: nếu bạn muốn tạo hiệu ứng phát sáng, trước tiên bạn cần kết xuất cảnh không phát sáng thông thường của mình, sau đó chỉ hiển thị hình bóng màu của thứ bạn muốn phát sáng trên họa tiết sau đó bạn chuyển sang trình tạo bóng mờ và kết xuất quad với kết cấu đó gắn liền với cảnh không phát sáng của bạn.
Có một kỹ thuật khác gọi là Trì hoãn bóng trong đó bạn kết xuất cảnh mà không cần chiếu sáng và áp dụng nó sau trong không gian màn hình. Mục tiêu cốt lõi là giảm chi phí cho mỗi pixel chiếu sáng.
Thông thường bạn kết xuất bộ đệm màu được đặt trên màn hình. Thay vào đó, bạn sẽ hiển thị bộ đệm màu cũng như bộ đệm bình thường và độ sâu trong một lần đổ bóng (bạn có thể lưu trữ các vectơ bình thường và độ sâu trong kết cấu như với ánh xạ bình thường và chiều cao).
Điều này có nghĩa là, đối với mỗi pixel, bạn biết vị trí của mảnh hình học không trong suốt gần nhất (độ sâu hoặc khoảng cách từ mắt) màu sắc và bình thường. Do đó, bạn có thể áp dụng ánh sáng cho từng pixel trên màn hình thay vì cho từng pixel hiển thị của mọi đối tượng bạn hiển thị. Hãy nhớ rằng một số đối tượng sẽ được vẽ trên đầu của các đối tượng khác nếu cảnh không được hiển thị hoàn hảo ở phía trước để quay lại.
Đối với bóng bạn thực sự chỉ hiển thị bộ đệm độ sâu theo quan điểm của ánh sáng, sau đó sử dụng thông tin độ sâu đó để tìm ra nơi ánh sáng chiếu vào. Đó gọi là ánh xạ bóng (cũng có một cách tiếp cận khác gọi là thể tích bóng tạo ra hình bóng của hình học và đùn nó, nhưng bạn vẫn sẽ sử dụng các shader.).
Với OpenGL hiện đại hơn (3.0+), bạn sử dụng Đối tượng Framebuffer với các Đối tượng Renderbuffers được đính kèm. Vì renderbuffers có thể được coi như một kết cấu. Bạn có thể làm những việc như có 1 shader kết xuất với nhiều trình kết xuất khác nhau (vì vậy bạn không phải kết xuất kết cấu của mình sau đó các quy tắc sau đó là các thành phần phát sáng) nhưng thực tế cơ bản vẫn giống nhau.
Ngoài ra, mong muốn giảm thiểu số lượng công tắc đổ bóng càng nhiều càng tốt để tiết kiệm chi phí. Vì vậy, một số động cơ sẽ nhóm mọi thứ với cùng một vật liệu lại với nhau để tất cả có thể được rút ra cùng một lúc.