Skip to main content

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 behandlas 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 1 byte långt 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 upprätthå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 varaTillämpas på en tredimensionell (3D) scen när topparna 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, kan det toppunktet ignoreras och resten av dess rörledningsbearbetning hoppade över.Detta tillät programmerare ett sätt att endast göra små delar av en scen eller göra en bild till en oregelbundet formad utsiktsport, till exempel en reflektion i en liten spegel i en större scen, där spegelns form dras som en stencil ibuffert, och sedan dras reflektionen 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 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 göra det möjligt att använda bufferten 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 skapar 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, vilket effektivt skapar en bild som verkar innehålla föremål med skuggor.