Co w shaderze piszczy?

Hej!

Przeglądając forum Warsztatu, oraz siedząc non-stop na kanale #warsztat słyszę, iż początkujący w dziedzinie grafiki 3D mają bardzo dużo wątpliwości co to są shadery, jak działają oraz jak ich używać. W wielu wypowiedziach można dostrzec tendencję, do wyolbrzymiania problemów związanych z tym zagadnieniem, oraz nieznajomość tego, niezbędnego dzisiaj, narzędzia objawiającą się irracjonalnym, panicznym wręcz strachem sięgnięcia po te cudowne mechanizmy. Powodowane jest to między innymi (moim zdaniem przynajmniej) ogromem możliwości, który przerasta adeptów tej dziedziny, oraz – a może przede wszystkim – brak przystępnych „tutoriali” omawiających tę dziedzinę; jedynym, w polskiej sieci, omawiającym shadery w ogóle jest (notabene bardzo dobry) tutorial Robala. Mówi on jednak jedynie o shaderach SM1, assemblerowych.

Motywowany tym, postanowiłem napisać tę notkę (jako, że lepszego tematu i tak nie miałem, a a nuż komuś się przyda ;) ). Mam zamiar wyjaśnić tutaj chociaż część tych wątpliwości. Zacznijmy:

  • Shadery są szybsze czy wolniejsze od Fixed Pipelnine?

Shadery są zamiennikiem Fixed Pipeline. Nie są ani szybsze, ani wolniejsze – są inne, a przede wszystkim ich prędkość zależy od tego co tam sobie napiszemy! Mechanizmy te dają nam pełną kontrolę (no, prawie…) nad obliczeniami prowadzonymi przez kartę grafiki dla każdego wierzchołka i piksela. Innymi słowy, możemy zrobić z naszymi vertexami i fragmentami to samo co „robi” Fixed Pipeline szybciej lub wolniej – zależnie od chęci i umiejętności.

  • Shadery to takie brzydkie, assemblerowe programiki w których nie wiadomo o co chodzi!

Nieprawda. Mamy dzisiaj dostępne co najmniej 3 języki wysokiego poziomu pozwalające na wygodne pisanie shaderów w profilach od SM1 do SM4.1. Assembler GPU teraz przydaje się właściwie jedynie przy hardcore`owych optymalizacjach.

  • Co to jest ten cały Shader Model? Który powinienem wybrać?

Jakkolwiek niefortunnie to brzmi, Shader Model jest ogólną nazwą na zbiór wszelkich ograniczeń i możliwości danej karty. Chodzi o to, iż dany SM „mówi” nam, co karta jest w stanie obsłużyć/policzyć. Dzisiaj wyróżniamy cztery Shader Modele (nie licząc podtypów), z których każdy jest milowym krokiem w stosunku do poprzedniego.

  1. SM1 – najstarszy; jest właściwie krokiem przejściowym między fixed a programmable pipeline. Nie jest dzisiaj szeroko używany.
  2. SM2 – pierwsze shadery „z rękoma i nogami”. W podstawowej karty go wspierające będą umożliwiały wywołanie 256 instrukcji arytmetycznych Vertex i 64 instrukcji arytmetycznych Pixel Shader. PS-y wspierają również instrukcje teksturujące – najwyżej 32 odczyty bezpośrednie. Wspierany od serii GeForce FX 5×00.
  3. SM3 – bodaj najszerzej dziś używany SM. Wspierają go karty serii GeForce 6×00. Wprowadził wiele udogodnień oraz znacznie zwiększył limit instruncji.
  4. SM4 – najnowszy ze standardów. Używany w znacznej większości nowych gier, wprowadza zupełnie nową jednostkę shader – Geometry Shader. Wymaga Direct3D 10.

Wybór docelowego SM zależy od tego, co chcemy sobie liczyć w naszym shaderze. Ogólnie powinniśmy starać się kompilować nasze shadery na jak najniższym profilu, gdyż nie wszystkie karty obsługują te nowsze – oczywiście jednak karty są kompatybilne w tył – czyli nawet GeForce GTX 280 obsłuży nam shader skompilowany pod SM1.

  • Moja karta ma aż xxx jednostek shader, a ja wykorzystuję tylko jeden.

Jednostki shader to coś innego niż sam program. Po pierwsze, karta graficzna działa potokowo – przetwarza duże ilości danych na raz, niekoniecznie bardzo, bardzo szybko. Jednym z elementów potoku renderującego (rendering pipeline) jest właśnie Vertex/Pixel Shader, przetwarzający wierzchołki/piksele. Ilość jednostek shader nie oznacza ile możemy „naraz” używać shaderów, bo możemy tylko jeden danego typu, a raczej ile naraz wierzchołków/pikseli jest przetwarzanych.

  • Co to są te całe pliki .fx?

Pliki FX są plikami skryptowymi pozwalającymi na wygodne zarządzanie shaderami, ich parametrami oraz stanami urządzenia czy samplera. Dużo na ten temat znajdziemy w dokumentacji Microsoftu, oraz w kursie Robala, podlinkowanym wyżej.

Uff – dzisiejsza notka dosyć niewąska. ;] Oto pytania, które są bodaj najczęściej zadawane na kanale #warsztat i forum (brane mniej-więcej z pamięci) na temat shaderów, a które mogą przysporzyć sporo problemów początkującym w tej dziedzinie. Mam nadzieję, że nie pozostawiłem czegoś niewyjaśnionego.

Dodatkowo, informuję wszem i wobec iż po udanych egzaminach gimnazjalnych, dzięki dobremu świadectwu z (biało)czerwonym paskiem oraz po tygodniu czekania na wyniki, dostałem się do VIII Liceum w Poznaniu. :)

Pozdrawiam!

Reklamy

~ - autor: charibo w dniu Czerwiec 26, 2008.

Komentarze 2 to “Co w shaderze piszczy?”

  1. Byłem twoi9m natchnieniem… dzieki

  2. Fakt, ty swoimi pytaniami przebrałeś miarkę. :]

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s

 
%d blogerów lubi to: