Vad är en stencilbuffert?

Vid programmering av datorgrafik är en stencilbuffert ett minnesområde som kan dras till och användas i förhållande till andra grafikbuffertar för att uppnå olika effekter eller för att maskera områden i en scen så att de inte kommer att bearbetas eller återges. En stencilbuffert är en per-pixelbuffert som liknar en svartvit bild, där varje plats i bufferten kan ha ett värde som oftast är 1 byte lång men kan vara så litet som 1 bit. Bufferten var ursprungligen utformad för att fungera som en sann eller falsk mask, ungefär som en verklig stencil, så områden i en scen kunde döljas eller ignoreras genom att ställa in värdena för olika regioner i stencilbufferten till ett annat värde än noll. Det finns ett antal användningar för bufferten utöver enkel maskering, inklusive ritning av en skuggvolym, implementering av glorier runt objekt eller lokalisering av områden där objekt överlappar varandra. I många fall bibehålls bufferten i grafikminnet på ett grafikkort så att det går åt snabbt under rendering.

Konceptet med en stencilbuffert var ursprungligen ett sätt att skapa en tvådimensionell (2D) mask som kunde appliceras på en tredimensionell (3D) scen när vertikalerna rörde sig genom grafikrörledningen. Om platsen för 3D-vertex, en gång rasteriserad, relaterad till ett område i stencilbufferten som inte var inställt på noll, kunde det toppet ignoreras och resten av dess rörledningsbehandling hoppas över. Detta tillät programmerare ett sätt att återge bara små delar av en scen eller att göra en bild till ett oregelbundet format, som en reflektion i en liten spegel i en större scen, där spegelns form ritas som en stencil i buffert, och sedan dras reflektionen genom den formen.

Minnehänsyn ledde till att den ursprungliga formen av en stencilbuffert var ett rutnät med enbitsvärden där varje pixel i bufferten bara kunde vara sant eller falskt. När grafikkort utvecklades, kunde de flesta buffertar hålla ett fullt bytevärde på varje pixelplats, vilket gjorde att programmerare kunde ha mer komplexa värden på en plats. Detta kan tillåta bufferten att användas för att detektera områden där objekt överlappar varandra, vilket kan göras genom att öka värdet på bufferten på en plats om ett objekt upptar den pixeln på skärmen när den rasteriseras. Efter denna operation kommer värdet på varje pixelplats i bufferten att motsvara antalet objekt som korsar pixeln på en skärm.

En av de mest populära användningarna för en stencilbuffert är att skapa volymskuggor. Detta kan göras genom att först göra en scen med mycket svag belysning så att allt verkar vara skuggat. Därefter görs beräkningar för att bestämma platsen för alla polygonytorna i scenen som är upplysta av en ljuskälla, och dessa former överförs till stencilbufferten. Scenen återges som om varje objekt är helt upplyst och blandas genom stencilformerna till den skuggade scenen, vilket effektivt skapar en bild som verkar innehålla objekt med skuggor.

ANDRA SPRÅK

Hjälpte den här artikeln dig? Tack för feedbacken Tack för feedbacken

Hur kan vi hjälpa? Hur kan vi hjälpa?