Bildbuffertar på GPU: typer, natur och egenskaper

Bildbuffertar på GPU: n

Har du någonsin undrat var bilderna du ser på skärmen på din PC, konsol eller PostPC-enheter lagras? Tja, i bildbuffertar, men vad är deras natur och vad består den av? Hur påverkar det prestanda för våra datorer, vilka former av rendering av en scen finns och vilka är deras skillnader?

A GPU genererar en enorm mängd information per sekund, i form av flera bilder som passerar snabbt på vår näthinna från TV: n, storleken på dessa bilder och informationen som lagras och bearbetas är enorm. Bildbuffertar på grund av att de lagras i VRAM är en av anledningarna till att minnet med hög bandbredd krävs.

Vad är bildbufferten?

Búferes de Imagen

Bildbufferten är en del av VRAM där informationen för varje pixel på nästa bilds skärm lagras, denna buffert lagras i VRAM och genereras av GPU var x millisekund.

Nuvarande GPU: er fungerar med minst två bildbuffertar, i den första skriver GPU: n nästa ram som kommer att visas på skärmen, i den andra är den tidigare bilden som redan genererats, som skickas till skärmen.

Búferes de Imagen

Backbuffer eller bakre buffert kallas den som genereras av GPU och Frontbuffer eller frontbuffert är den som läses av displaydrivrutinen och skickas till videoutgången. Medan den främre bufferten lagrar värdet på de röda, gröna och blå komponenterna för varje pixel, kan den i den bakre bufferten lagra en fjärde komponent, alfa, som lagrar transparens- eller halvtransparensvärdet för en pixel.

Vad är skärmdrivrutinen?

Skärmdrivrutinen är en maskinvara som finns i GPU: n, den har ansvaret för att läsa bildbufferten i VRAM och konvertera data till en signal som videoutmatningen, oavsett typ, kan förstå.

I system som NVIDIA G-SYNC, AMD FreeSync / Adaptive Sync och liknande skickar skärmkontrollen inte bara data till bildskärmen eller TV: n, utan styr också när varje bild börjar och slutar.

Bildbuffertar och traditionell 3D-rendering

Även om våra skärmar är i 2D, har 3D-scener i mer än tjugo år gjorts i realtid på dem. För att göra detta är det nödvändigt att dela tillbaka bufferten i två differentierade buffertar:

  • Färgbuffert: Där värdet på färg- och alfakomponenterna för varje pixel anges.
  • Djupbuffert: Där djupvärdet för varje pixel pekas.

När vi återger en 3D-scen kan vi upptäcka att flera pixlar har olika värden i djupbufferten men är på samma plats i de andra två dimensionerna, det är där dessa extra pixlar måste kasseras eftersom de inte syns av betraktaren kasseras görs genom att jämföra positionen för varje pixel i djupbufferten och kasta dem längst bort från kameran.

Djupbufferten

Bilder på Z-buffert

Djupbufferten eller bättre känd som Z-Buffer lagrar avståndet för varje pixel i en 3D-scen i förhållande till synvinkeln eller kameran, detta kan genereras i ett av dessa två ögonblick.

  • Efter rasterstadiet och före textureringssteget.
  • Efter textureringsfasen.

Eftersom det mest beräkningsmässigt tunga steget är Pixel / Fragment Shader, innebär faktumet att generera Z-Buffer strax efter textureringen av scenen att beräkna färgvärdet och därför är Pixel eller Fragment Shader på hundratusentals och till och med miljoner pixlar inte synliga .

Transparencias strålspårning

Motsatsen till att göra det innan texturering är att genom att inte ha värdena färg och transparens, alfakanal, kan vi upptäcka att en pixel efter en annan transparent kastas i förväg, vilket gör den inte synlig i den slutliga scenen.

För att undvika detta renderar utvecklare vanligtvis scenen i två delar, den första gör inte objekten bakom ett transparent eller halvtransparent objekt, medan den andra bara gör dessa objekt.

Bildbuffring och lat rendering

En av de nyheter som sågs i slutet av 2000-talet när grafik rendering var uppskjuten rendering eller uppskjuten rendering, som bestod av att först rendera scenen generera en serie ytterligare buffertar som kallas G-buffert och sedan beräkna belysningen i scen.

Det faktum att du behöver flera bildbuffertar multiplicerar kraven på minne och kräver därför en större mängd minne för lagring, såväl som en fyllningshastighet och därmed en högre bandbredd.

flera luces

Men den lata rendering gjordes för att korrigera ett av prestandaproblemen för klassisk rasterisering där varje förändring i värde i en pixel, oavsett om det beror på luminans eller krominans, innebär en omskrivning i bildbufferten, vilket innebär en enorm mängd data som ska överföras i VRAM

Tack vare lat rendering går kostnaden för antalet ljus i scenen från att vara exponentiell till logaritmisk, vilket minskar beräkningskostnaden vid rendering av scener med flera ljuskällor.

Bildbuffertar som skuggkarta

Mapas Sombras Z-buffert

Eftersom rasterisering inte är så bra för att beräkna indirekt belysning måste man hitta knep för att skapa skuggkartor i dem.

Den enklaste metoden är att återge scenen med ljus- eller skuggkällan som om den vore kameran, men istället för att återge en komplett bild genereras endast djupbufferten som kommer att användas senare som en skuggkarta.

Detta system kommer att försvinna under de närmaste åren på grund av ökningen av Ray Tracing, vilket gör det möjligt att skapa skuggor i realtid på ett mycket mer exakt sätt, vilket kräver mindre beräkningskraft och utan att man behöver generera en enorm skuggkarta i VRAM.