Interpolare textură: Cum afectează performanța GPU

Interpolare textură: Cum afectează performanța GPU

De la sosirea primelor carduri 3D pe PC, s-a folosit ceea ce numim interpolare de texturi. Care a fost inițial folosit pentru a evita efectul pixelării în texturile scenei. Acest lucru este realizat de un tip de unitate numit „unități de gestionare a texturii” sau abreviat ca unități de textură. Vă explicăm cum afectează performanța GPU-urilor dvs.

Una dintre piesele fundamentale din fiecare GPU este unitatea de textură, care este însărcinată cu plasarea unei imagini în triunghiul fiecărei scene, proces pe care îl numim texturare, dar și a ceea ce numim interpolare a texturilor.

Cum funcționează interpolarea texturilor?

filtre texturas simple

Interpolația texturii este o funcție care se extinde la maparea texturilor, aceasta constând în crearea de gradiente de culoare de la un pixel la altul pentru a elimina efectul pixelării în scenă. Cel mai simplu fiind filtrul sau interpolarea biliniară, care constă în luarea celor 4 pixeli cei mai apropiați de fiecare pixel pentru a efectua calculul interpolării.

Astăzi se folosesc sisteme de interpolare mult mai complexe decât filtrul biliniar, care utilizează un număr mai mare de pixeli pe eșantion. La fel ca în cazul filtrului anizotrop la diferite niveluri care pot utiliza 8, 16 și chiar 32 de eșantioane pe pixel pentru a obține o calitate a imaginii mai ridicată.

Cu toate acestea, în ciuda existenței unor algoritmi de interpolare a texturilor mai complexe, marea majoritate a hardware-ului grafic este conceput pentru utilizarea filtrului biliniar, care este cel mai ieftin și mai ușor de implementat dintre toate la nivel hardware și obține rezultate. că astăzi am putea considera gratuit din punct de vedere al costului de calcul.

Interpolare de texturi și cache de date

GPU TFLOPS Velocidad

Când unitatea de textură efectuează procesul de îndrumare a poligonului, ceea ce face este să caute valoarea culorii stocată în textura din memorie, să o aplice pixelului corespunzător, să efectueze calculele corespunzătoare cu umbrele sau umbrele specificate și rezultatul final o trimite către ROPS-ul astfel încât să fie scris în bufferul de imagine.

La mijlocul acestui proces se realizează interpolare sau filtrare a texturilor, dar pentru că este o sarcină repetitivă și recursivă. Acest lucru este realizat de ceea ce numim unitatea de textură, care este însărcinată cu efectuarea diferitelor filtre. Pentru a face acest lucru, necesită o lățime de bandă mare care crește cu numărul de eșantioane necesare pe pixel, de cel puțin patru ori mai mare pentru fiecare texel, ceea ce este necesar pentru a efectua filtrul biliniar.

Unitățile de textură din GPU-urile de astăzi sunt grupate câte patru în fiecare shader sau unitate de calcul. Aceasta înseamnă că sunt necesare 16 accesări pe 32 de biți pe ciclu de ceas pe unitate de umbrire. De aceea, cache-ul de date al aceleiași unități și lățimea de bandă a acestuia sunt utilizate pentru a efectua filtrarea texturii.

În același timp, dacă este necesar să se utilizeze un filtru de textură de precizie mai mare, deoarece fiecare unitate de textură ia doar 4 eșantioane pe ciclu de ceas, atunci este necesar să se utilizeze un număr mai mare de cicluri de ceas pentru a efectua algoritmi de interpolare a texturilor mult mai complexe, astfel reducerea ratei de texturare.

Costul de calcul al interpolării texturii

NVIDIA GPU

Astăzi, unitățile shader sunt capabile să efectueze o cantitate enormă de calcule pe ciclu de ceas, nu degeaba sunt capabile să efectueze mai multe TFLOPS, FLOPS fiind operații în virgulă mobilă și T corespunzător prefixului Tera, care se referă la 10 ^ 12 operații, deci puterea de calcul a GPU-urilor a crescut enorm.

Astăzi, interpolare de texturi ar putea fi efectuată fără probleme folosind un program de shader în GPU, care, în teorie, ar salva complet includerea unităților de textură. De ce nu se face asta? Ei bine, datorită faptului că pentru a compensa pierderea unităților de textură menționate, ar trebui să creștem puterea unităților de calcul însărcinate cu executarea umbrelor într-un mod care ar fi mult mai scump. Adică, ar trebui să plasăm mai mulți tranzistori decât am fi salvat, prin urmare unitățile de textură continuă în interiorul GPU-urilor după mai bine de douăzeci de ani de la primele carduri 3D și nu vor dispărea.

Trebuie să se țină cont de faptul că interpolarea texturii se realizează într-un mod pentru toate textele care sunt procesate în scenă, ceea ce reprezintă o cantitate masivă și mai ales dacă vorbim despre rezoluții ridicate precum 1440P sau 4K. Deci, nu este profitabil să le scoateți de pe hardware și toate componentele grafice fără ele vor avea probleme majore de performanță dacă nu le respectă, fără a uita că toate jocurile și aplicațiile își iau deja existența ca fiind reală.

Limitări actuale la unitatea de textură

GPU-uri AMD VRAM

Odată ce i-am explicat utilitatea, trebuie să luăm în considerare care sunt limitările privind unitatea de texturi pentru interpolare. Formatul obișnuit de textură este RGBA8888, unde fiecare componentă are o precizie de 8 biți și, prin urmare, are 256 de valori pe componentă de culoare.

Acest lucru facilitează foarte mult implementarea interpolării texturilor la nivel hardware. Deoarece fiecare unitate de textură preia cei 32 de biți ai fiecărui pixel din cache-ul de date, fiecare dintre cele patru componente componente este procesată separat, mai degrabă decât împreună.

Texturi de interpolare a artefactelor

Problemele cu această implementare? Când unitatea de textură efectuează interpolarea fiecăreia dintre cele 4 componente, o face folosind doar 256 de valori, care, în ciuda facilitării implementării la nivel hardware a interpolării texturii, reduce precizia datelor care pot fi obținute, pentru ceea ce nu facem sfârșește cu rezultatul ideal pentru interpolare, dar o aproximare la acesta.

Această lipsă de precizie în combinație cu utilizarea de câteva eșantioane pe pixel determină generarea de multe ori în texturile jocurilor de artefacte de imagine care otrăvesc calitatea finală a scenei. Cea mai bună soluție? Folosirea unor metode de interpolare mult mai complexe, cum ar fi interpolare bicubică, dar aceasta înseamnă a duce hardware-ul la nivele de complexitate mult mai ridicate decât este acum, întrucât acest lucru ar necesita de patru ori lățimea de bandă cu cache-ul de date.