Graphics Rendering Pipeline Michał Drobot Technical Art Director Reality Pump
Plan wykładu Architektura potoku Etap aplikacji Etap przekształceń geometrii Etap rasteryzacji
Architektura Potoku Architektura potokowa Wykonywanie kolejno określonych etapów Całkowity czas wykonania >= najwolniejszemu etapowi „bottleneck” Możliwość równoległego przetwarzania danych wewnątrz potoku Podział etapu na n potoków (etapowych) może dać przyrost wydajności rzędu n Wyciąg narciarski
Architektura Potoku Architektura potokowa Application Stage Geometry Stage Rasterizer Stage
Architektura Potoku Architektura potokowa Każdy etap może być wykonywany równolegle w wielu potokach Architektura skalarna Wielordzeniowość Każdy etap może wykorzystywać specjalizowane zasoby Przydzielony procesor Specjalistyczny hardware Osobna kolejka SPU Etc…
Architektura Potoku Przepustowość potoku Potok ma przepustowość swojego najwolniejszego etapu (który również może być potokiem) Prędkość renderowania zależy od przepustowości potoku jak i możliwości odbironika Wyrażamy w FPS – klatki na sekundę ms - czas jaki zajmuje wykonanie potoku w ms Hz - 1/sekundę – czas odświeżenia
Architektura Potoku Przepustowość potoku Jeśli najwolniejszy etap potoku potrzebuje 20ms, prędkość renderowania wyniesie 1/0.02 = 50Hz Odbiorniki (CRT, LCD, PLASMA etc…) mają zwykle stałe tempo pracy Wpływa to na realną (percepcyjną) prędkość renderowania
Architektura Potoku Przepustowość potoku LCD ma odświeżanie 60Hz Czas potrzebny na wyrenderowanie klatki wynosi 51ms 1/0.051 = 19.6 fps Możliwości naszego LCD : 60Hz/2 = 30Hz, 60Hz/3 = 20Hz, 60Hz/4 = 15Hz W efekcie obraz będzie wyświetlany z częstotliwością 15Hz 15Hz = max(możliwe tempo odświeżania) < fps
Application Stage Obsługiwana przez aplikację wykonywaną w trybie software’owym na CPU ogólnego zastosowania Programowalna Często wykorzystuje możliwości wielordzeniowe Typowe zastosowania Detekcja kolizji Fizyka Animacja Algorytmy przyśpieszające Ostatnim etapem Application Stage jest przesłanie geometrii obiektów, które mają zostać wyrenderowane, do Geometry Stage Najważniejszy etap Application Stage
Application Stage Obiekty wysyłane do geometry stage – Rendering Primitives Points Lines Triangles Quads
Geometry Stage Etap odpowiedzialny za większość operacji na polygonach i vertexach Podzielony na Transformacje modelu i widoku WorldView transform Cieniowanie vertexów Vertex shading Projekcje Projection transform Clipping Mapowanie ekranowe Screen mapping
Geometry Stage Pojedyncze etapy w zależności od implementacji oraz sprzętu mogą działać równolegle oraz mogą być nowymi potokami Tryb software’owy (mobile devices) Tryb mieszany (np. PS3 – SPU + GPU) Tryb specjalizowany (GPU)
Model View Transform Każdy obiekt rezyduje we własnej przestrzeni obiektu (Model Space) Każdy model podlega transformacji rotacji, translacji, bądź skalowania Umożliwia użycie różnych przekształceń tej samej geometrii w celu odmiennej reprezentacji w nowej unikatowej przestrzeni Instancing Vertexy oraz normalne obiektu ulegają transformacji Obiekty po przekształceniu znajdują się w nowej unikatowej przestrzeni świata – World Space
Model View Transform Jedynie obiekty widziane przez widza / kamerę są renderowane Kamera istnieje w przestrzeni świata Pozycja oraz kierunek patrzenia Dla poprawnej projekcji oraz clippowania obiekty z World Space są transformwoane do View (Camera) Space Kamera w nowej przestrzeni jest ustawiona w centrum w kierunku patrzenia –Z z osia oY skierowaną w dół a osią oX skierowaną w prawo
Model View Transform Układ współrzędnych jest zależny od API oraz przyjętych konwencji Transformacje wykonuje się przez przekształcenia macierzy 4x4
Vertex Shading Prawidłowa reprezentacja obiektów wymaga obliczeń oświetlenia oraz reprezentacji materiałów Per-Vertex Per-Pixel Vertexy posiadają możliwość przypisania atrybutów Parametry materiału Dodatkowe dane do innych obliczeń
Vertex Shading Wyniki obliczeń Reprezentowane przez formę numeryczną Interpolowane Przekazywane dalej Reprezentowane przez formę numeryczną Kolor Wektor Skalar Etc..
Projection Transformacja przestrzeni widoku do homogenicznej przestrzeni sześcianu jednostkowego Możliwość użycia różnych kostek Typowo cube o najdalszych punktach (-1,-1,-1) (1,1,1) Projekcja Perspektywiczna Uwzględnia perpsektywę Ortograficzna Linei równoległe pozostają równoległe
Projection Po projekcji wartość Z jest przechowywana w Z – buforze Przekształceń dokonuje się poprzez macierze 4x4 Po projekcji obiekty znajdują się w znormalizowanych koordynatach urządzenia Normalized device coordinates
Clipping Jedynie primitywy znajdujące się całkowicie bądź częściowo w przestrzeni przycięcia powinny być przesłane do rasteryzacji Primitywy poza przestrzenią przycięcia są odrzucane Prymitywy leżące na granicy muszą zostać przycięte (clipped) Płaszczyzna przycięcia jest określona przez ściany kostki jednostkowej Użytkownik może dodać dodatkowe płaszczyzny przycięcia
Clipping Przycięcie jest realizowane poprzez dodanie nowych vertexów tworzących nową krawędź w miejscu cięcia Clipping jest realizowany zwykle sprzętowo bez udziału programisty
Screen mapping Screen Mapping Przycięte prymitywy trafiają do Screen Mappingu Posiadają 3D koordynaty Koordynaty X,Y są transformowane do przestrzeni okna X Y : [-1;1] w Projection Space X Y : [0 ;1] w Screen Space Z : [-1;1] bez zmian (zakres zależy od API) Screen Mapping Translacja + skalowanie +=(0.5,0.5) * (0.5,-0.5) // przykladowo
Screen mapping Problem relacji wartości float do int a pixeli i ich koordynatów W zależności od API różne układy współrzędnych i traktowania pojęcia „środek pixela” OGL (0,0) – dolny lewy róg Środek pixela w (0.5,0.5) pixela DX (0,0) – górny lewy róg Środek pixela w (0,0) pixela
Rasterizer stage Rasteryzacja ma za zadanie wyliczyć kolor pixeli pokrywających przekazane obiekty (transformowane i sprojektowane vertexy oraz inne dane) Konwersja dwuwymiarowych vertexów w screen space (wraz z ich wartościami Z) do przestrzeni pixeli na ekranie
Rasterizer stage Triangle Setup Triangle traversal Pixel shading Merging
Triangle Setup Na tym etapie obliczane są pochodne oraz inne dane dotyczące powierzchni trójkąta Używane do interplowania danych vertexowych Wykonywane przez hardware Fixed-operation
Triangle Traversal Każdy pixel bądź próbka (sample) którego środek znajduje się w trójkącie jest sprawdzany i generowany jest dla niego fragment (blok pixeli) Generowane parametry fragmentu z danych interpolowanych między 3 vertexami tworzącymi trójkąt Wykonywane sprzętowo
Pixel shading Wszystkie obliczenia per-pixel są tu wykonywane dla każdego pixela W pełni programowalny etap przy użyciu GPU Duża ilość technik umożliwiająca rendering oraz obliczenia ogólnego zastosowania
Merging Etap odpowiada za Informacje dla każdego pixela są przechowywane w buforze koloru (Color Buffer) Odpowiada za łączenie wygenerowanego fragmentu z wartościami koloru przechowywanymi aktualnie w buforze koloru Nie jest programowalne W pełni parametryzowalne Etap odpowiada za Widocznośc (Z-buffer) Alpha Blending Stencil Buffer Double Buffering
Merging Z-buffer wielkości Color buffera Przechowuje wartość Z każdego pixela Z-test / Depth-test Sprawdza czy wygenerowany fragment jest bliżej ekranu poprzez porównanie jego wartości Z, z aktualnie istniejącą w Z-buforze Jeśli jest bliżej to nadpisuje istniejące wartości Jeśli nie, pozostawia bufory bez zmian Umożliwia prawidłowe renderowanie bez sortowania Renderowanie przeźroczystych obiektów wymaga sortowania back-to-front
Merging Alpha blending C = (1-alpha)*OLD_C + alpha*C Umożliwia renderowanie przeźroczystych obiektów Wartość alpha dla każdego pixela, decyduje o stopniu jego transparencji Wartość alpha przechowywana w Alpha Channelu
Merging Alpha Test Wykonywany przed depth testem Porównuje wartość alpha z predefiniowaną wartością Może odrzucić cały fragment z potoku Optymalizacja Niezapisywanie przeźroczystych pixeli do Z-bufora
Merging Stencil buffer Dodatkowy bufor, do którego możemy pisać i czytać Zwykle 8-bitowy Przy użyciu odpowiednich operatorów umożliwia odrzucanie fragmentów obrazu z potoku renderowania Stencil Test
Merging Double buffering Obraz po wygenerowaniu jest przechowywany w back bufferze W momencie vertical retrace – odrysowawnia zawartości fizycznego wyświetlacza, back buffer jest zamieniany zawartością z front bufferem i przesyłany do wyświetlacza
Podsumowanie For more information contact me hello@drobot.org Slides will be available at Drobot.org
Questions ?