Rasteryzacja — to proces przekształcania wektorowego opisu trójwymiarowych prymitywów (trójkątów, linii, punktów) w zestaw pikseli (fragmentów) do wyświetlenia na ekranie. Według Khronos Group, 2025, rasteryzacja jest automatycznym (nieprogramowalnym) etapem potoku graficznego, znajdującym się między Vertex Shader a Fragment Shader. Rasteryzacja określa, które piksele ekranu należą do którego trójkąta i oblicza interpolowane atrybuty dla każdego fragmentu.
Najważniejsze
Rasteryzacja — to etap potoku graficznego, który przekształca prymitywy geometryczne (trójkąty, linie) w zestaw fragmentów do dalszego przetwarzania przez Fragment Shader. Dane wejściowe — wierzchołki trójkąta w współrzędnych ekranowych i ich atrybuty (kolor, normalne, UV). Wyjście — zestaw fragmentów z interpolowanymi atrybutami.
W przeciwieństwie do programowalnych shaderów (Vertex i Fragment Shader), rasteryzacja jest stałym (nieprogramowalnym) etapem. Deweloper nie może zmienić algorytmu rasteryzacji, ale może zarządzać jej parametrami: trybem odcinania (culling), szerokością linii, przesunięciem głębi (polygon offset) i multisamplingiem.
Praktycznie cała współczesna grafika czasu rzeczywistego — gry, UI, AR/VR — używa rasteryzacji. To najbardziej wydajna metoda renderowania, zdolna do przetwarzania milionów trójkątów na klatkę przy 60 FPS. Rasteryzatory GPU są zoptymalizowane do równoległego przetwarzania tysięcy trójkątów jednocześnie przez wyspecjalizowane bloki ROP (Render Output Units).
Rasteryzacja trójkąta rozpoczyna się po tym, jak Vertex Shader przekształcił wierzchołki w współrzędne ekranowe. GPU bierze trzy wierzchołki trójkąta i określa, które piksele ekranu znajdują się wewnątrz tego trójkąta.
Proces obejmuje trzy kolejne kroki: określenie bounding box trójkąta w pikselach — sprawdzenie każdego piksela wewnątrz bounding box pod kątem przynależności do trójkąta (edge function) — obliczenie interpolowanych atrybutów (współrzędne barycentryczne) dla każdego pokrytego piksela. Edge function — to równanie liniowe określające, po której stronie krawędzi trójkąta znajduje się punkt.
| Etap | Opis | Wynik |
|---|---|---|
| Clipping | Przycinanie trójkątów poza granicami viewport | Widoczne prymitywy |
| Viewport transform | Przekształcenie do współrzędnych ekranowych | Współrzędne pikselowe |
| Triangle setup | Obliczenie edge-funkcji i bounding box | Parametry rasteryzacji |
| Fragment generation | Sprawdzenie pokrycia i interpolacja | Fragmenty + atrybuty |
Rasteryzacja może być realizowana różnymi algorytmami, z których każdy ma swoje kompromisy między wydajnością a jakością. Nowoczesne GPU używają kombinacji kilku podejść.
Klasyczny algorytm rasteryzacji, opracowany dla wczesnych GPU. Trójkąt jest przetwarzany wiersz po wierszu (scanline): dla każdego wiersza ekranu określane są punkty wejścia i wyjścia trójkąta, a wszystkie piksele między nimi są wypełniane. Scanline conversion jest wydajny dla dużych trójkątów, ale wymaga złożonej logiki dla trójkątów o dowolnym kształcie.
Nowoczesne GPU używają metody rasteryzacji half-space: dla każdej strony trójkąta obliczana jest edge function — równanie liniowe, dodatnie z jednej strony i ujemne z drugiej. Piksel należy do trójkąta, jeśli wszystkie trzy edge functions są dodatnie. Rasteryzacja half-space łatwo się parallelizuje i dobrze pasuje do architektur SIMD GPU.
Mobilne GPU (Qualcomm Adreno, ARM Mali) używają Tile-Based Rendering (TBR). Ekran jest dzielony na małe tile (16x16 lub 32x32 piksele), a rasteryzacja jest wykonywana dla każdego tila osobno. Minimalizuje to liczbę odwołań do pamięci wideo dzięki przechowywaniu bufora klatek w szybkiej pamięci lokalnej (tile memory). TBR zmniejsza zużycie energii, co jest krytyczne dla urządzeń mobilnych.
Rasteryzacja i ray tracing — dwa zasadniczo różne podejścia do renderowania grafiki 3D. Rasteryzacja dominuje w aplikacjach czasu rzeczywistego, ray tracing — w renderowaniu offline i stopniowo przenika do czasu rzeczywistego (na GPU kompatybilnych z RTX).
| Parametr | Rasteryzacja | Ray Tracing |
|---|---|---|
| Zasada | Trójkąt → fragmenty | Promień → przecięcie ze sceną |
| Szybkość | Bardzo szybki (miliony trójkątów/klatka) | Wolny (tysiące promieni/klatka) |
| Jakość | Wymaga dodatkowych technik (cienie, odbicia) | Fizycznie poprawne cienie i odbicia |
| Mobilne GPU | Standardowa metoda | Ograniczone wsparcie (A17 Pro, Snapdragon Gen 3) |
| Zużycie energii | Niskie | Wysokie |
Przy rasteryzacji występuje problem aliasingu — postrzępione krawędzie (jaggies) na granicach trójkątów. Dzieje się tak, ponieważ piksel jest dyskretny i nie może być częściowo pokryty przez trójkąt. Do walki z aliasingiem stosuje się multisampling (MSAA).
MSAA (Multisample Anti-Aliasing) wykonuje rasteryzację ze zwiększoną częstotliwością próbkowania (2x, 4x, 8x). Zamiast jednej próbki na piksel używanych jest wiele sub-próbek, z których każda jest sprawdzana pod kątem pokrycia przez trójkąt. MSAA 4x przetwarza 4 sub-próbki na piksel, co daje zauważalne wygładzenie krawędzi bez pełnego zwiększania rozdzielczości renderowania.
W przeciwieństwie do MSAA, metody wygładzania post-process (FXAA, SMAA, TAA) działają już po rasteryzacji, analizując końcowy obraz. FXAA (Fast Approximate Anti-Aliasing) określa krawędzie obrazu i stosuje rozmycie w celu wygładzenia, działając znacznie szybciej niż MSAA, ale z mniej jakościowym wynikiem.
Rasteryzacja na nowoczesnych GPU jest wykonywana przez wyspecjalizowane bloki sprzętowe — ROP (Render Output Units). Liczba ROP bezpośrednio wpływa na szybkość wypełniania (fill rate) — liczbę pikseli, którą GPU może przetworzyć na sekundę.
Dla mobilnych GPU (Tile-Based Rendering) krytycznie ważne są: minimalizacja overdraw przez wczesne odrzucanie (early-Z), używanie back-face culling do usuwania niewidocznych trójkątów oraz ukryte usuwanie powierzchni (occlusion culling) do odrzucania trójkątów całkowicie zasłoniętych przez inne obiekty.
Często zadawane pytania
Rasteryzacja to proces zamiany trójkątów na piksele na ekranie. GPU bierze trójwymiarowy trójkąt, określa, które piksele ekranu on zakrywa i przekazuje je do Fragment Shader w celu pokolorowania.
Rasteryzacja rzutuje trójkąty na ekran i określa pokrycie pikseli (bardzo szybko). Ray tracing wysyła promienie z kamery i sprawdza przecięcie z geometrią (fizycznie dokładniej, ale znacznie wolniej).
Przy rasteryzacji piksel albo całkowicie należy do trójkąta, albo nie — stąd postrzępione krawędzie (aliasing). MSAA wygładza krawędzie dzięki wielokrotnym sub-próbkom na piksel, a FXAA stosuje filtr do gotowego obrazu.
Nie, rasteryzacja to stały etap potoku graficznego. Deweloper nie może zmienić algorytmu, ale może zarządzać ustawieniami: culling, polygon offset, tryb rasteryzacji (punkty, linie, trójkąty) i parametry MSAA.
Tile-Based Rendering (TBR) dzieli ekran na tile i przetwarza je w szybkiej pamięci lokalnej, a nie w globalnej VRAM. To radykalnie zmniejsza zużycie energii i przepustowość, co jest krytyczne dla urządzeń mobilnych zasilanych bateryjnie.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również