Tampoane de imagine pe GPU: tipuri, natură și caracteristici

Tampoane de imagine pe GPU

V-ați întrebat vreodată unde sunt stocate imaginile pe care le vedeți pe ecranul computerului, consolei sau dispozitivelor PostPC? Ei bine, în tampoanele de imagine, dar care este natura lor și în ce constă? Cum afectează performanța computerelor noastre, ce forme de redare a unei scene există și care sunt diferențele lor?

A GPU generează o cantitate uriașă de informații pe secundă, sub forma mai multor imagini care trec rapid pe retina noastră de la televizor, dimensiunea acestor imagini și informațiile stocate și procesate sunt enorme. Tampoanele de imagine datorate stocării în VRAM sunt unul dintre motivele pentru care este necesară memorie cu lățime de bandă mare.

Ce este bufferul de imagine?

Búferes de Imagen

Tamponul de imagine este o parte a VRAM în care sunt stocate informațiile fiecărui pixel de pe ecranul cadrului următor, acest tampon este stocat în VRAM și este generat de GPU la fiecare x milisecunde.

GPU-urile actuale funcționează cu cel puțin două buffere de imagine, în primul GPU scrie următorul cadru care va fi văzut pe ecran, în al doilea este cadrul anterior generat deja, care este trimis pe ecran.

Búferes de Imagen

Backbuffer-ul sau buffer-ul posterior se numește cel generat de GPU, iar Frontbuffer-ul sau buffer-ul frontal este cel care este citit de driverul de afișare și trimis la ieșirea video. În timp ce bufferul frontal stochează pentru fiecare pixel valoarea componentelor roșu, verde și albastru, în buffer-ul din spate poate stoca o a patra componentă, alfa, care stochează valoarea transparenței sau semi-transparenței unui pixel.

Ce este driverul afișajului?

Driverul de afișare este o bucată de hardware găsită în GPU, este însărcinată cu citirea bufferului de imagine în VRAM și conversia datelor într-un semnal pe care ieșirea video, indiferent de tip, o poate înțelege.

În sisteme precum NVIDIA G-SYNC, AMD FreeSync / Adaptive Sync și altele asemenea, controlerul afișajului nu numai că trimite date către monitor sau televizor, dar controlează și când începe și se termină fiecare cadru.

Tampoane de imagine și redare tradițională 3D

Deși ecranele noastre sunt în 2D, de mai bine de douăzeci de ani scenele 3D au fost redate în timp real pe ele. Pentru a face acest lucru, este necesar să împărțiți tamponul din spate în două tampoane diferențiate:

  • Color Buffer: În cazul în care se notează valoarea componentelor de culoare și alfa ale fiecărui pixel.
  • Tampon de adâncime: unde este arătată valoarea adâncimii fiecărui pixel.

Când redăm o scenă 3D, putem constata că mai mulți pixeli au valori diferite în buffer-ul de adâncime, dar sunt în același loc în celelalte două dimensiuni, aici trebuie descărcați acei pixeli suplimentari, deoarece nu sunt vizibili. aruncarea se face prin compararea poziției fiecărui pixel în bufferul de adâncime, aruncându-le cu ele pe cele mai îndepărtate de cameră.

Tamponul de adâncime

Bufere de imagine Z-Buffer

Tamponul de adâncime sau mai bine cunoscut sub numele de Z-Buffer stochează distanța fiecărui pixel al unei scene 3D față de punctul de vedere sau de cameră, aceasta poate fi generată într-unul din aceste două momente.

  • După etapa raster și înainte de etapa de texturare.
  • După etapa de texturare.

Deoarece etapa cea mai grea din punct de vedere al calculului este cea a Pixel / Fragment Shader, faptul de a genera Z-Buffer imediat după texturarea scenei implică calcularea valorii culorii și, prin urmare, Pixel sau Fragment Shader de sute de mii și chiar milioane de pixeli nevizibili .

Trasarea razelor transparente

Omologul de a face acest lucru înainte de texturare este că, neavând valorile culorii și transparenței, canal alfa, putem constata că un pixel după altul transparent este aruncat în prealabil, ceea ce îl face să nu fie vizibil în scena finală.

Pentru a evita acest lucru, dezvoltatorii redau de obicei scena în două părți, prima nu redă obiectele din spatele unui obiect transparent sau semitransparent, în timp ce al doilea redă doar acele obiecte.

Tamponarea imaginilor și redarea leneșă

Una dintre noutățile care au fost văzute la sfârșitul anilor 2000 când redarea grafică a fost redarea amânată sau Redarea amânată, care a constat în redarea mai întâi a scenei generând o serie de buffere suplimentare numite G-Buffer și apoi, într-un pas următor, calculați iluminarea scenă.

Faptul de a avea nevoie de mai multe buffere de imagine înmulțește cerințele de memorie și, prin urmare, necesită o cantitate mai mare de memorie pentru stocare, precum și o rată de umplere și, prin urmare, o lățime de bandă mai mare.

multiple luces

Dar, redarea leneșă a fost făcută pentru a corecta una dintre problemele de performanță ale rasterizării clasice în care fiecare modificare a valorii într-un pixel, fie datorită luminanței, fie a crominanței, implică o rescriere în tamponul de imagine, care se traduce într-o cantitate imensă de datele care trebuie transmise în VRAM

Datorită redării leneșe, costul numărului de lumini din scenă trece de la a fi exponențial la logaritmic, reducând astfel costul de calcul la redarea scenelor cu mai multe surse de lumină.

Tampoane de imagine ca hartă umbră

Maps Sombras Z-Buffer

Deoarece rasterizarea nu este foarte bună la calcularea iluminării indirecte, trebuie găsite trucuri pentru a genera hărți de umbre în ele.

Cea mai simplă metodă este de a reda scena luând sursa de lumină sau umbră ca și cum ar fi camera, dar în loc de a reda o imagine completă, este generat doar tamponul de adâncime, care va fi folosit mai târziu ca o hartă de umbră.

Acest sistem va dispărea în următorii ani datorită creșterii Ray Tracing, care permite crearea de umbre în timp real într-un mod mult mai precis, necesitând mai puțină putere de calcul și fără a fi necesară generarea unei uriașe hărți de umbre în VRAM.