Rasterizarea — este procesul de transformare a descrierii vectoriale a primitivelor tridimensionale (triunghiuri, linii, puncte) într-un set de pixeli (fragmente) pentru afișarea pe ecran. Conform Khronos Group, 2025, rasterizarea este o etapă automată (neprogramabilă) a conductei grafice, situată între Vertex Shader și Fragment Shader. Rasterizarea determină care pixeli ai ecranului aparțin cărui triunghi și calculează atributele interpolate pentru fiecare fragment.
Principalele
Rasterizarea — este etapa conductei grafice care transformă primitivele geometrice (triunghiuri, linii) într-un set de fragmente pentru procesarea ulterioară de către Fragment Shader. Datele de intrare — vârfurile triunghiului în coordonate ecran și atributele lor (culoare, normale, UV). Ieșire — set de fragmente cu atribute interpolate.
Spre deosebire de shader-ele programabile (Vertex și Fragment Shader), rasterizarea este o etapă fixă (neprogramabilă). Dezvoltatorul nu poate modifica algoritmul de rasterizare, dar poate gestiona parametrii acestuia: modul de tăiere (culling), lățimea liniei, deplasarea adâncimii (polygon offset) și multisampling-ul.
Practic întreaga grafică modernă real-time — jocuri, UI, AR/VR — utilizează rasterizarea. Este cea mai performantă metodă de randare, capabilă să proceseze milioane de triunghiuri per cadru la 60 FPS. Rasterizatoarele GPU sunt optimizate pentru procesarea paralelă a mii de triunghiuri simultan prin blocuri specializate ROP (Render Output Units).
Rasterizarea triunghiului începe după ce Vertex Shader a transformat vârfurile în coordonate ecran. GPU ia cele trei vârfuri ale triunghiului și determină care pixeli ai ecranului se află în interiorul acestui triunghi.
Procesul include trei pași consecutivi: determinarea bounding box a triunghiului în pixeli — verificarea fiecărui pixel din interiorul bounding box pentru apartenența la triunghi (edge function) — calculul atributelor interpolate (coordonate baricentrice) pentru fiecare pixel acoperit. Edge function — este o ecuație liniară care determină de ce parte a muchiei triunghiului se află punctul.
| Etapa | Descriere | Rezultat |
|---|---|---|
| Clipping | Decuparea triunghiurilor în afara limitelor viewport | Primitive vizibile |
| Viewport transform | Transformarea în coordonate ecran | Coordonate pixel |
| Triangle setup | Calculul edge-funcțiilor și bounding box | Parametri de rasterizare |
| Fragment generation | Verificarea acoperirii și interpolarea | Fragmente + atribute |
Rasterizarea poate fi implementată prin diverși algoritmi, fiecare având propriile compromisuri între performanță și calitate. GPU-urile moderne utilizează o combinație de mai multe abordări.
Algoritmul clasic de rasterizare, dezvoltat pentru primele GPU-uri. Triunghiul este procesat linie cu linie (scanline): pentru fiecare linie a ecranului se determină punctele de intrare și ieșire ale triunghiului, iar toți pixelii dintre ele sunt umpluți. Scanline conversion este eficient pentru triunghiuri mari, dar necesită logică complexă pentru triunghiuri de formă arbitrară.
GPU-urile moderne utilizează metoda de rasterizare half-space: pentru fiecare latură a triunghiului se calculează edge function — o ecuație liniară, pozitivă de o parte și negativă de cealaltă. Pixelul aparține triunghiului dacă toate cele trei edge functions sunt pozitive. Rasterizarea half-space se paralelizează ușor și se potrivește bine cu arhitecturile SIMD ale GPU-urilor.
GPU-urile mobile (Qualcomm Adreno, ARM Mali) utilizează Tile-Based Rendering (TBR). Ecranul este împărțit în tile-uri mici (16×16 sau 32×32 pixeli), iar rasterizarea se execută pentru fiecare tile separat. Aceasta minimizează numărul de accesări la memoria video prin stocarea bufferului de cadre în memoria locală rapidă (tile memory). TBR reduce consumul de energie, ceea ce este critic pentru dispozitivele mobile.
Rasterizarea și ray tracing — două abordări fundamental diferite pentru randarea graficii 3D. Rasterizarea domină în aplicațiile real-time, ray tracing — în randarea offline și pătrunde treptat în real-time (pe GPU-uri compatibile cu RTX).
| Parametru | Rasterizare | Ray Tracing |
|---|---|---|
| Principiu | Triunghi → fragmente | Rază → intersectare cu scena |
| Viteză | Foarte rapid (milioane de triunghiuri/cadru) | Lent (mii de raze/cadru) |
| Calitate | Necesită tehnici suplimentare (umbre, reflexii) | Umbre și reflexii fizic corecte |
| GPU-uri mobile | Metodă standard | Suport limitat (A17 Pro, Snapdragon Gen 3) |
| Consum energetic | Scăzut | Ridicat |
La rasterizare apare problema aliasing-ului — margini în trepte (jaggies) la granițele triunghiurilor. Aceasta se întâmplă deoarece pixelul este discret și nu poate fi parțial acoperit de triunghi. Pentru combaterea aliasing-ului se utilizează multisampling-ul (MSAA).
MSAA (Multisample Anti-Aliasing) execută rasterizarea cu frecvență de eșantionare mărită (2x, 4x, 8x). În loc de un eșantion pe pixel, se utilizează mai multe sub-eșantioane, fiecare fiind verificat pentru acoperirea de către triunghi. MSAA 4x procesează 4 sub-eșantioane pe pixel, oferind o netezire vizibilă a marginilor fără a crește complet rezoluția de randare.
Spre deosebire de MSAA, metodele de netezire post-proces (FXAA, SMAA, TAA) funcționează după rasterizare, analizând imaginea finală. FXAA (Fast Approximate Anti-Aliasing) identifică marginile imaginii și aplică estompare pentru netezire, funcționând semnificativ mai rapid decât MSAA, dar cu un rezultat de calitate inferioară.
Rasterizarea pe GPU-urile moderne este executată de blocuri hardware specializate — ROP (Render Output Units). Numărul de ROP influențează direct viteza de umplere (fill rate) — numărul de pixeli pe care GPU-ul îi poate procesa pe secundă.
Pentru GPU-urile mobile (Tile-Based Rendering) sunt critic importante: minimizarea overdraw prin respingerea timpurie (early-Z), utilizarea back-face culling pentru eliminarea triunghiurilor invizibile și eliminarea suprafețelor ascunse (occlusion culling) pentru respingerea triunghiurilor complet acoperite de alte obiecte.
Întrebări frecvente
Rasterizarea este procesul de transformare a triunghiurilor în pixeli pe ecran. GPU ia un triunghi tridimensional, determină ce pixeli ai ecranului acoperă și îi transmite Fragment Shader pentru colorare.
Rasterizarea proiectează triunghiurile pe ecran și determină acoperirea pixelilor (foarte rapid). Ray tracing trimite raze de la cameră și verifică intersectarea cu geometria (fizic mai precis, dar semnificativ mai lent).
La rasterizare, pixelul fie aparține complet triunghiului, fie nu — de aici marginile în trepte (aliasing). MSAA netezește marginile prin multiple sub-eșantioane pe pixel, iar FXAA aplică un filtru imaginii finite.
Nu, rasterizarea este o etapă fixă a conductei grafice. Dezvoltatorul nu poate modifica algoritmul, dar poate gestiona setările: culling, polygon offset, modul de rasterizare (puncte, linii, triunghiuri) și parametrii MSAA.
Tile-Based Rendering (TBR) împarte ecranul în tile-uri și le procesează în memoria locală rapidă, nu în VRAM globală. Aceasta reduce radical consumul de energie și lățimea de bandă, ceea ce este critic pentru dispozitivele mobile cu alimentare pe baterie.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și