Rasterizace — je proces převodu vektorového popisu trojrozměrných primitiv (trojúhelníků, čar, bodů) na sadu pixelů (fragmentů) pro zobrazení na obrazovce. Podle Khronos Group, 2025 je rasterizace automatickou (neprogramovatelnou) fází grafické pipeline, umístěnou mezi Vertex Shader a Fragment Shader. Rasterizace určuje, které pixely obrazovky patří ke kterému trojúhelníku, a vypočítává interpolované atributy pro každý fragment.
Hlavní body
Rasterizace — je fáze grafické pipeline, která převádí geometrická primitiva (trojúhelníky, čáry) na sadu fragmentů pro další zpracování Fragment Shaderem. Vstupní data — vrcholy trojúhelníku v obrazovkových souřadnicích a jejich atributy (barva, normály, UV). Výstup — sada fragmentů s interpolovanými atributy.
Na rozdíl od programovatelných shaderů (Vertex a Fragment Shader) je rasterizace fixní (neprogramovatelná) fází. Vývojář nemůže změnit algoritmus rasterizace, ale může spravovat její parametry: režim ořezávání (culling), šířku čáry, posun hloubky (polygon offset) a multisampling.
Prakticky veškerá moderní real-time grafika — hry, UI, AR/VR — používá rasterizaci. Je to nejvýkonnější metoda renderování, schopná zpracovat miliony trojúhelníků za snímek při 60 FPS. GPU rasterizátory jsou optimalizovány pro paralelní zpracování tisíců trojúhelníků současně prostřednictvím specializovaných bloků ROP (Render Output Units).
Rasterizace trojúhelníku začíná poté, co Vertex Shader převedl vrcholy na obrazovkové souřadnice. GPU vezme tři vrcholy trojúhelníku a určí, které pixely obrazovky se nacházejí uvnitř tohoto trojúhelníku.
Proces zahrnuje tři po sobě jdoucí kroky: určení bounding boxu trojúhelníku v pixelech — kontrola každého pixelu uvnitř bounding boxu na příslušnost k trojúhelníku (edge function) — výpočet interpolovaných atributů (barycentrické souřadnice) pro každý pokrytý pixel. Edge function — lineární rovnice určující, na které straně hrany trojúhelníku se bod nachází.
| Fáze | Popis | Výsledek |
|---|---|---|
| Clipping | Ořezávání trojúhelníků mimo hranice viewportu | Viditelná primitiva |
| Viewport transform | Transformace do obrazovkových souřadnic | Pixelové souřadnice |
| Triangle setup | Výpočet edge-funkcí a bounding boxu | Parametry rasterizace |
| Fragment generation | Kontrola pokrytí a interpolace | Fragmenty + atributy |
Rasterizace může být implementována různými algoritmy, z nichž každý má své kompromisy mezi výkonem a kvalitou. Moderní GPU používají kombinaci několika přístupů.
Klasický algoritmus rasterizace vyvinutý pro raná GPU. Trojúhelník je zpracováván řádek po řádku (scanline): pro každý řádek obrazovky jsou určeny body vstupu a výstupu trojúhelníku a všechny pixely mezi nimi jsou vyplněny. Scanline conversion je efektivní pro velké trojúhelníky, ale vyžaduje složitou logiku pro trojúhelníky libovolného tvaru.
Moderní GPU používají metodu half-space rasterizace: pro každou stranu trojúhelníku se vypočítá edge function — lineární rovnice, kladná na jedné straně a záporná na druhé. Pixel patří k trojúhelníku, pokud jsou všechny tři edge functions kladné. Half-space rasterizace se snadno paralelizuje a dobře se hodí pro SIMD architektury GPU.
Mobilní GPU (Qualcomm Adreno, ARM Mali) používají Tile-Based Rendering (TBR). Obrazovka je rozdělena na malé dlaždice (16×16 nebo 32×32 pixelů) a rasterizace se provádí pro každou dlaždici zvlášť. To minimalizuje počet přístupů do video paměti díky ukládání framebufferu v rychlé lokální paměti (tile memory). TBR snižuje spotřebu energie, což je kritické pro mobilní zařízení.
Rasterizace a ray tracing — dva zásadně odlišné přístupy k renderování 3D grafiky. Rasterizace dominuje v real-time aplikacích, ray tracing — v offline renderování a postupně proniká do real-time (na GPU kompatibilních s RTX).
| Parametr | Rasterizace | Ray Tracing |
|---|---|---|
| Princip | Trojúhelník → fragmenty | Paprsek → průnik se scénou |
| Rychlost | Velmi rychlý (miliony trojúhelníků/snímek) | Pomalý (tisíce paprsků/snímek) |
| Kvalita | Vyžaduje další techniky (stíny, odrazy) | Fyzikálně správné stíny a odrazy |
| Mobilní GPU | Standardní metoda | Omezená podpora (A17 Pro, Snapdragon Gen 3) |
| Spotřeba energie | Nízká | Vysoká |
Při rasterizaci vzniká problém aliasingu — stupňovité okraje (jaggies) na hranicích trojúhelníků. K tomu dochází, protože pixel je diskrétní a nemůže být částečně pokryt trojúhelníkem. Pro boj s aliasingem se používá multisampling (MSAA).
MSAA (Multisample Anti-Aliasing) provádí rasterizaci se zvýšenou frekvencí vzorkování (2x, 4x, 8x). Místo jednoho vzorku na pixel se používá několik podvzorků, z nichž každý je kontrolován na pokrytí trojúhelníkem. MSAA 4x zpracovává 4 podvzorky na pixel, což poskytuje znatelné vyhlazení okrajů bez úplného zvýšení rozlišení renderování.
Na rozdíl od MSAA pracují post-process metody vyhlazování (FXAA, SMAA, TAA) až po rasterizaci, analyzují konečný obrázek. FXAA (Fast Approximate Anti-Aliasing) detekuje okraje obrázku a aplikuje rozostření pro vyhlazení, pracuje výrazně rychleji než MSAA, ale s méně kvalitním výsledkem.
Rasterizace na moderních GPU je prováděna specializovanými hardwarovými bloky — ROP (Render Output Units). Počet ROP přímo ovlivňuje rychlost plnění (fill rate) — počet pixelů, které GPU může zpracovat za sekundu.
Pro mobilní GPU (Tile-Based Rendering) jsou kriticky důležité: minimalizace overdraw pomocí časného odmítání (early-Z), použití back-face culling pro odstranění neviditelných trojúhelníků a skryté odstraňování povrchů (occlusion culling) pro odmítání trojúhelníků zcela zakrytých jinými objekty.
Často kladené otázky
Rasterizace je proces přeměny trojúhelníků na pixely na obrazovce. GPU vezme trojrozměrný trojúhelník, určí, které pixely obrazovky pokrývá, a předá je Fragment Shaderu k obarvení.
Rasterizace promítá trojúhelníky na obrazovku a určuje pokrytí pixelů (velmi rychle). Ray tracing vysílá paprsky z kamery a kontroluje průnik s geometrií (fyzikálně přesnější, ale výrazně pomalejší).
Při rasterizaci pixel buď zcela patří trojúhelníku, nebo ne — odtud stupňovité okraje (aliasing). MSAA vyhlazuje okraje pomocí několika podvzorků na pixel a FXAA aplikuje filtr na hotový obrázek.
Ne, rasterizace je fixní fáze grafické pipeline. Vývojář nemůže změnit algoritmus, ale může spravovat nastavení: culling, polygon offset, režim rasterizace (body, čáry, trojúhelníky) a parametry MSAA.
Tile-Based Rendering (TBR) rozděluje obrazovku na dlaždice a zpracovává je v rychlé lokální paměti, nikoli v globální VRAM. To radikálně snižuje spotřebu energie a šířku pásma, což je kritické pro mobilní zařízení napájená baterií.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také