Texturinterpolation: Hur det påverkar GPU-prestanda

Texturinterpolation: Hur det påverkar GPU-prestanda

Sedan de första 3D-korten kom till datorn har det vi kallar texturinterpolering använts. Som ursprungligen användes för att undvika effekten av pixelering i scenens strukturer. Detta görs av en typ av enhet som kallas "texturhanteringsenheter" eller förkortas som texturenheter. Vi förklarar hur det påverkar prestanda för dina GPU: er.

En av de grundläggande delarna i varje GPU är texturenheten, som ansvarar för att placera en bild i triangeln i varje scen, en process som vi kallar texturering, men också vad vi kallar texturinterpolering.

Hur fungerar texturinterpolering?

filtro texturas enkelt

Texturinterpolering är en funktion som sträcker sig till strukturmappning, den består i att skapa färggradienter från en pixel till en annan för att eliminera effekten av pixelering i scenen. Det enklaste är filtret eller bilinear interpolation, som består av att ta de 4 pixlarna närmast varje pixel för att utföra interpolationsberäkningen.

Idag används mycket mer komplexa interpolationssystem än det bilinära filtret, som använder ett större antal pixlar per prov. Som det är fallet med det anisotropa filtret på olika nivåer som kan använda 8, 16 och till och med 32 sampel per pixel för att uppnå högre bildkvalitet.

Trots förekomsten av mer komplexa texturinterpoleringsalgoritmer är den stora majoriteten av grafisk hårdvara utformad för användning av det bilinära filtret, vilket är det billigaste och enklaste att implementera av alla på hårdvarunivå och uppnår resultat. att vi idag kan överväga gratis när det gäller beräkningskostnader.

Texturinterpolering och datacache

TFLOPS Velocidad GPU

När texturenheten utför polygonundervisningsprocessen, är det att leta efter färgvärdet som lagras i strukturen i minnet, tillämpa det på motsvarande pixel, utföra motsvarande beräkningar med den angivna skuggningen eller skuggaren och det slutliga resultatet skickas till ROPS så att den skrivs till bildbufferten.

Mitt i denna process utförs interpolering eller filtrering av texturer, men eftersom det är en upprepande och rekursiv uppgift. Detta görs av vad vi kallar texturenheten, som ansvarar för att utföra de olika filtren. För att göra detta kräver det en hög bandbredd som ökar med antalet samplingar som krävs per pixel, minst fyra gånger högre för varje text, vilket är vad som krävs för att utföra det bilinära filtret.

Texturenheterna i dagens grafikprocessorer grupperas fyra och fyra i varje skuggning eller beräkningsenhet. Detta innebär att 16 32-bitars åtkomst krävs per klockcykel per skuggsenhet. Det är därför datacache för samma enhet och dess bandbredd används för att utföra texturfiltrering.

Samtidigt, om det krävs ett texturfilter med högre precision eftersom varje texturenhet endast tar 4 sampel per klockcykel, är det nödvändigt att använda ett större antal klockcykler för att utföra mycket mer komplexa texturinterpoleringsalgoritmer, därigenom minska textureringshastigheten.

Beräkningskostnaden för texturinterpolering

NVIDIA GPU

I dag kan skuggningsenheter utföra en enorm mängd beräkningar per klockcykel, inte förgäves är de kapabla att utföra flera TFLOPS, FLOPS är flytpunktsoperationer och T motsvarar Tera-prefixet, vilket hänvisar till 10 ^ 12-operationer, så datorkraften hos GPU: erna har ökat enormt.

Idag kan interpolering av texturer utföras utan problem med hjälp av ett skuggprogram inuti GPU, vilket i teorin helt skulle spara införandet av texturenheter. Varför är detta inte gjort? Tja, på grund av det faktum att för att kompensera för förlusten av nämnda texturenheter skulle vi behöva öka kraften hos de beräkningsenheter som ansvarar för att utföra skuggorna på ett sätt som skulle bli mycket dyrare. Det vill säga att vi skulle behöva placera fler transistorer än vad vi skulle ha sparat, varför strukturenheterna fortsätter i GPU: erna efter mer än tjugo år sedan de första 3D-korten och de kommer inte att försvinna.

Det måste tas i beaktande att texturinterpoleringen utförs på ett sätt för alla texlar som bearbetas i scenen, vilket är enormt och speciellt om vi talar om höga upplösningar som 1440P eller 4K. Så det är inte lönsamt att ta bort dem från hårdvaran och all grafikhårdvara utan dem kommer att få stora prestandaproblem om den slipper dem, för att inte glömma att alla spel och applikationer redan tar sin existens för givet.

Nuvarande begränsningar av texturenheten

AMD VRAM GPU:er

När vi väl har förklarat dess användbarhet måste vi ta hänsyn till vilka begränsningar som gäller texturenheten för interpolering. Det vanliga strukturformatet är RGBA8888 där var och en av komponenterna har en 8-bitars precision och därför har 256 värden per färgkomponent.

Detta underlättar kraftigt implementeringen av texturinterpolering på hårdvarunivå. Eftersom även om varje texturenhet tar 32 bitar av varje pixel internt från datacachen, behandlas var och en av de fyra komponentkomponenterna separat, snarare än tillsammans.

Artefactos interpolación texturas

Problemen med detta genomförande? När texturenheten utför interpolering av var och en av de fyra komponenterna, använder den endast 4 värden, vilket trots att det underlättar implementeringen av texturinterpolering på hårdvarunivå minskar precisionen för de data som kan erhållas, för vad vi inte gör sluta med det perfekta resultatet för interpolering, men en approximation till det.

Denna brist på precision i kombination med det faktum att man använder få prover per pixel orsakar att många gånger i spelets texturer genereras bildartefakter som förgiftar den slutliga kvaliteten på scenen. Den bästa lösningen? Använda mycket mer komplexa interpoleringsmetoder som bikubisk interpolering, men detta innebär att hårdvaran tas till mycket högre nivåer av komplexitet än den är nu, eftersom detta skulle kräva fyra gånger bandbredden med datacache.