Afbeeldingsbuffers op de GPU: typen, aard en kenmerken

Afbeeldingsbuffers op de GPU

Heeft u zich ooit afgevraagd waar de afbeeldingen die u op het scherm van uw pc, console of PostPC-apparaten ziet, zijn opgeslagen? Welnu, in beeldbuffers, maar wat is hun aard en waaruit bestaat het? Hoe beïnvloedt het de prestaties van onze pc's, welke vormen van weergave van een scène bestaan ​​er en wat zijn de verschillen?

A GPU genereert een enorme hoeveelheid informatie per seconde, in de vorm van meerdere beelden die vanaf de televisie snel op ons netvlies passeren, de grootte van deze beelden en de informatie die wordt opgeslagen en verwerkt is enorm. Beeldbuffers die worden opgeslagen in VRAM zijn een van de redenen waarom geheugen met hoge bandbreedte vereist is.

Wat is de afbeeldingsbuffer?

Buferes de Imagen

De beeldbuffer is een onderdeel van de VRAM waar de informatie van elke pixel op het scherm van het volgende frame wordt opgeslagen, deze buffer wordt opgeslagen in de VRAM en wordt elke x milliseconden gegenereerd door de GPU.

Huidige GPU's werken met minimaal twee beeldbuffers, in de eerste schrijft de GPU het volgende frame dat op het scherm te zien zal zijn, in de tweede is het vorige frame al gegenereerd, dat naar het scherm wordt gestuurd.

Buferes de Imagen

Backbuffer of achterbuffer wordt degene genoemd die wordt gegenereerd door de GPU en Frontbuffer of frontbuffer is degene die wordt gelezen door het beeldschermstuurprogramma en naar de video-uitgang wordt gestuurd. Terwijl de voorste buffer voor elke pixel de waarde van de rode, groene en blauwe componenten opslaat, kan deze in de achterste buffer een vierde component, alpha, opslaan die de transparantie of semi-transparantiewaarde van een pixel opslaat.

Wat is het beeldschermstuurprogramma?

Het beeldschermstuurprogramma is een stuk hardware dat in de GPU wordt aangetroffen, het is verantwoordelijk voor het lezen van de beeldbuffer in de VRAM en het omzetten van de gegevens in een signaal dat de video-uitvoer, ongeacht het type, kan begrijpen.

In systemen zoals NVIDIA G-SYNC, AMD FreeSync / Adaptive Sync en dergelijke, de beeldschermcontroller stuurt niet alleen gegevens naar de monitor of televisie, maar bepaalt ook wanneer elk frame begint en eindigt.

Afbeeldingsbuffers en traditionele 3D-rendering

Hoewel onze schermen in 2D zijn, worden er al meer dan twintig jaar in realtime 3D-scènes op weergegeven. Om dit te doen, is het nodig om de backbuffer in twee gedifferentieerde buffers te verdelen:

  • Kleurbuffer: waar de waarde van de kleur- en alfa-componenten van elke pixel wordt vermeld.
  • Dieptebuffer: waar de dieptewaarde van elke pixel wordt aangegeven.

Bij het renderen van een 3D-scène kunnen we ontdekken dat verschillende pixels verschillende waarden hebben in de dieptebuffer, maar zich op dezelfde plaats in de andere twee dimensies bevinden, dit is waar die extra pixels moeten worden weggegooid omdat ze niet zichtbaar zijn. weggooien gebeurt door de positie van elke pixel in de dieptebuffer te vergelijken en de pixels die het verst van de camera verwijderd zijn, weg te gooien.

De dieptebuffer

Afbeelding van de afbeelding van Z-Buffer

De dieptebuffer of beter bekend als Z-Buffer slaat de afstand van elke pixel van een 3D-scène op ten opzichte van het gezichtspunt of de camera, deze kan op een van deze twee momenten worden gegenereerd.

  • Na de rasterstap en vóór de textuurfase.
  • Na de textuurfase.

Aangezien de meest rekenkundig zware fase die van de Pixel / Fragment Shader is, houdt het feit van het genereren van de Z-buffer net na het structureren van de scène in dat de kleurwaarde wordt berekend en dat daarom de Pixel of Fragment Shader van honderdduizenden en zelfs miljoen pixels niet zichtbaar is .

Transparanten Ray Tracing

De tegenhanger van het doen vóór texturen is dat we, door niet de waarden van kleur en transparantie, alfakanaal te hebben, kunnen ontdekken dat de ene pixel na de andere transparant vooraf wordt weggegooid, waardoor deze niet zichtbaar is in de laatste scène.

Om dit te voorkomen, renderen ontwikkelaars de scène meestal in twee delen, waarbij het eerste de objecten achter een transparant of semi-transparant object niet rendert, terwijl het tweede alleen die objecten weergeeft.

Beeldbuffering en luie weergave

Een van de nieuwigheden die aan het einde van de jaren 2000 werden gezien bij het renderen van afbeeldingen was uitgestelde rendering of uitgestelde rendering, wat erin bestond dat de scène eerst een reeks extra buffers genereerde, G-buffer genaamd, en vervolgens in een volgende stap de verlichting van de tafereel.

Het feit dat meerdere beeldbuffers nodig zijn, vergroot de geheugenbehoefte en vereist daarom een ​​grotere hoeveelheid geheugen voor opslag, evenals een opvullingspercentage en dus een grotere bandbreedte.

meerdere luces

Maar de luie weergave werd gedaan om een ​​van de prestatieproblemen van klassieke rastering te corrigeren, waarbij elke verandering in waarde in een pixel, of het nu gaat om luminantie of chrominantie, een herschrijving inhoudt in de beeldbuffer, wat zich vertaalt in een enorme hoeveelheid gegevens die in de VRAM moeten worden verzonden

Dankzij luie weergave gaan de kosten van het aantal lichten in de scène van exponentieel naar logaritmisch, waardoor de rekenkosten worden verlaagd bij het renderen van scènes met meerdere lichtbronnen.

Afbeeldingsbuffers als schaduwkaart

Mapas Sombras Z-buffer

Omdat rastering niet erg goed is in het berekenen van indirecte verlichting, moeten er trucs worden gevonden om daarin schaduwkaarten te genereren.

De eenvoudigste methode is om de scène weer te geven met de licht- of schaduwbron alsof het de camera is, maar in plaats van een volledig beeld weer te geven, wordt alleen de dieptebuffer gegenereerd, die later als schaduwkaart zal worden gebruikt.

Dit systeem zal de komende jaren verdwijnen door de opkomst van Ray Tracing, waarmee schaduwen in realtime op een veel preciezere manier kunnen worden gecreëerd, waarbij minder rekenkracht nodig is en zonder dat er een enorme schaduwkaart in VRAM hoeft te worden gegenereerd.