Skip to main content

Wat is een stencilbuffer?

In computerafbeeldingen programmeren is een stencilbuffer een geheugengebied dat kan worden aangetrokken en gebruikt in relatie tot andere grafische buffers om verschillende effecten te bereiken, of om gebieden van een scène te maskeren, zodat ze niet worden verwerkt of weergegeven.Een stencilbuffer is een buffer per pixel vergelijkbaar met een zwart-witafbeelding, waarin elke locatie in de buffer een waarde kan bevatten die meestal 1 byte lang is, maar zo klein als 1 bit kan zijn.De buffer is oorspronkelijk ontworpen om te fungeren als een waar of vals masker, net als een real-world stencil, zodat gebieden van een scène kunnen worden verdoezeld of genegeerd door de waarden van verschillende regio's van de stencilbuffer in te stellen op een andere waarde dan nul.Er zijn een aantal toepassingen voor de buffer die verder gaat dan eenvoudige maskering, inclusief het tekenen van een schaduwvolume, het implementeren van halo's rond objecten of het lokaliseren van gebieden waar objecten elkaar overlappen.In veel gevallen wordt de buffer in het grafische geheugen op een grafische kaart gehandhaafd, zodat deze snel toegankelijk is tijdens het renderen.

Het concept van een stencilbuffer was oorspronkelijk een manier om een tweedimensionaal (2D) masker te maken dat zou kunnen zijnToegepast op een driedimensionale (3D) scene terwijl de hoekpunten door de grafische pijplijn bewogen.Als de locatie van het 3D -hoekpunt, eenmaal rasterde, gerelateerd aan een deel van de stencilbuffer die niet op nul was ingesteld, dan kon dat hoekpunt worden genegeerd en de rest van de pijplijnverwerking overgeslagen.Hierdoor konden programmeurs een manier om slechts kleine delen van een scène te maken of een afbeelding weer te geven in een onregelmatig gevormd viewport, zoals een reflectie in een kleine spiegel in een grotere scène, waar de vorm van de spiegel wordt getrokken als een stencil in deBuffer, en vervolgens wordt de reflectie door die vorm getrokken.

Geheugenkwesties hebben ertoe geleid dat de oorspronkelijke vorm van een stencilbuffer een rooster was van enkele bit waarden waarin elke pixel in de buffer alleen waar of onwaar kon zijn.Naarmate de grafische kaarten ontwikkelden, konden de meeste buffers een volledige byte -waarde vasthouden op elke pixellocatie, waardoor programmeurs meer complexe waarden op een locatie konden hebben.Hierdoor kan de buffer worden gebruikt om gebieden te detecteren waar objecten elkaar overlappen, wat kan worden gedaan door de waarde van de buffer op een locatie te verhogen als een object die pixel op het scherm bezet wanneer het wordt gerasterd.Na deze bewerking is de waarde van elke pixellocatie in de buffer gelijk aan het aantal objecten dat die pixel op een scherm kruist.

Een van de meest populaire toepassingen voor een stencilbuffer creëert volume schaduwen.Dit kan worden gedaan door eerst een scène met zeer vage verlichting weer te geven, zodat alles in de schaduw lijkt te zijn.Vervolgens worden berekeningen gemaakt om de locatie van alle polygoonoppervlakken in de scène te bepalen die worden verlicht door een lichtbron, en deze vormen worden overgebracht naar de stencilbuffer.De scène wordt opnieuw weergegeven alsof elk object volledig wordt aangestoken en wordt gemengd door de stencilvormen op de schaduwde scène, waardoor een afbeelding effectief wordt gecreëerd die objecten met schaduwen lijkt te bevatten.