Rasteryzacja, potok graficzny – podstawy grafiki 3D, część 5

Mając zbudowany trójwymiarowy świat, trzeba go jeszcze przekształcić na dwuwymiarowy obraz złożony z pikseli, do wyświetlania których przystosowane są dzisiejsze monitory. Proces ten nazywa się rasteryzacją – grafika rastrowa to właśnie taka, która przedstawiona jest za pomocą regularnej siatki punktów (pikseli), z których każdy ma przyporządkowany kolor. Istnieją rożne techniki pozwalające na optymalizacje tej operacji, jednak podstawowa idea jest podobna dla wszystkich. W przestrzeni ustawiana jest wirtualną kamerę – zdefiniowany zostaje punkt widoku (ang. view point) oraz kierunek patrzenia. Przed nimi, w prostej linii, umieszczona zostaje płaszczyzna, na której „rejestrowany” będzie obraz – macierz projekcji będąca siatka pikseli. Rzutowanie następuje wzdłuż prostej, wspólnej dla punktu widoku, renderowanej bryły oraz jednego piksela macierzy projekcji.

Istnieje wiele zaawansowanych algorytmów pozwalających na otrzymywanie coraz bardziej realistycznych lub bardziej efektownych obrazów. Każdy z nich można zaimplementować pisząc odpowiedni skrypt lub program, jednak ich czas wykonywania może być dosyć długi. Wygenerowanie przez procesor jednego statycznego ujęcia w wysokiej rozdzielczości, do stworzenia którego użyto globalnego oświetlenia z dużą ilością źródeł światła, skomplikowanych materiałów i innych efektów, może trwać zdecydowanie zbyt długo, aby zachować płynność animacji, czyli parędziesiąt klatek na sekundę. Dlatego, znaczna część dzisiejszych komputerów osobistych, jest wyposażona w układy wyspecjalizowane do przetwarzania grafiki (GPU – ang. graphics processor unit) (link).

Jednostki takie odciążają główny procesor komputera, a zarazem znacznie przyspieszają niektóre operacje związane z generowaniem grafiki trójwymiarowej, poprzez wykorzystanie sprzętu dedykowanego specjalnie do wykonywania takich działań. Szczegóły sprzętu oraz zastosowane rozwiązania są tajemnicą każdej z firm produkujących karty graficzne, takich jak Intel, nVidia lub AMD/ATI, jednak znany jest ogólny abstrakcyjny model potoku graficznego (ang. graphics pipeline). Potokiem graficznym nazywany jest cały proces generowania grafiki, w trakcie którego z wejściowych danych numerycznych (pozycje wierzchołków, tekstury, źródła światła, materiały) powstaje obraz na ekranie monitora.

Cechą charakterystyczną potoku, jest jego kaskadowość – wyniki pracy jednego poziomu, staja się danymi wejściowymi kolejnego etapu. Na początku przetwarzane są wierzchołki. Dla każdego wierzchołka ustalane jest miejsce w odniesieniu do wirtualnego punktu widoku, obliczane jest oświetlenie oraz dane niezbędne do korzystania ze współrzędnych UV dla tekstur. Elementy są szeregowane, tak aby można było wyeliminować poligony których użytkownik nie może zobaczyć, ze względu na to, że znajdują się poza polem widzenia, są za daleko lub za blisko. W kolejnych krokach następuje rasteryzacja, czyli zamiana trójwymiarowych obiektów na piksele. Dalsza obróbka pikseli może polegać na nadaniu im odpowiedniego koloru wynikającego z oświetlenia, przezroczystości lub dodatkowych efektów, a w końcu barwy wynikającej z tekstury. Ostatnim krokiem przed wyświetleniem, może być nałożenie filtrów i inna obróbka dwuwymiarowego już obrazu.

Pierwsza generacja akceleratorów graficznych była zaprogramowana na stale, na przykład podczas przetwarzania wierzchołków obliczano tylko oświetlenie jedną metodą (link). W nowoczesnych kartach graficznych, poszczególne etapy przetwarzania są dodatkowo modyfikowalne (link). Dostępne są tzw. programy cieniujące (ang. shader programs), które pozwalają na modyfikacje parametrów wierzchołków (odpowiedzialny jest za to tzw. vertex shader), a także tworzenie nowych struktur geometrycznych (geometry shader). Za przetwarzanie pikseli odpowiada pixel shader lub fragment shader – to dzięki niemu możliwy jest na przykład bump mapping.

Komentowanie nieaktywne.