Ce este un filtru în jocuri? Filtrare anisotropic

Teste de performanta:

Și acum că ne-am familiarizat cu conceptele de bază de filtrare și netezire a texturii, putem trece la practică.

Configurare computer:
Procesor: Intel Core 2 Quad Q6600 @ 3200MHz (400x8, 1.3125V)
Placa video: Palit Nvidia GeForce 8800GT
Placa de baza: Asus P5Q PRO TURBO
Memorie: 2x2048MB DDR2 Corsair XMS2 @ 1066MHz, 5-5-5-15
Alimentare: Corsair CMPSU-850HXEU 850W
Cooler CPU: Zalman CNPS9700 LED
OS: Windows 7 Ultimate x64
Versiunea driverului video: Nvidia 195.62 x64

Subiectul principal în testarea noastră de astăzi a fost foarte vechi, dar nu mai puțin faimosul Counter-Strike: Source, deoarece acesta este unul dintre puținele jocuri cu adevărat răspândite care oferă o gamă largă de setări diferite de anti-aliasing și filtrare. În ciuda vechimii motorului (2004), acest joc încă poate încărca destul de bine chiar și cea mai modernă platformă. Iată o gamă atât de bogată de setări prezentate utilizatorului:

Testele de antialiasing și filtrare au fost efectuate în benchmark-ul încorporat, la o rezoluție de 1280x1024. Toate celelalte setări au fost luate ca maxim, ca în captura de ecran de mai sus. Pentru a aduce rezultatul cât mai aproape de adevăr, fiecare parametru a fost testat de trei ori, după care s-a găsit media aritmetică a valorilor rezultate.

Și așa, ce am primit:

Rezultatele au fost destul de neașteptate. Tehnologia de eșantionare a acoperirii (CSAA), care prin definiție ar trebui să consume mai puține resurse decât MSAA, arată aici o imagine complet opusă. Pot exista o mulțime de motive pentru acest fenomen. În primul rând, este necesar să țineți cont de faptul că, în multe privințe, performanța la pornirea anti-aliasing depinde de arhitectura GPU-ului. Și optimizarea diferitelor tehnologii ale jocului în sine și versiunea driverului joacă un rol la fel de important. Prin urmare, rezultatele la utilizarea altor plăci video, sau chiar a unei versiuni de driver diferite, pot fi complet diferite.

Testele cu anti-aliasing dezactivat (marcate cu albastru pentru ușurință de percepție) au arătat o imagine aproximativ egală, ceea ce indică o ușoară diferență în încărcarea plăcii video.

În plus, există o corespondență clară între indicatorii FPS, atunci când se utilizează aceeași metodă de anti-aliasing, pentru AF 8x și AF 16x. În același timp, diferența variază de la 1 la 4 fps (cu excepția MSAA 8x, unde diferența este de 11 fps). Acest lucru sugerează că utilizarea filtrării 16x poate fi foarte utilă dacă trebuie să îmbunătățiți calitatea imaginii fără un impact semnificativ asupra performanței.

Și totuși, este necesar să faceți o rezervare că este pur și simplu nerealist să obțineți aceleași valori FPS direct în joc, deoarece multe scene se dovedesc a fi mult mai dificile, mai ales cu mulți jucători.

Imagini de testare:

Deci, ce avem? Am aflat despre efectele diferitelor configurații ale setărilor asupra performanței. „Dar de ce este nevoie de toate acestea?” - tu intrebi. Pentru a îmbunătăți calitatea imaginii afișate, voi răspunde. Există vreo astfel de creștere? Pentru a răspunde la această întrebare, vă sugerez să aruncați o privire la următoarele capturi de ecran:

Billinear/MSAA 2xTriliniar/MSAA 2xAF 2x / MSAA 2x
AF 2x / CSAA 8xAF 2x / MSAA 8xAF 2x / CSAA 16x
AF 2x / CSAA 16xQAF 8x/MSAA x2AF 8x / CSAA 8x
AF 8x / MSAA 8xAF 8x / CSAA 16xAF 8x / CSAA 16xQ
AF 16x / MSAA 2xAF 16x / CSAA 8xAF 16x / MSAA 8x
AF 16x / CSAA 16xAF 16x / CSAA 16xQBillinear/CSAA 16xQ

După cum puteți vedea, pur și simplu nu există nicio diferență semnificativă în combinațiile „de mai sus” AF 8x / MSAA 8x (CSAA 8x). Dar acest lucru are ca rezultat o afectare vizibilă a performanței, mai ales atunci când utilizați Coverage Sampling AntiAliasing.

Concluzii:

Cu siguranță printre cei care citesc acest articol vor fi jucători de Cs:s, HL2 și alte jocuri bazate pe motorul Source. Ei vor găsi acest articol mai interesant și mai educativ decât altele. Cu toate acestea, scopul acestei scrieri a fost doar acela de a vorbi despre tehnologiile moderne care ajută la îmbunătățirea percepției vizuale a jocurilor. Și testele sunt o modalitate de a arăta teoria enunțată în practică.

Desigur, pentru a asigura fiabilitatea citirilor, ar fi trebuit efectuate teste de performanță atât pe alte cipuri video, cât și pe jocuri suplimentare.

Oricum ar fi, revenind la subiectul acestui articol, fiecare alege cu ce setări să se joace. Și nu voi da sfaturi sau recomandări, deoarece sunt sortite eșecului în avans. Sper că teoria și testele de mai sus vă vor ajuta să vă familiarizați mai bine cu tehnologiile descrise.

De Stormcss


Dă din picior vicios

Odată cu apariția jocurilor 3D, au început să apară probleme care nu existau în jocurile 2D: la urma urmei, acum trebuie să afișați o imagine tridimensională pe un monitor plat. Dacă obiectul este paralel cu planul ecranului din apropierea acestuia, nu există probleme: un pixel corespunde unui texel (un texel este un pixel al unei imagini bidimensionale suprapuse pe o suprafață 3D). Dar ce să faci dacă obiectul este înclinat sau este departe? La urma urmei, atunci există mai mulți texeli pe pixel și, deoarece monitorul are un număr limitat de pixeli, culoarea fiecăruia trebuie calculată din mai mulți texeli printr-un anumit proces - filtrare.


Pentru a face lucrurile mai ușor de înțeles, să ne imaginăm că fiecare pixel este o „găură” pătrată în monitor, tragem „raze de lumină” din ochi, iar texelii sunt amplasați pe o grilă pătrată în spatele monitorului. Dacă plasăm grătarul paralel cu monitorul imediat în spatele acestuia, atunci lumina de la un pixel va acoperi doar un texel. Acum vom începe să îndepărtăm grătarul - ce vom obține? Faptul că punctul nostru de lumină de la un pixel va acoperi deja mai mult de un texel. Acum să rotim zăbrelele și să obținem același lucru: un punct de la un pixel va acoperi mulți texeli. Dar un pixel poate avea o singură culoare, iar dacă există mulți texeli în el, atunci avem nevoie de un algoritm cu ajutorul căruia îi vom determina culoarea - se numește filtrarea texturii.


Acesta este cel mai simplu algoritm de filtrare: se bazează pe faptul că pentru culoarea pixelului luăm culoarea texelului care este cel mai aproape de centrul punctului luminos din pixel. Avantajul acestei metode este evident - pune cea mai mică sarcină pe placa video. Există, de asemenea, o mulțime de dezavantaje - culoarea unui texel central poate diferi semnificativ de culoarea a zeci și chiar sute de alți texeli care cad în locul pixelului. În plus, forma spotului în sine se poate schimba semnificativ, dar centrul său poate rămâne în același loc și, ca urmare, culoarea pixelului nu se va schimba. Ei bine, principalul dezavantaj este problema „blocării”: atunci când există puțini texeli pe pixel (adică un obiect lângă player), atunci obținem că, cu această metodă de filtrare, o parte destul de mare a imaginii este umplută. cu o singură culoare, ceea ce duce la „blocuri” clar vizibile de aceeași culoare pe ecran. Calitatea finală a imaginii este... pur și simplu teribilă:


Deci, nu este de mirare că o astfel de filtrare nu mai este folosită astăzi.


Odată cu dezvoltarea plăcilor video, puterea lor a început să crească, așa că dezvoltatorii de jocuri au mers mai departe: dacă luați un texel pentru culoarea unui pixel, se dovedește rău. Bine - să luăm culoarea medie de la 4 texeli și să o numim filtrare biliniară? Pe de o parte, totul se va îmbunătăți - blocajul va dispărea. Dar va veni inamicul numărul doi - neclaritatea imaginii în apropierea jucătorului: acest lucru se datorează faptului că interpolarea necesită mai mulți texeli decât patru.

Dar aceasta nu este problema principală: filtrarea biliniară funcționează bine atunci când obiectul este paralel cu ecranul: atunci poți oricând să selectezi 4 texeli și să obții o culoare „medie”. Dar 99% dintre texturi sunt înclinate spre jucător și se dovedește că aproximăm 4 paralelipipede dreptunghiulare (sau trapeze) ca 4 pătrate, ceea ce este incorect. Și cu cât textura este mai înclinată, cu atât acuratețea culorii este mai mică și estomparea este mai puternică:


Bine, au spus dezvoltatorii jocului - din moment ce 4 texeli nu sunt suficienți, să luăm de două ori patru și, pentru a se potrivi mai exact cu culoarea, vom folosi tehnologia mip-texturing. După cum am scris deja mai sus, cu cât textura este mai departe de player, cu atât vor fi mai mulți texeli într-un pixel și cu atât este mai dificil pentru placa video să proceseze imaginea. Texturarea MIP înseamnă stocarea aceleiași texturi în rezoluții diferite: de exemplu, dacă dimensiunea texturii inițiale este 256x256, atunci copiile acesteia sunt stocate în memorie în 128x128, 64x64 și așa mai departe, până la 1x1:


Și acum, pentru filtrare, nu se ia doar textura în sine, ci și mipmap-ul: în funcție de faptul că textura este mai departe sau mai aproape de player, se ia fie o textura mipmap mai mică, fie mai mare, și deja pe ea cei 4 texeli cei mai apropiați la centrul pixelului sunt luate și se efectuează o analiză biliniară de filtrare. În continuare, sunt luați 4 texeli cei mai apropiați de pixelul texturii originale și din nou se obține culoarea „medie”. După aceea, culoarea „medie” este luată din culorile medii ale mipmap-ului și texturii originale și atribuită pixelului - așa funcționează algoritmul de filtrare triliniară. Drept urmare, încarcă placa video ceva mai mult decât filtrarea biliniară (de asemenea, mipmap-ul trebuie procesat), dar calitatea imaginii este mai bună:


După cum puteți vedea, filtrarea triliniară este mult mai bună decât cea biliniară și chiar mai mult decât filtrarea punctiformă, dar imaginea devine încă neclară la distanțe lungi. Iar imaginea neclară se datorează faptului că nu ținem cont de faptul că textura poate fi înclinată față de player - și tocmai aceasta este problema pe care o rezolvă filtrarea anizotropă. Pe scurt, principiul de funcționare al filtrării anizotrope este următorul: se ia o textură MIP, setată pe direcția de vizualizare, după care valorile sale de culoare sunt mediate cu culoarea unui anumit număr de texeli de-a lungul direcției de vizualizare. Numărul de texeli variază de la 16 (pentru filtrarea x2) la 128 (pentru x16). Pentru a spune simplu, în loc de un filtru pătrat (ca în filtrarea biliniară), se folosește unul alungit, care vă permite să selectați mai bine culoarea dorită pentru un pixel de ecran. Deoarece pe ecran pot exista un milion sau chiar mai mulți pixeli și fiecare texel cântărește cel puțin 32 de biți (culoare de 32 de biți), filtrarea anizotropă necesită o lățime de bandă enormă a memoriei video - zeci de gigaocteți pe secundă. Cerințele atât de mari de memorie sunt reduse datorită compresiei texturii și caching-ului, dar totuși pe plăcile video cu memorie DDR sau o magistrală de 64 de biți, diferența dintre filtrarea triliniară și x16 anizotropă poate ajunge la 10-15% fps, dar imaginea după o astfel de filtrare se dovedește a fi cel mai bun:

Filtrarea texturii.

Filtrarea rezolvă problema determinării culorii unui pixel pe baza texelilor existenți dintr-o imagine de textură.

Cea mai simplă metodă de aplicare a texturilor se numește eșantionarea punctuală(eșantionare într-un singur punct). Esența sa este că pentru fiecare pixel care alcătuiește poligonul, un texel este selectat din imaginea de textură care este cel mai aproape de centrul punctului de lumină. Apare o eroare deoarece culoarea unui pixel este determinată de mai mulți texeli, dar a fost selectat doar unul.

Această metodă este foarte inexactă și rezultatul utilizării ei este apariția neregulilor. Și anume, ori de câte ori pixelii sunt mai mari ca dimensiune decât texelii, se observă un efect de pâlpâire. Acest efect apare dacă o parte a poligonului este suficient de departe de punctul de observație încât mulți texeli sunt suprapuși pe spațiul ocupat de un pixel. Rețineți că dacă poligonul este situat foarte aproape de punctul de observație și texelii au dimensiuni mai mari decât pixelii, se observă un alt tip de degradare a calității imaginii. În acest caz, imaginea începe să arate blocată. Acest efect apare atunci când textura poate fi suficient de mare, dar limitarea rezoluției disponibile a ecranului împiedică reprezentarea corectă a imaginii originale.

A doua metoda - filtrare biliniară(Filtrarea Bi-Lineară) constă în utilizarea tehnologiei de interpolare. Pentru a determina texelii care ar trebui utilizați pentru interpolare, se folosește forma de bază a punctului de lumină - un cerc. În esență, un cerc este aproximat cu 4 texeli. Filtrarea biliniară este o tehnică de eliminare a distorsiunilor de imagine (filtrare), cum ar fi „blocarea” texturilor atunci când acestea sunt mărite. Când rotiți sau mișcați încet un obiect (apropierea/depărtarea), „săritul” pixelilor dintr-un loc în altul poate fi vizibil, de exemplu. apare blocajul. Pentru a evita acest efect, se folosește filtrarea biliniară, care utilizează o medie ponderată a valorii culorii a patru texeli adiacenți pentru a determina culoarea fiecărui pixel și, ca rezultat, determină culoarea texturii suprapuse. Culoarea pixelilor rezultată este determinată după ce sunt efectuate trei operații de amestecare: mai întâi, culorile a două perechi de texeli sunt amestecate, iar apoi cele două culori rezultate sunt amestecate.

Principalul dezavantaj al filtrării biliniare este că aproximarea este efectuată corect numai pentru poligoane care sunt situate paralel cu ecranul sau punctul de observare. Dacă poligonul este rotit într-un unghi (și acest lucru este în 99% din cazuri), este utilizată o aproximare greșită, deoarece o elipsă trebuie aproximată.

Erorile de „aliasing de adâncime” apar din faptul că obiectele mai îndepărtate de punctul de vedere apar mai mici pe ecran. Dacă un obiect se mișcă și se îndepărtează de punctul de vizualizare, imaginea texturii suprapusă obiectului care se micșorează devine din ce în ce mai comprimată. În cele din urmă, imaginea textura aplicată obiectului devine atât de comprimată încât apar erori de randare. Aceste erori de randare sunt deosebit de problematice în animație, unde astfel de artefacte de mișcare provoacă efecte de pâlpâire și de mișcare lentă în părți ale imaginii care ar trebui să fie staționare și stabile.

Următoarele dreptunghiuri cu texturare biliniară pot servi ca ilustrare a efectului descris:

Orez. 13.29. Umbrirea unui obiect folosind metoda de filtrare biliniară. Apariția artefactelor „de depth-aliasing”, care au ca rezultat fuziunea mai multor pătrate într-unul singur.

Pentru a evita erorile și a simula faptul că obiectele aflate la distanță apar mai puțin detaliate decât cele mai apropiate de punctul de vizualizare, o tehnică cunoscută sub numele de mip-mapping. Pe scurt, mip-mapping este suprapunerea texturilor cu diferite grade sau niveluri de detaliu, atunci când, în funcție de distanța până la punctul de observare, este selectată o textură cu detaliul necesar.

O mip-textură (mip-map) constă dintr-un set de imagini prefiltrate și scalate. Într-o imagine asociată cu un strat mip-hartă, un pixel este reprezentat ca media a patru pixeli din stratul anterior la o rezoluție mai mare. Prin urmare, imaginea asociată cu fiecare nivel de mip-textură este de patru ori mai mică ca dimensiune decât nivelul precedent de mip-hartă.

Orez. 13.30. Imagini asociate cu fiecare nivel mip-hartă al texturii ondulate.

De la stânga la dreapta avem nivelurile mip-map 0, 1, 2 etc. Cu cât imaginea devine mai mică, cu atât se pierd mai multe detalii, până aproape de sfârșit, când nimic nu este vizibil, cu excepția unei neclare neclare de pixeli gri.

Nivelul de detaliu, sau pur și simplu LOD, este folosit pentru a determina ce nivel de mip-hartă (sau nivel de detaliu) ar trebui să fie selectat pentru a aplica o textură unui obiect. LOD trebuie să corespundă numărului de texeli suprapusi pe pixel. De exemplu, dacă texturarea are loc cu un raport apropiat de 1:1, atunci LOD va fi 0, ceea ce înseamnă că va fi utilizat nivelul hărții mip cu cea mai mare rezoluție. Dacă 4 texeli se suprapun pe un pixel, atunci LOD va fi 1 și va fi utilizat următorul nivel mip cu rezoluție mai mică. De obicei, pe măsură ce te îndepărtezi de punctul de observație, obiectul care merită cea mai mare atenție are o valoare LOD mai mare.

În timp ce mip-texturarea rezolvă problema erorilor de depth-aliasing, utilizarea sa poate provoca apariția altor artefacte. Pe măsură ce obiectul se mișcă din ce în ce mai departe de punctul de observație, are loc o tranziție de la un nivel scăzut al hărții mip la unul ridicat. Când un obiect se află într-o stare de tranziție de la un nivel de mip-hartă la altul, apare un tip special de eroare de vizualizare, cunoscut sub numele de „mip-banding” - banding sau laminare, de ex. granițele clar vizibile ale tranziției de la un nivel mip-hartă la altul.

Orez. 13.31. Banda dreptunghiulară constă din două triunghiuri texturate cu o imagine în formă de undă, unde artefactele „mip-banding” sunt indicate prin săgeți roșii.

Problema erorilor „mip-banding” este deosebit de acută în animație, datorită faptului că ochiul uman este foarte sensibil la deplasări și poate observa cu ușurință locul unei tranziții ascuțite între nivelurile de filtrare atunci când se deplasează în jurul unui obiect.

Filtrarea tri-linear(filtrarea triliniară) este o a treia metodă care elimină artefactele de bandă mip care apar atunci când este utilizată texturarea mip. Cu filtrarea triliniară, pentru a determina culoarea unui pixel, se ia valoarea medie a culorii de opt texeli, se iau patru din două texturi adiacente și, în urma a șapte operații de amestecare, se determină culoarea pixelului. Când se utilizează filtrarea triliniară, este posibil să se afișeze un obiect texturat cu tranziții netede de la un nivel mip la altul, care se realizează prin determinarea LOD prin interpolarea a două niveluri mip-hărți adiacente. Rezolvând astfel majoritatea problemelor asociate cu texturarea mip și erorile datorate calculării incorecte a adâncimii scenei („alisarea adâncimii”).

Orez. 13.32. Piramida MIP-hartă

Un exemplu de utilizare a filtrării triliniare este dat mai jos. Aici se folosește din nou același dreptunghi, texturat cu o imagine în formă de undă, dar cu tranziții netede de la un nivel mip la altul datorită utilizării filtrării triliniare. Rețineți că nu există erori de randare vizibile.

Orez. 13.33. Un dreptunghi texturat cu o imagine ondulată este redat pe ecran utilizând textura mip și filtrarea triliniară.

Există mai multe moduri de a genera texturi MIP. O modalitate este pur și simplu să le pregătiți în avans folosind pachete grafice precum Adobe PhotoShop. O altă modalitate este de a genera texturi MIP din mers, adică. în timpul executării programului. Texturile MIP pregătite în prealabil înseamnă un spațiu suplimentar de 30% din spațiu pe disc pentru texturi în instalarea de bază a jocului, dar permit metode mai flexibile de control al creării lor și vă permit să adăugați diferite efecte și detalii suplimentare la diferite niveluri MIP.

Se pare că mipmapping-ul triliniar este cel mai bun care poate fi?

Desigur că nu. Se poate observa că problema nu este doar în raportul dintre dimensiunile pixelilor și texelilor, ci și în forma fiecăruia dintre ele (sau, mai precis, în raportul formelor).

Metoda de texturare mip funcționează cel mai bine pentru poligoane care sunt direct față în față cu punctul de vedere. Cu toate acestea, poligoane care sunt oblice în raport cu punctul de observație îndoaie textura suprapusă astfel încât diferite tipuri și zone de formă pătrată ale imaginii de textură pot fi suprapuse pe pixeli. Metoda de texturare mip nu ține cont de acest lucru și rezultatul este că imaginea texturii este prea neclară, ca și cum ar fi folosiți texeli greșiți. Pentru a rezolva această problemă, trebuie să eșantionați mai mulți texeli care alcătuiesc textura și trebuie să selectați acești texeli ținând cont de forma „mapată” a pixelului în spațiul texturii. Această metodă se numește filtrare anisotropic("filtrare anisotropic"). Texturarea mip normală este numită „izotropă” (izotropă sau uniformă) deoarece filtrăm întotdeauna împreună regiuni pătrate de texeli. Filtrarea anizotropă înseamnă că forma regiunii texel pe care o folosim se schimbă în funcție de circumstanțe.

Descrierea algoritmilor de texturare: filtrarea texturii

Filtrarea texturii

Recent, companiile implicate în dezvoltarea graficii 3D pe computer s-au străduit constant să crească detaliile și calitatea imaginii în randarea computerului. Noi tehnologii și arhitecturi de randare 3D sunt dezvoltate în mod constant, algoritmii de compresie sunt îmbunătățiți și actualizați pentru a crește lățimea de bandă a memoriei, iar arhitectura memoriei este, de asemenea, în curs de modificări. Din păcate, decalajul dintre ideile avansate din grafica 3D și PC-urile convenționale este destul de mare: realism în jocurile moderne etc. realizate folosind tehnologii dezvoltate acum 1-2 ani. În plus, puterea PC-urilor obișnuite este foarte limitată, motiv pentru care se folosesc algoritmi destul de simpli pentru jocuri, despre care vom discuta în acest articol: aceasta este texturarea și mai detaliat - filtrarea texturii.

Având un computer ideal cu performanțe mult superioare celui actual, am putea afișa o imagine în timp real cu o randare foarte realistă. Ar fi posibil să se calculeze milioane, chiar miliarde de pixeli și să se stabilească propria culoare pentru fiecare dintre ei - în acest caz, imaginea pur și simplu nu poate fi distinsă de un videoclip real. Dar, din păcate, acestea sunt doar vise deocamdată: pentru computerele existente este încă prea dificil să procesezi simultan desenul obiectelor în mișcare etc. În plus, există încă o lipsă catastrofală a lățimii de bandă a memoriei. Pentru a asigura o bună calitate în aplicațiile 3D, sunt dezvoltate tehnologii pentru a simplifica procesul de redare a imaginii.

Una dintre cele mai utilizate tehnologii care simplifică calculele imaginii cu o calitate destul de bună este texturarea. O textură este o imagine 2D aplicată unui obiect 3D sau oricărei suprafețe. Să luăm ca exemplu următoarea situație: sunteți dezvoltator și doriți ca utilizatorul să vadă un zid de cărămidă. Este creat un cadru de perete 3D și puteți selecta cărămizile separat. Acum facem o fotografie 2D a unei cărămizi și o punem pe o cărămidă într-un cadru 3D și așa mai departe - întregul perete. Rezultatul este un perete 3D normal, iar cipul grafic nu trebuie să deseneze și să calculeze fiecare pixel - calculează coordonatele cadrului 3D la care este atașată imaginea 2D.

Mai există un concept de texturare care ar trebui discutat. Când se suprapune o imagine 2D, aceasta este împărțită în multe fragmente colorate. Acest lucru se face pentru a scala obiectul - textura este bidimensională, iar un obiect tridimensional ar trebui să se schimbe atunci când se apropie sau se îndepărtează. De asemenea, textura trebuie să se schimbe pentru a menține realismul și calitatea. Deci, textura este împărțită în multe fragmente colorate, care se numesc texels (elemente de textură). În viitor, de exemplu, atunci când vă apropiați de un obiect, nu este nevoie să reîncărcați o nouă textură: texelii sunt preluați din textura originală și măriți. Desigur, calitatea se pierde, dar rămâne la un nivel destul de ridicat, în plus, cu această abordare procesorul grafic și memoria sunt descărcate semnificativ.

Mip-Mapping

Mișcarea este o caracteristică a tuturor obiectelor afișate; Chiar dacă obiectul în sine este staționar, se schimbă totuși atunci când unghiul de vedere al personajului se schimbă din cauza mișcării sale. Prin urmare, textura plasată pe obiect trebuie să se miște și ea - acest lucru implică unele complicații și procesări suplimentare. Dar ce se întâmplă dacă privim un obiect dintr-un anumit unghi, de exemplu, la podea? Pardoseala poate ocupa o suprafață mare, iar pentru a menține realismul, cu cât este mai departe de noi, cu atât componentele sale (de exemplu, gresie) sunt mai mici. Pentru a asigura acest lucru, textura trebuie redusă într-un anumit fel. Din păcate, simpla modificare a rezoluției texturilor poate duce la un efect destul de neplăcut, atunci când o textură se îmbină vizual cu alta. Un alt efect neplăcut poate apărea dacă texelul este mai mare decât numărul necesar de pixeli. Acest lucru se întâmplă când te uiți la o textură care este foarte departe. Ambele situații apar atunci când se utilizează anti-aliasing tradițional. Și iată exemple reale ale acestor cazuri: nu există

Pentru a atenua astfel de situații, a fost creată mip-mapping. Această tehnologie funcționează foarte simplu: textura originală este generată în diverse situații astfel încât să se afișeze corect textura la diferite distanțe și la diferite unghiuri de vizualizare. Când te apropii de un obiect, textura este afișată cu o rezoluție mai mare, iar când te îndepărtezi - cu una mai mică. Astfel, mip-mapping îmbunătățește calitatea imaginii și reduce deformațiile. Mai jos sunt aceleași imagini, doar cu mip-mapping activat: nu există imagini în acest rezumat.

Ați observat o îmbunătățire a calității? Se observă mai ales în a doua poză cu modelul galben și roșu. Vă rugăm să rețineți: calitatea nu numai texturilor îndepărtate s-a îmbunătățit: și cele din apropiere arată mult mai bine. În general, o imagine cu mip-mapping arată mult mai bine decât fără ea: nu există numeroase distorsiuni și curburi vizibile în timpul afișajului normal.

Filtrare

Texturarea cu puncte este probabil principalul tip de texturare. Cu texturarea punctuală, un fragment separat al texturii (texel) este selectat și utilizat ca valoare de culoare pentru pixeli. Cert este că această metodă implică o oarecare neglijență și, în consecință, o deteriorare a calității imaginii. O astfel de imagine este pur și simplu inacceptabilă conform standardelor existente. Mai jos este o textură care a fost procesată cu texturare punctuală (partea de jos a imaginii). Imaginea arată degradarea teoretică a calității atunci când alegeți o dimensiune texel care este prea mare.

Filtrare Bilineat

O altă metodă de texturare este filtrarea biliniară. Principiul de funcționare al acestei metode de texturare este foarte asemănător cu metoda punctului, dar spre deosebire de aceasta, nu se folosește imaginea completă, ci un bloc de 4 texeli pentru a selecta culoarea pixelilor. Acest lucru mărește acuratețea atunci când alegeți culorile pixelilor și obține o randare mai bună a micilor detalii individuale ale imaginii.

Această imagine arată un exemplu de desenare a unei imagini utilizând filtrarea biliniară și maparea mip.

Filtrarea tri-linear

Filtrarea biliniară a primit a doua naștere sub formă de filtrare triliniară, al cărei principiu de funcționare este exact același, dar este utilizat un algoritm de calcul îmbunătățit, care crește acuratețea redării. Filtrarea triliniară, ca și filtrarea biliniară, folosește blocuri de 4 texeli, la fel ca în filtrarea biliniară, imaginea este normalizată, apoi imaginea din blocul limită de 4 texeli este normalizată. Ultimul pas este analizarea graniței ambelor blocuri, în urma căreia se corectează eventualele erori și inconsecvențe de la limita acestor 2 blocuri. În filtrarea biliniară, este destul de obișnuit să vezi linii care apar la granițele blocurilor, care dispar atunci când se folosește filtrarea triliniară. În plus, atunci când utilizați filtrarea triliniară, distorsiunile și neregularitățile în timpul mișcării și la schimbarea unghiului de vizualizare sunt mai bine eliminate. Mai jos este o diagramă a modului în care este utilizată și în acțiune filtrarea triliniară.

Trebuie remarcat faptul că unele defecte apar la o distanță considerabilă chiar și atunci când se utilizează filtrarea triliniară. Acest lucru se datorează faptului că a fost conceput inițial pentru a reduce distorsiunea dintre nivelurile hărții mip.

Imaginea este obținută cu o calitate foarte bună doar la unghiuri de vizualizare mai directe; cu desenul real, formele geometrice ale obiectului pot fi perturbate. Uită-te la poza de la SGI:

Filtrare anisotropic

Forma obiectelor texturate, atât în ​​timpul filtrării biliniare, cât și triliniare, poate fi distorsionată, deoarece Ambele filtre sunt izotrope - imaginea este filtrată într-o anumită formă - în formă de pătrat. Majoritatea obiectelor generate nu se potrivesc acestei forme specifice și neschimbate: pentru prelucrarea lor de înaltă calitate, este necesar să se folosească un alt tip de filtrare - anizotrop. Anizotropia constă din mai multe cuvinte în latină și înseamnă literal "Ani" - nu, "iso" - o anumită formă și "tropia" - model - i.e. modele de formă nedeterminată. Numele acestei tehnologii reflectă implementarea sa tehnică. Filtrarea anizotropă operează de obicei pe cel puțin 8 texeli, niveluri mip-hartă în toate direcțiile și utilizează un model cu o formă predeterminată. Ca urmare, zgomotul și distorsiunea obiectelor sunt eliminate, iar imaginea în ansamblu este de o calitate mai bună.

Comparați două imagini: una a folosit filtrarea anizotropă de 16 texeli, care a eliminat distorsiunile dintre nivelurile hărții mip și zgomotul imaginii; a doua imagine avea filtrarea anizotropă dezactivată.

Atenție la distanțele mari ale imaginii: diferențele dintre filtrarea anizotropă și cea izotropă sunt evidente. Calitatea texturii cu filtrare anizotropa ramane asemanatoare cu cea originala chiar si la distante mari; Cu filtrarea izotropă, există tendința de a „netezi” imaginea, rezultând o pierdere a calității. Filtrarea anizotropă, ca și filtrarea triliniară, reduce neuniformitatea texturii. Dar atunci când utilizați filtrarea anizotropă, calitatea este încă mai bună, deoarece folosește un număr mult mai mare de blocuri pentru comparație. Iată un alt exemplu care arată filtrarea anizotropă în acțiune:

Multă vreme, plăcile grafice de calitate pentru consumatori nu au oferit calitatea imaginii posibilă cu filtrarea anizotropă. Odată cu apariția cipurilor grafice precum NVIDIA GeForce2 și ATI Radeon, a devenit posibilă utilizarea filtrării anizotrope, care analizează blocuri de 16 texeli în hardware. Plăcile video GeForce3 și Radeon 8500 folosesc deja filtrarea anizotropă de 32 texel. Imaginea de mai jos arată o imagine apropiată de ceea ce ar fi produs folosind filtrarea anizotropă profesională de 64 texel:

Viitor…

În viitorul apropiat, filtrarea anizotropă va fi folosită din ce în ce mai des. Noi tehnologii pentru eliminarea neregulilor și angularităților obiectelor sunt deja dezvoltate pentru următoarea generație de cipuri grafice. În viitorul apropiat vom vedea imagini procesate folosind blocuri multitexel. Vor exista plăci video capabile să suporte hardware pentru filtrarea anizotropă folosind blocuri de 128 texel. În același timp, calitatea imaginii se va îmbunătăți semnificativ, iar productivitatea va crește.

În plus:

Antialiasing și filtrare anizotropă astăzi: ce, unde și cât? Prima parte

De fapt, un articol cu ​​un astfel de titlu ar putea începe cu o oarecare platitudine precum „fiecare utilizator de computer a văzut la un moment dat funcționarea tehnicilor de îmbunătățire a imaginii 3D, cum ar fi filtrarea anti-aliasing sau anizotropă”. Sau aceasta: „în timp ce navele noastre spațiale ocupă spațiu, programatorii NVIDIA și ATI caută modalități de a îmbunătăți performanța tehnicilor binecunoscute de îmbunătățire a imaginii.” A doua banalitate are o șansă mult mai mare de a trăi, în sensul că deja intriga cu o oarecare aparență a faptului că vom investiga cine și cum și-au „optimizat” șoferii.

Cu toate acestea, probabil ne vom lipsi deloc de platitudini. Pentru că este mult mai interesant să speculăm cu privire la modul în care tehnicile de îmbunătățire a imaginii accesibile au devenit acum pentru utilizatorul obișnuit sau, mai corect, pentru jucătorul obișnuit. Jucătorii de astăzi sunt cei mai activi consumatori ai tuturor noilor tehnologii și inovații în 3D. În general, un accelerator 3D puternic este astăzi necesar exclusiv pentru a juca cele mai recente jocuri pe computer cu motoare 3D puternice care funcționează cu shadere complexe de diferite versiuni. În zilele noastre nu vei surprinde pe nimeni cu un joc cu pixel shaders versiunea 2.0 - în lumea jocurilor, o astfel de distracție devine încet o întâmplare de zi cu zi. Majoritatea jocurilor sunt încă lansate folosind modelul de shader 1.1 datorită faptului că cel mai important lucru pentru dezvoltatorii de jocuri este să se asigure că jocul lor rulează destul de bine pe hardware-ul pe care marea majoritate a jucătorilor îl au. A face acum un motor super sofisticat este o mare risipă și chiar un risc. Judecați singuri: dezvoltarea unui motor din clasa „Doom 3” sau „Half-Life 2” (ei bine, să adăugăm aici pionierul shaders 2.0 în toată gloria sa, creația lui Crytek – „FarCry”, pentru a obține o adevărată trinitate omniprezentă) necesită o perioadă uriașă de timp, ceea ce aduce dificultăți suplimentare de dezvoltare - este necesar să se dezvolte motorul într-un astfel de interval de timp încât inovațiile și dezvoltările originale să nu devină depășite în timpul creării motorului.

Dacă vă îndoiți că acest lucru s-ar putea întâmpla, atunci este complet în zadar - în cazul „Half-Life 2” totul a fost exact așa (și „Doom 3” a fost dezvoltat cu ochii pe GeForce 3 și a fost lansat când GeForce FX). De asemenea, dezvoltarea motoarelor din această clasă este asociată cu costuri mari de dezvoltare: programatorii talentați nu sunt ieftini astăzi. Și recent, s-a acordat multă atenție (chiar mai mult decât este necesar) „politicii” în raport cu motoarele de joc.

Da, da, așa e, ați auzit bine, domeniul 3D are de multă vreme propria politică, bazată, firesc, pe interesele celor doi giganți în proiectarea procesoarelor grafice: ATI și NVIDIA. Harsh Canada se luptă de multă vreme împotriva însoritei Californie și până acum nu se vede un sfârșit pentru această confruntare, care, desigur, ne avantajează doar pe noi, consumatorii obișnuiți. Acum nu este suficient să dezvolți un motor cool - pentru a avea succes, trebuie să obții sprijinul fie al divei californiane NVIDIA, fie al canadianului ATI, din fericire, acum atât primul, cât și al doilea au propriile programe de parteneriat pentru dezvoltatorii de jocuri. NVIDIA numește un astfel de program „Modul în care este menit să fie jucat”, iar ATI îl numește „Intră în joc”. Totul este destul de elocvent și clar: NVIDIA spune că „trebuie să joci așa” și nu deloc așa, iar ATI asigură că vom obține cu siguranță tot ce ne dorim în jocul în sine. Destul de tentant, nu-i așa? Motoarele sunt din clasa „Doom 3” și „Half-Life 2” (în cazul dintre acestea din urmă, motorul se numește Sursă, cu toate acestea, pentru ușurință de înțelegere, îl vom numi „Half-Life 2” pentru a menține asocierea corectă) și au fost dezvoltate inițial în strânsă cooperare cu inginerii de la producătorii de cipuri grafice, astfel încât jocurile ar funcționa mai bine pe GPU-ul unui producător.

Prin urmare, după cum putem vedea, revoluțiile în domeniul noilor motoare grafice 3D sunt foarte problematice și, prin urmare, aceste revoluții în lumea motoarelor de joc nu se întâmplă foarte des. Cu toate acestea, calitatea imaginii trebuie îmbunătățită într-un fel. Dacă pur și simplu creștem numărul de poligoane din cadru, obținând astfel o imagine vizual mai frumoasă de perceput, atunci în cele din urmă vom ajunge la punctul în care acceleratorul nu va putea procesa scena cu un nivel acceptabil de rată a cadrelor. , dar tot va lipsi ceva din imagine. Scările de pixeli vor rămâne în continuare, iar calitatea texturilor nu se va îmbunătăți. Există modalități mai puțin evidente de a îmbunătăți calitatea unei imagini tridimensionale pe un monitor - filtrare anizotropă și antialiasing. Aceste tehnici de îmbunătățire a imaginii nu au nicio legătură directă cu motorul 3D în sine și, desigur, nu pot face motorul în sine mai frumos, dar pot lucra cu texturi și imagini în așa fel încât la ieșire, adică pe monitor, putem vedea o imagine vizual mai frumoasă și mai blândă.

În domeniul filtrării anizotrope și al antialiasing are loc o cantitate colosală de optimizare a driverelor atât din partea NVIDIA, cât și din partea ATI. Companiile au abordări și politici diferite cu privire la aceleași optimizări, uneori nu complet corecte pentru utilizatori. Cu toate acestea, articolul nostru este tocmai menit să înțeleagă ce este bine și ce este rău în abordările ambelor companii producătoare de GPU și ce poate îmbunătăți calitatea imaginii în jocurile 3D de astăzi.

Ce este anti-aliasing și pentru ce se folosește?

Înainte de a începe să intrăm în detalii cu privire la un astfel de subiect arzător precum optimizarea anti-aliasing și diverse tipuri de filtrare a texturii, nu va strica (și chiar să spunem că este necesar) să dobândim câteva cunoștințe teoretice despre subiectul conversației noastre de astăzi.

Deci, antialiasing - ce este și de ce este nevoie? În primul rând, în cuvântul „antialiasing” este necesar să se evidențieze partea din acesta – „anti”. Este foarte clar că această parte a cuvântului implică faptul că însuși fenomenul „anti-aliasing” are ca scop combaterea a ceva. După cum ați putea ghici, în cazul nostru – cu „aliasing”. Prin urmare, în acest moment este important pentru noi să înțelegem clar ce este notoriu „aliasing”.

În primul rând, trebuie să înțelegeți clar că imaginea pe care tu și cu mine o putem vedea în fiecare zi pe ecranele monitoarelor noastre constă din așa-numitele particule mici, care sunt denumite în mod obișnuit pixeli. O analogie bună în acest sens este exemplul hârtiei în carouri. Imaginea de pe monitor este aceeași hârtie în carouri, doar că în acest caz sunt foarte, foarte mici. Dacă se spune că rezoluția ecranului este de 1024x768 cu culoare pe 32 de biți, asta înseamnă că 1024 de pixeli se potrivesc pe orizontală pe monitor, iar pe verticală 768. Mai mult, fiecare pixel poate fi vopsit cu o culoare dintre cele disponibile în paleta de 32 de biți. În momentul de față, culoarea pe 32 de biți este limita a ceea ce putem realiza pe ecranul unui computer. Cele mai bune minți ale umanității (același Carmack) vorbesc deja despre necesitatea trecerii la culoarea pe 64 de biți și subliniază dezavantajele evidente ale paletei de 32 de biți. La un moment dat, la trecerea de la culoarea pe 16 biți la 32 de biți, această nevoie era destul de clar justificată și existau motive reale pentru care ar merita să treceți la 32 de biți. Trecerea la culoarea pe 64 de biți astăzi este destul de exagerată. La fel ca și în cazul celor 16 și 32 de biți, în timp util va trebui să așteptați destul de mult până când acceleratorii de toate nivelurile vor putea procesa culoarea pe 64 de biți la o viteză acceptabilă.

Marea majoritate a articolelor care abordează într-un fel sau altul principiile construirii imaginilor în 3D și în care se vorbește despre antialiasing sunt pline de un exemplu simplu, dar în același timp cel mai eficient, care poate fi folosit pentru a înțelege destul de bine ce este antialiasing. Priviți inscripția „Upgrade” mărită, realizată în Word și apoi pur și simplu mărită în Photoshop. Nu arată foarte bine, nu-i așa? Pe părțile laterale ale literelor puteți vedea așa-numitul pieptene sau, așa cum este numit și „scara”. În esență, acest „pieptene” sau „scara” este aliasing. Un alt exemplu poate fi reprezentat de un obiect geometric, cum ar fi o piramidă. Același „pieptene” este, de asemenea, clar vizibil de-a lungul marginilor sale. Acum uită-te la o altă imagine a aceleiași piramide, dar cu o rezoluție de două ori mai mare. Arată deja mult mai bine, iar „pieptene” este aproape invizibil. După cum am menționat mai sus, acest efect, de netezire a „pieptenelui”, a fost obținut datorită faptului că am mărit rezoluția de 2 ori.

Ce înseamnă acest lucru? Să presupunem că am redat o piramidă cu o rezoluție de 200x200 pixeli (mai sus am clarificat deja în detaliu întrebarea ce sunt pixelii și de ce sunt necesari aceștia). Am crescut numărul de puncte pe verticală și pe orizontală de exact 2 ori, adică am obținut o imagine cu o rezoluție de 400 pixeli pe verticală și 400 pixeli pe orizontală. Aceasta înseamnă, de asemenea, că numărul de puncte de pe obiectul nostru care a fost în scenă s-a dublat. Ce a făcut acest lucru pentru efectul nostru de alias? Evident, a devenit minim, adică netezit - la urma urmei, și numărul de puncte de-a lungul marginilor obiectului s-a dublat. Cuvântul „netezit” este cheia aici. La urma urmei, anti-aliasing este altfel numit anti-aliasing, care reflectă însăși esența tehnologiei, care netezește acea „scăriță” de-a lungul marginilor obiectelor tridimensionale.

De fapt, după creșterea rezoluției, „scara” de la marginea piramidei nu a dispărut - rămâne acolo ca înainte. Cu toate acestea, datorită faptului că am mărit rezoluția (ceea ce înseamnă o creștere a pixelilor cheltuiți pentru afișarea piramidei), efectul „scării” a fost netezit din cauza particularităților viziunii umane, care nu mai vede clar pixelii. la marginea unui obiect. Este absolut clar că dacă măriți rezoluția din ce în ce mai mult, efectul de aliasing va fi observat într-o măsură din ce în ce mai mică. Mai precis, ochiul uman va începe să-l observe într-o măsură din ce în ce mai mică, deoarece efectul de aliasing în sine nu va dispărea. Dar este și absolut clar că nu se va putea mări rezoluția la infinit, deoarece monitoarele, chiar și cele mai moderne, au rezoluții finite, și nu atât de mari, ceea ce nu ne va permite să creștem constant numărul de puncte. Mai simplu spus, cel mai simplu efect de antialiasing poate fi obținut prin simpla creștere a rezoluției ecranului, dar rezoluția nu poate crește la infinit. S-ar părea că nu există nicio ieșire? Cu toate acestea, în realitate a fost găsit și se bazează pe aceeași caracteristică a viziunii umane.

Acest lucru a fost realizat datorită tranzițiilor netede ale culorilor din imagine. De fapt, îmbunătățirea vizuală a imaginii se face nu datorită creșterii fizice a rezoluției, ci datorită, ca să spunem așa, creșterii culorii a rezoluției. În acest articol nu vom descrie algoritmi pentru calcularea acestor puncte și nu vom intra în profunzimea calculelor matematice, ci vom vorbi doar despre principiul de funcționare a unei astfel de antialiasing. Scara de la granițele obiectelor este vizibilă doar pentru că cel mai adesea marginile obiectelor tridimensionale ies destul de puternic în culoare față de restul imaginii și apar ca linii subțiri de un pixel. Acest lucru poate fi compensat prin plasarea unui număr de puncte cu culori calculate din valorile de culoare ale marginii în sine și punctele din apropierea acelei margini. Adică, dacă marginea unui obiect este neagră și fundalul este alb, atunci punctul suplimentar de lângă linia de margine neagră va deveni gri. Cu cât sunt mai multe dintre aceste puncte suplimentare lângă marginea oricărui obiect 3D, cu atât marginile acestuia vor arăta mai netede și cu atât scara va fi mai puțin vizibilă. Această metodă se numește edge antialiasing. Calitatea antialiasing, setată în driverul plăcii video, cum ar fi: 2x, 4x, 6x, 8x înseamnă numărul de pixeli suplimentari plasați în jurul liniei care necesită antialiasing.

Filtrarea anizotropă: un mini program educațional pentru începători

Pentru a înțelege ce este filtrarea, trebuie să aveți cunoștințe de bază. Am aflat deja că imaginea de pe ecran constă din mulți pixeli, al căror număr este determinat de rezoluție. Pentru a scoate o imagine color, placa dvs. grafică trebuie să detecteze culoarea fiecărui pixel. Culoarea sa este determinată de suprapunerea imaginilor de textură pe poligoane care sunt situate în spațiul tridimensional. Imaginile cu textură constau din pixeli, sau mai degrabă texeli, adică un texel este un pixel al unei imagini bidimensionale suprapuse pe o suprafață 3D. Principala dilemă este aceasta: ce texel sau texeli determină culoarea unui pixel de pe ecran. Pentru a ne imagina problema de filtrare, să ne imaginăm o imagine. Să presupunem că ecranul este o placă cu multe găuri rotunde, fiecare dintre acestea fiind un pixel. Pentru a determina ce culoare are un pixel în raport cu scena tridimensională situată în spatele plăcii, trebuie doar să te uiți printr-una dintre găuri.

Acum imaginați-vă o rază de lumină care trece printr-una dintre găuri și lovește poligonul nostru texturat. Dacă acesta din urmă este situat paralel cu orificiul prin care trece fasciculul de lumină, atunci punctul luminos va avea forma unui cerc. În caz contrar, dacă poligonul nu este paralel cu gaura, punctul luminos este distorsionat și are o formă eliptică. Credem că mulți cititori în acest moment pun o întrebare: „cum sunt toate aceste plăci, o gaură, un fascicul de lumină legate de problema determinării culorii unui pixel?” Atenţie! Fraza cheie: toate poligoanele situate în punctul luminos determină culoarea pixelului. Toate cele de mai sus sunt cunoștințele de bază necesare pentru a înțelege diferiți algoritmi de filtrare.

Și acum, pentru a înțelege mai bine de ce este nevoie de filtrare, să ne uităm la procesele care au loc folosind exemplul legendarei „Quake 3 Arena”. Imaginați-vă un fel de coridor cu multe pătrate și diverse ornamente (din fericire, Quake 3 Arena are destule de asta). Ornamentul de la începutul coridorului este foarte detaliat, iar mai aproape de sfârșitul coridorului (orizontului) elementele ornamentului devin din ce în ce mai mici, adică. sunt afișate cu mai puțini pixeli. Ca urmare, detalii precum cusăturile dintre elementele ornamentului se pierd, ceea ce, în consecință, duce la o deteriorare a calității imaginii.

Problema este că driverul plăcii grafice nu știe ce detalii din textură sunt importante.

Eșantionarea punctului

Eșantionarea punctelor este cea mai simplă modalitate de a determina culoarea unui pixel. Acest algoritm se bazează pe o imagine de textură: este selectat doar un texel, care este cel mai aproape de centrul punctului de lumină, iar culoarea pixelului este determinată din acesta. Nu este greu de ghicit că acest lucru este complet greșit. În primul rând, culoarea unui pixel este determinată de mai mulți texeli și am selectat doar unul. În al doilea rând, forma punctului de lumină se poate modifica, iar algoritmul nu ține cont de acest lucru. Dar în zadar!

Principalul dezavantaj al eșantionării în linie este faptul că atunci când poligonul este situat aproape de ecran, numărul de pixeli va fi semnificativ mai mare decât texelii, din cauza căruia calitatea imaginii va avea de suferit foarte mult. Așa-numitul efect de blocare, după cum credem, mulți l-ar putea observa în vechile jocuri pe computer, de exemplu, în același legendar „Doom”.

Eșantionarea punctelor are un avantaj. Datorită faptului că determinarea culorii unui pixel se realizează folosind doar un texel, această metodă nu este critică pentru lățimea de bandă a memoriei, iar aceasta oferă automat acestei metode de filtrare beneficii enorme în sensul că foarte puține resurse ale acceleratorului 3D sunt cheltuiți pentru filtrarea utilizând această schemă.

Filtrare bi-liniară

Bi-Linear Filtering – filtrare biliniară bazată pe metoda de utilizare a tehnologiei de interpolare. Pentru a determina texelii necesari, se folosește forma de bază a punctului de lumină, adică un cerc. În exemplul nostru de cerc, acesta din urmă este aproximat cu 4 texeli. După cum puteți vedea, lucrurile sunt puțin mai bune aici decât cu Point Sampling. Filtrarea biliniară utilizează deja 4 texeli.

Imaginea este de calitate superioară, nu există blocare, dar poligoanele apropiate de ecran par neclare, iar acest lucru se datorează faptului că interpolarea necesită un număr mai mare de texeli decât cei patru disponibili.

Vagul nu este în niciun caz principala problemă a filtrării biliniare. Cert este că aproximarea se realizează corect doar pentru obiectele situate paralel cu ecranul sau punctul de observare, în timp ce 99% dintre obiectele din orice joc pe calculator sunt situate neparalel cu punctul de observare. Din aceasta putem concluziona că 99% dintre obiecte vor fi aproximate incorect. Să luăm, de exemplu, cercul nostru - poligonul este situat neparalel față de punctul de observație, prin urmare, ar trebui să aproximăm o elipsă, dar aproximăm un cerc, ceea ce este extrem de incorect. În plus, filtrarea biliniară este mult mai solicitantă pentru lățimea de bandă a memoriei, ceea ce, în general, este mai mult decât logic, având în vedere că filtrarea biliniară folosește deja 4 texeli pentru a determina culoarea unui pixel.

Judecând după informațiile de pe forumuri și articole de pe Internet, ATI joacă feste cu filtrarea texturii triliniare pe noul GPU X800. Cu toate acestea, există și cei care apără cu înverșunare ATi. În general, astfel de discuții ne amintesc de scandalul legat de nVidia de acum un an.

Motivul unei discuții atât de aprinse a fost un articol de pe site-ul german Computerbase. Acesta a arătat cum ATI folosește filtrarea optimizată a texturii triliniare, numită adesea „brilinear” datorită amestecului său de filtrare biliniară și triliniară, pe GPU-urile Radeon 9600 și X800. Vestea a fost cu adevărat uimitoare, deoarece ATI a vorbit întotdeauna despre utilizarea filtrelor triliniare adevărate.

Dar cum arată cu adevărat situația? Este aceasta o optimizare, un truc sau doar o soluție inteligentă? Pentru a judeca, trebuie să ne adâncim în tehnologia din spatele diferitelor metode de filtrare. Și prima parte a articolului va fi dedicată exact acestui lucru și vom prezenta câteva tehnologii într-o manieră foarte simplificată pentru a le încadra în câteva pagini. Deci, să aruncăm o privire la funcțiile de bază și fundamentale ale filtrării.

Va exista o continuare? Poate, din moment ce controversa cu privire la filtrarea brilineară recent descoperită pe cardurile Radeon 9600 și X800 continuă. ATi ar trebui să primească credit pentru faptul că calitatea imaginii cardurilor nu suferă vizual din cauza acestei filtre. Cel puțin nu avem exemple care să sugereze altfel. Până acum, filtrarea briliniară se manifestă în condiții de laborator create artificial. În același timp, ATi nu vă permite să activați filtrarea triliniară completă pentru cardurile menționate, fie el adaptiv sau nu. Datorită noului filtrare, valorile de performanță din teste nu arată întregul potențial al X800, deoarece valorile FPS sunt obținute după optimizare, al căror impact asupra vitezei este greu de evaluat. Și cuvântul „adaptativ” lasă un gust amar. ATI nu ne-a furnizat nicio informație despre modul în care funcționează driverul și a declarat de multe ori că cardul oferă filtrare triliniară completă. Abia după dezvăluirea menționată mai sus, ATi a recunoscut că filtrarea fusese optimizată. Să sperăm că nu există o astfel de „adaptabilitate” în alte locuri în șofer.

Cu toate acestea, producătorii se îndreaptă încet, dar sigur, către punctul în care nivelul de toleranță va fi depășit. „Adaptivitate” sau definiția aplicației care se lansează nu permite programelor de benchmark să arate performanța reală a cardului în jocuri. Calitatea imaginii jocului poate varia de la un driver la altul. Producătorii sunt liberi să se distreze cu șoferul, în funcție de ce performanță are nevoie departamentul de marketing la momentul respectiv. Ei bine, dreptul consumatorului de a ști ce cumpără de fapt nu mai interesează pe nimeni de aici. Toate acestea sunt lăsate în seama presei - lăsați-le să-și îndeplinească misiunea educațională. Iar trucurile de filtrare pe care le-am discutat în articolul nostru sunt doar cele mai cunoscute astfel de cazuri. Ce altceva este ascuns atenției noastre, se poate doar ghici.

Fiecare producător decide singur ce nivel de calitate a imaginii va oferi ca standard. Cu toate acestea, producătorii ar trebui să documenteze optimizările pe care le folosesc, mai ales dacă sunt ascunse de benchmark-urile cunoscute, ca în exemplul recent ATI. Soluția este evidentă: dați posibilitatea de a dezactiva optimizările! Atunci consumatorul va putea decide singur ce este mai important pentru el - mai multe FPS sau o calitate mai bună. Nu te poți baza nici pe Microsoft ca arbitru. Testele WHQL nu măsoară multe lucruri și pot fi ocolite cu ușurință: cunoașteți semnificația cuvântului „responsive”?

Optimizări de filtrare cunoscute în prezent
ATi nVidia
Triliniar
optimizare
R9600
X800
GF FX5xxx
(GF 6xxx)*
Optimizare unghiulară
filtrare anisotropic
R9xxx
X800
GF 6xxx
Adaptiv
filtrare anisotropic
R9xxx
X800
GF FX5xxx
GF 6xxx
Optimizarea etapei R9xxx
X800
GF FX5xxx
Optimizarea LOD R9xxx
X800(?)

În general, astfel de discuții au beneficiile lor: cumpărătorii și, eventual, clienții OEM încep să asculte problema. Nu avem nicio îndoială că mania pentru optimizarea nestăpânită va continua. Cu toate acestea, o rază de lumină a apărut în regatul întunecat, ceea ce a fost demonstrat clar de nVidia cu optimizarea sa triliniară. Sa speram in urmatorii pasi similari!

CATEGORII

ARTICOLE POPULARE

2023 „kingad.ru” - examinarea cu ultrasunete a organelor umane