Vad är en stencilbuffert?

I datorgrafikprogrammering ä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 göras. 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 en byte lång högst men kan vara så liten 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 på olika regioner i stencilbufferten till ett annat värde än noll. Det finns ett antal användningsområden för bufferten utöver enkel maskering, inklusive att rita en skuggvolym, implementera halo runt föremål eller lokalisera områden där föremål överlappar varandra. I många fall underhålls bufferten i grafikminnet på ett grafikkort så att det snabbt kan nås 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 grafikpipeline. Om platsen för 3D -toppunkten, en gång rasteriserad, relaterad till ett område i stencilbufferten som inte var inställd på noll, kunde det toppunktet ignoreras och resten av dess rörledningsbearbetning hoppade över. Detta tillät programmerare ett sätt att bara göra små delar av en scen eller att göra en bild till en oregelbundet formad utsiktsport, till exempel en reflektion i en liten spegel inom en större scen, där spegelns form dras som en stencil i bufferten, och sedan reflektionen dras genom den formen.

Minnesproblem ledde till att den ursprungliga formen av en stencilbuffert var ett rutnät med enkelbitvärden där varje pixel i bufferten bara kunde vara sant eller falsk. När grafikkort utvecklasED, de flesta buffertar kunde hålla ett fullt bytevärde på varje pixelplats, vilket gjorde att programmerare kunde ha mer komplexa värden på en plats. Detta kan göra det möjligt att användas för att upptäcka områden där objekt överlappar varandra, vilket kan göras genom att öka buffertens värde på en plats om ett objekt upptar den pixeln på skärmen när de rasteriseras. Efter denna operation kommer värdet på varje pixelplats i bufferten att motsvara antalet objekt som korsar den 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å allt verkar vara skuggat. Därefter görs beräkningar för att bestämma platsen för alla polygonytor i scenen som är upplysta av en ljuskälla, och dessa former överförs till stencilbufferten. Scenen återges igen som om varje objekt är helt upplyst och blandas genom stencilformerna på den skuggade scenen, EFSkapa 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?