Modul 7 — PERFORMANȚĂ ȘI GRAFICĂ

Lecția 7.1 — Pipeline grafic

etapele pipeline-ului grafic, procesarea geometriei, rasterizare, shading

Începe Lecția

Introducere

Fiecare cadru afișat pe ecranul consolei tale parcurge un traseu precis prin GPU: mai întâi scena 3D este definită prin vertecși și triunghiuri, apoi geometria este transformată și proiectată pe ecranul 2D, triunghiurile sunt convertite în fragmente, fiecare fragment primește o culoare calculată prin shadere, și în final imaginea completă este scrisă în framebuffer. Acest proces — pipeline-ul grafic — se repetă de 30, 60 sau 120 de ori pe secundă.

Această lecție acoperă etapele pipeline-ului grafic de la scenă la pixel: procesarea geometriei (vertex shading, transformări, clipping), rasterizarea (conversia primitivelor în fragmente) și shading-ul (calculul culorii finale, iluminare, texturare).

Scopul nu este memorarea numelor etapelor, ci înțelegerea ce se întâmplă fizic în GPU-ul RDNA 2 din PS5 în cele sub-16ms disponibile pentru 60 FPS, cum ray tracing-ul hardware adaugă trasarea fizic corectă a luminii și de ce anumite scene sunt mai grele decât altele.

Teorie Structurată

7.1.1 — Definiție pipeline grafic

  • Pipeline-ul grafic (graphics pipeline / rendering pipeline) este un cadru în grafica computerizată care definește procedurile necesare pentru transformarea unei scene 3D într-o reprezentare 2D pe ecran
  • Odată generat un model 3D, pipeline-ul convertește modelul într-un format vizual perceptibil pe display
  • Nu există un pipeline grafic universal aplicabil – depinde de software, configurația hardware și atributele dorite de afișare
  • API-uri grafice (Direct3D, OpenGL, Vulkan) au fost dezvoltate pentru a standardiza procedurile comune și a supraveghea pipeline-ul grafic
  • Aceste API-uri oferă un strat de abstractizare peste hardware-ul subiacent (AMD, Intel, Nvidia)
  • Pipeline-ul grafic este folosit de obicei în randarea în timp real (real-time rendering)
  • Majoritatea pașilor sunt implementați în hardware pentru optimizare specială
  • Pașii individuali rulează în paralel (similar cu pipeline-ul procesoarelor)

7.1.2 — Cele 3 etape principale

  • Pipeline-ul grafic se împarte în 3 părți principale: Aplicație (Application), Geometrie (Geometry), Rasterizare (Rasterization)

7.1.3 — Etapa Aplicație

  • Executată de software pe procesorul principal (CPU)
  • Se fac modificări ale scenei (interacțiune utilizator, animație)
  • Scena cu toate primitivele (triunghiuri, linii, puncte) este transmisă etapei următoare
  • Sarcini tipice: detecția coliziunilor, animație, morphing, tehnici de accelerare (Quadtrees, Octrees)
  • Lumea unui joc modern este mult prea mare pentru a încăpea în memorie simultan

7.1.4 — Etapa Geometrie – Definiții

  • Un vertex (plural: vertices) este un punct în lume. Mai multe puncte sunt unite pentru a forma suprafețe
  • Triunghiul este cea mai comună primitivă geometrică în grafica computerizată
  • Definit de 3 vertecși și un vector normal (perpendicular pe suprafață, indică fața frontală)
  • Triunghiul poate avea culoare sau textură (imagine „lipită" pe suprafață)
  • Triunghiurile sunt preferate față de dreptunghiuri deoarece orice 3 puncte în spațiu 3D formează întotdeauna un triunghi plat

7.1.5 — Geometrie – Sistemul de coordonate și transformări

  • Sistemul de coordonate mondial (world coordinate system) – coordonate rectangulare carteziene cu axe la scară egală
  • Obiectele sunt modelate în sisteme de coordonate proprii (object/model/local coordinate system)
  • Coordonatele obiectelor sunt transformate prin translație, rotație sau scalare (multiplicarea cu matrice de transformare)
  • Instancing: mai multe copii transformate diferit dintr-un singur obiect (ex: o pădure din copaci)
  • Se folosesc matrice 4×4 (matrice omogene) pentru lucrul în spațiu 3D
  • 3 matrice de rotație (una pentru fiecare axă: X, Y, Z) + 1 matrice de translație
  • Matricele se multiplică între ele înainte de aplicarea pe vertecși (eficiență)
  • Ordinea multiplicării matricelor contează – multiplicarea matricială nu este comutativă
  • Matricea rezultantă se numește „world matrix" – se determină pentru fiecare obiect

7.1.6 — Geometrie – Transformarea camerei

  • Scena definește o cameră virtuală (poziție + direcție de vizualizare)
  • Scena este transformată astfel încât camera să fie la origine, privind de-a lungul axei Z
  • Sistemul rezultat = sistema de coordonate a camerei
  • Transformarea = Camera Transformation / View Transformation
  • View matrix se determină din: poziția camerei, punctul țintă, vectorul „sus"

7.1.7 — Geometrie – Proiecție

  • Proiecția 3D transformă volumul de vizualizare într-un cub cu coordonate (-1,-1,0) la (1,1,1)
  • Proiecție perspectivă: folosește proiecție centrală, volumul vizual = piramidă trunchiată (frustum)
  • Proiecție paralelă/ortogonală: folosită în reprezentări tehnice, păstrează paralelismul
  • Parametri: câmp vizual (field of view), raport de aspect, distanța near și far
  • Z-buffer are rezoluție limitată (adesea 16 biți) → diferența prea mare near/far cauzează Z-fighting
  • Valoarea near nu poate fi 0 (punct focal al proiecției)
  • Camera și proiecția se combină de obicei într-o singură matrice de transformare

7.1.8 — Geometrie – Iluminare

  • Surse de lumină plasate la diferite poziții pentru iluminare realistă
  • Factor de câștig calculat pentru fiecare vertex pe baza surselor de lumină și proprietăților materialelor
  • Lumină ambientală (ambient light) – aplicată tuturor suprafețelor, luminozitate difuză, independentă de direcție
  • Soarele = sursă de lumină direcțională (asumată la infinit)
  • Iluminarea suprafeței = produsul scalar între vectorul direcției soarelui și normalul suprafeței

7.1.9 — Geometrie – Clipping

  • Doar primitivele din volumul vizual trebuie rasterizate
  • Frustum culling: eliminarea completă a primitivelor complet în afara volumului vizual
  • Back-face culling: reducerea numărului de primitive considerate
  • Primitivele parțial în volum sunt decupate (clipped) contra cubului normalizat

7.1.10 — Geometrie – Transformarea Window-Viewport

  • Transformare pentru afișarea imaginii în zona țintă (viewport) a ecranului
  • Deplasare + scalare
  • Coordonatele rezultante = coordonate dispozitiv (device coordinates)
  • Viewport-ul conține 6 valori: înălțime, lățime (pixeli), colțul stânga-sus, Z min/max
  • Pe hardware modern, majoritatea calculelor geometrice se execută în vertex shader

7.1.11 — Geometrie – Rezumat sub-pași

  • Etapa Geometrie (responsabilă de operațiile cu poligoane și vertecși) se împarte în 5 sub-sarcini:

1. Definirea vertecșilor și primitivelor

2. Transformarea în coordonate mondiale (World Coordinate System)

3. Transformarea camerei (Camera/View Transformation)

4. Proiecția (Projection)

5. Iluminarea (Lighting)

Plus: Clipping și Window-Viewport Transformation

7.1.12 — Shadere

  • Plăcile grafice clasice erau aproape de pipeline-ul grafic rigid
  • Cu cerințe crescânde → restricțiile au fost eliminate gradual pentru mai multă flexibilitate
  • GPU-urile moderne folosesc un pipeline controlat de shadere, programabil liber
  • Unitățile shader cele mai importante: vertex shaders, geometry shaders, pixel shaders
  • Unified Shader: un singur pool mare de unități shader, divizat dinamic după necesități
  • Separarea strictă între tipurile de shader nu mai este utilă
  • Compute shader: calcule arbitrare pe GPU (GPGPU – General-Purpose Computing on GPU)
  • Mesh shaders: adăugare recentă pentru depășirea bottleneck-urilor pipeline-ului geometric

7.1.13 — Definiție rasterizare

  • Rasterizarea (rasterisation/rasterization) = conversia unei imagini descrise în format vectorial (forme) într-o imagine raster (pixeli, puncte, linii)
  • Etimologie: din germanul „Raster" (grilă, model) și latinescul „rāstrum" (greblă)
  • Poate fi 2D (linii, cercuri) sau 3D (poligoane → pixeli)

7.1.14 — Rasterizarea 3D

  • Rasterizarea este una dintre tehnicile tipice de randare a modelelor 3D
  • Este extrem de rapidă comparativ cu ray tracing → folosită în majoritatea motoarelor 3D în timp real
  • Rasterizarea calculează maparea din geometria scenei la pixeli, dar nu prescrie cum se calculează culoarea
  • Culoarea fiecărui pixel este atribuită de un pixel shader (complet programabil pe GPU-uri moderne)
  • Shading-ul poate lua în considerare efecte fizice (poziția luminii) sau intenție artistică
  • Procesul este efectuat de obicei de hardware funcțional fix (non-programabil) în pipeline-ul grafic
  • Hardware specializat permite eficiență ridicată

7.1.15 — Rasterizarea triunghiurilor

  • Poligoanele sunt de obicei descompuse în triunghiuri
  • Cerințe: fără goluri între triunghiuri adiacente, fără rasterizare multiplă a aceluiași pixel
  • Regulă top-left: un pixel este rasterizat dacă centrul este complet în interiorul triunghiului sau pe muchia superioară/stângă
  • Implementată de Direct3D și multe implementări OpenGL

7.1.16 — Calitate

  • Calitatea rasterizării poate fi îmbunătățită prin antialiasing (margini „netede")
  • Sub-pixel precision: metodă care ia în considerare poziții pe o scară mai fină decât grila de pixeli
  • Exemplu: PlayStation 1 nu avea precizie sub-pixel → animații mai puțin fluide
  • Dublu buffering: rasterizarea se face într-o zonă specială de memorie, apoi se copiază în zona vizibilă

7.1.17 — Definiție shader

  • Un shader este o operație programabilă aplicată datelor în timp ce parcurg pipeline-ul de randare
  • Shaderele pot acționa asupra vertecșilor și primitivelor (pentru a genera/modifica geometria) și asupra fragmentelor (pentru a calcula valorile într-o imagine randată)
  • În grafica computerizată modernă în timp real, shaderele rulează pe GPU-uri – hardware dedicat cu execuție înalt paralelă
  • Randarea unei imagini este „embarrassingly parallel" → fragment/pixel shaders se scalează bine pe hardware SIMD
  • Primul termen „shader" introdus de Pixar în 1988 (RenderMan Interface Specification v3.0)

7.1.18 — Tipuri de shadere grafice

  • Vertex shaders: rulează o dată pentru fiecare vertex 3D; transformă poziția 3D în coordonata 2D de ecran + valoare de adâncime (Z-buffer); pot manipula poziție, culoare, coordonate textură, dar NU pot crea vertecși noi
  • Fragment/Pixel shaders: calculează culoarea și atributele fiecărui fragment (unitate de randare afectând maxim un pixel); pot face bump mapping, umbre, reflexii speculare, transluciditate; operează pe un singur fragment fără cunoașterea geometriei scenei
  • Geometry shaders: introduse cu Direct3D 10 și OpenGL 3.2; pot genera NOI primitive (puncte, linii, triunghiuri); executate după vertex shaders; primesc ca input o primitivă completă
  • Tessellation shaders: OpenGL 4.0 / Direct3D 11; subdivid meshuri simple în meshuri mai fine la runtime; permit LOD (level-of-detail) activ bazat pe distanța camerei
  • Mesh shaders: AMD Vega (2017) - primitive shaders; Nvidia Turing (2018) - mesh + task shaders; AMD RDNA 2 și Nvidia Ampere (2020) - mesh shading prin DirectX 12 Ultimate
  • Ray-tracing shaders: suportate prin DirectX Raytracing, Vulkan, Metal
  • Compute shaders: nu sunt limitați la aplicații grafice, folosesc aceleași resurse de execuție pentru GPGPU

7.1.19 — Unified shader model și evoluție hardware

  • Primele GPU-uri cu shadere suportau doar pixel shading → apoi vertex shaders rapid adăugate
  • Prima placă video cu pixel shader programabil: Nvidia GeForce 3 (NV20), 2001
  • Geometry shaders: Direct3D 10 / OpenGL 3.2
  • Unified Shader Model: un singur pool de unități shader împărțit dinamic pe tipuri
  • Limbaje de programare shadere: GLSL (OpenGL), HLSL (Direct3D), Metal Shading Language (Apple)
  • SPIR-V: limbaj intermediar, compilația shaderelor înainte de distribuție
  • Mesh shaders pot crește framerate-ul sau numărul de triunghiuri cu un ordin de mărime

Legătura Fizică — Informatică

Definiție pipeline grafic

  • Pipeline-ul grafic (graphics pipeline / rendering pipeline) este un cadru în grafica computerizată care definește procedurile necesare pentru transformarea unei scene 3D într-o reprezentare 2D pe ecran

Etapa Aplicație

  • Executată de software pe procesorul principal (CPU)

Etapa Geometrie – Definiții

  • Triunghiul este cea mai comună primitivă geometrică în grafica computerizată

Shadere

  • GPU-urile moderne folosesc un pipeline controlat de shadere, programabil liber
  • Compute shader: calcule arbitrare pe GPU (GPGPU – General-Purpose Computing on GPU)

Rasterizarea 3D

  • Culoarea fiecărui pixel este atribuită de un pixel shader (complet programabil pe GPU-uri moderne)

Definiție shader

  • În grafica computerizată modernă în timp real, shaderele rulează pe GPU-uri – hardware dedicat cu execuție înalt paralelă

Tipuri de shadere grafice

  • Compute shaders: nu sunt limitați la aplicații grafice, folosesc aceleași resurse de execuție pentru GPGPU

Unified shader model și evoluție hardware

  • Primele GPU-uri cu shadere suportau doar pixel shading → apoi vertex shaders rapid adăugate

Aplicare Directă în Console

Calitate

  • Exemplu: PlayStation 1 nu avea precizie sub-pixel → animații mai puțin fluide

Exemplu Real de Hardware

Definiție pipeline grafic

  • Aceste API-uri oferă un strat de abstractizare peste hardware-ul subiacent (AMD, Intel, Nvidia)

Definiție shader

  • Primul termen „shader" introdus de Pixar în 1988 (RenderMan Interface Specification v3.0)

Tipuri de shadere grafice

  • Mesh shaders: AMD Vega (2017) - primitive shaders; Nvidia Turing (2018) - mesh + task shaders; AMD RDNA 2 și Nvidia Ampere (2020) - mesh shading prin DirectX 12 Ultimate

Unified shader model și evoluție hardware

  • Prima placă video cu pixel shader programabil: Nvidia GeForce 3 (NV20), 2001

Probleme Frecvente Asociate

⚠️ Probleme asociate cu Pipeline grafic

Problemele frecvente asociate cu această temă vor fi detaliate pe măsură ce cursul avansează.

Recapitulare

  • Definiție pipeline grafic: Pipeline-ul grafic (graphics pipeline / rendering pipeline) este un cadru în grafica computerizată care definește procedurile necesare pentru transformarea unei scene 3D într-o reprezentare 2D pe ecran
  • Cele 3 etape principale: Pipeline-ul grafic se împarte în 3 părți principale: Aplicație (Application), Geometrie (Geometry), Rasterizare (Rasterization)
  • Etapa Aplicație: Executată de software pe procesorul principal (CPU)
  • Etapa Geometrie – Definiții: Un vertex (plural: vertices) este un punct în lume. Mai multe puncte sunt unite pentru a forma suprafețe
  • Geometrie – Sistemul de coordonate și transformări: Sistemul de coordonate mondial (world coordinate system) – coordonate rectangulare carteziene cu axe la scară egală
  • Geometrie – Transformarea camerei: Scena definește o cameră virtuală (poziție + direcție de vizualizare)
  • Geometrie – Proiecție: Proiecția 3D transformă volumul de vizualizare într-un cub cu coordonate (-1,-1,0) la (1,1,1)
  • Geometrie – Iluminare: Surse de lumină plasate la diferite poziții pentru iluminare realistă
  • Geometrie – Clipping: Doar primitivele din volumul vizual trebuie rasterizate
  • Geometrie – Transformarea Window-Viewport: Transformare pentru afișarea imaginii în zona țintă (viewport) a ecranului
  • Geometrie – Rezumat sub-pași: Etapa Geometrie (responsabilă de operațiile cu poligoane și vertecși) se împarte în 5 sub-sarcini:
  • Shadere: Plăcile grafice clasice erau aproape de pipeline-ul grafic rigid
  • Definiție rasterizare: Rasterizarea (rasterisation/rasterization) = conversia unei imagini descrise în format vectorial (forme) într-o imagine raster (pixeli, puncte, linii)
  • Rasterizarea 3D: Rasterizarea este una dintre tehnicile tipice de randare a modelelor 3D
  • Rasterizarea triunghiurilor: Poligoanele sunt de obicei descompuse în triunghiuri
  • Calitate: Calitatea rasterizării poate fi îmbunătățită prin antialiasing (margini „netede")
  • Definiție shader: Un shader este o operație programabilă aplicată datelor în timp ce parcurg pipeline-ul de randare
  • Tipuri de shadere grafice: Vertex shaders: rulează o dată pentru fiecare vertex 3D; transformă poziția 3D în coordonata 2D de ecran + valoare de adâncime (Z-buffer); pot manipula poziție, culoare, coordonate textură, dar NU pot crea vertecși noi
  • Unified shader model și evoluție hardware: Primele GPU-uri cu shadere suportau doar pixel shading → apoi vertex shaders rapid adăugate

Quiz — 5 Întrebări

Întrebarea 1

Care afirmație este corectă despre: Pipeline-ul grafic se împarte în 3 părți principale?

  • a) Aplicație (Application), Geometrie (Geometry), Rasterizare (Rasterization)
  • b) vertices) este un punct în lume. Mai multe puncte sunt unite pentru a forma suprafețe
  • c) detecția coliziunilor, animație, morphing, tehnici de accelerare (Quadtrees, Octrees)
  • d) mai multe copii transformate diferit dintr-un singur obiect (ex: o pădure din copaci)
Arată răspunsul

a) — Aplicație (Application), Geometrie (Geometry), Rasterizare (Rasterization)

Întrebarea 2

Care afirmație este corectă despre: Sarcini tipice?

  • a) vertices) este un punct în lume. Mai multe puncte sunt unite pentru a forma suprafețe
  • b) mai multe copii transformate diferit dintr-un singur obiect (ex: o pădure din copaci)
  • c) Aplicație (Application), Geometrie (Geometry), Rasterizare (Rasterization)
  • d) detecția coliziunilor, animație, morphing, tehnici de accelerare (Quadtrees, Octrees)
Arată răspunsul

d) — detecția coliziunilor, animație, morphing, tehnici de accelerare (Quadtrees, Octrees)

Întrebarea 3

Care afirmație este corectă despre: Un vertex (plural?

  • a) mai multe copii transformate diferit dintr-un singur obiect (ex: o pădure din copaci)
  • b) detecția coliziunilor, animație, morphing, tehnici de accelerare (Quadtrees, Octrees)
  • c) vertices) este un punct în lume. Mai multe puncte sunt unite pentru a forma suprafețe
  • d) Aplicație (Application), Geometrie (Geometry), Rasterizare (Rasterization)
Arată răspunsul

c) — vertices) este un punct în lume. Mai multe puncte sunt unite pentru a forma suprafețe

Întrebarea 4

Care afirmație este corectă despre: Instancing?

  • a) Aplicație (Application), Geometrie (Geometry), Rasterizare (Rasterization)
  • b) detecția coliziunilor, animație, morphing, tehnici de accelerare (Quadtrees, Octrees)
  • c) mai multe copii transformate diferit dintr-un singur obiect (ex: o pădure din copaci)
  • d) vertices) este un punct în lume. Mai multe puncte sunt unite pentru a forma suprafețe
Arată răspunsul

c) — mai multe copii transformate diferit dintr-un singur obiect (ex: o pădure din copaci)

Întrebarea 5

Care afirmație este corectă despre: Geometrie – Transformarea camerei?

  • a) Aplicație (Application), Geometrie (Geometry), Rasterizare (Rasterization)
  • b) vertices) este un punct în lume. Mai multe puncte sunt unite pentru a forma suprafețe
  • c) detecția coliziunilor, animație, morphing, tehnici de accelerare (Quadtrees, Octrees)
  • d) Sistemul rezultat = sistema de coordonate a camerei
Arată răspunsul

d) — Sistemul rezultat = sistema de coordonate a camerei

Exercițiu Aplicat de Gândire

🧠 Exercițiu: Pipeline grafic

Scenariu: Analizezi un sistem hardware care utilizează conceptul de etapele pipeline-ului grafic. Pe baza cunoștințelor din această lecție, răspunde la următoarele întrebări:

  • 1. Defineste pe scurt: etapele pipeline-ului grafic.
  • 2. Ce rol are procesarea geometriei în contextul hardware-ului?
  • 3. Explică relația dintre etapele pipeline-ului grafic și rasterizare.
Arată rezolvarea

1. Odată generat un model 3D, pipeline-ul convertește modelul într-un format vizual perceptibil pe display

2. Pipeline-ul grafic se împarte în 3 părți principale: Aplicație (Application), Geometrie (Geometry), Rasterizare (Rasterization)

3. Executată de software pe procesorul principal (CPU)

Video Recomandat

0:00 / 0:00

Cum funcționează randarea grafică în jocuri: pipeline-ul grafic de la vertex la pixel, explicat vizual.