Ile shaderów jest zwykle aktywnych, jednocześnie w jednej scenie, we współczesnych grach? Wiem, że używanych jest wiele shaderów, a gry przełączają się między nimi w każdej klatce, i często rysuje się obiekty za pomocą shadera:
- Narysuj wszystkie obiekty za pomocą modułu cieniującego jeden
- Zmień z modułu cieniującego jeden na drugi
- Narysuj wszystkie obiekty za pomocą modułu cieniującego dwa
Wiem jednak, że nie jest to takie proste, zwłaszcza z efektami takimi jak efekt blasku dla całej sceny, renderowanie do tekstury itp., Ale myślę, że możemy założyć, że tak działa przez większość czasu, prawda? Podejście „grupuj według modułu cieniującego” jest dobre, ponieważ zmiana cieniowania jest kosztowną operacją.
Z jednej strony nie możesz mieć zbyt wielu shaderów, ponieważ chcesz szybko renderować scenę. Z drugiej strony potrzebujesz wielu różnych shaderów (lub Uber-Shaderów z gałęziami - całkiem podobnych) do skóry, metalu, wody itp.
Ilu (i jakich) różnych shaderów użyłaby teoretyczna, nowoczesna gra detektywistyczna 3D na PC (DirectX 11, jeśli ma to znaczenie)? Byłoby to 5, 20 lub więcej, jak 100 aktywnych shaderów, licząc tylko aktywne, w jakiejś „ramce X”? Wiem, że to nie jest jedna liczba, ale zastanawiam się, jaka skala i czynniki są ważne, biorąc pod uwagę grę na PC.
W mojej przykładowej grze używałbym około 9-11 na klatkę (licz to inaczej, małe shadery lub jeden uber-shader - nie ma teraz znaczenia):
- Moduł cieniujący
- Cieniowanie oczu (nie za dużo? Ale różnią się)
- Metalowy shader
- Ground shader
- Moduł cieniujący do śniegu / deszczu (jeśli wymagany)
- Moduł cieniujący wodę (jeśli woda istnieje w scenie)
- Shader Glow (tylko przy włączonych efektach specjalnych)
- Moduł cieniujący (lampy uliczne itp.)
- Standardowy moduł cieniujący (dla wszystkich innych, tylko standardowe cieniowanie)
- Standardowy moduł cieniujący z normalnymi mapami
- Moduł cieniujący 2D (do GUI itp.)
Czy to „dużo” czy „mało”? Czy zapomniałem o ważnych shaderach, których potrzebowałbym?