Wat is een stencilbuffer?
Bij het programmeren van computerafbeeldingen is een stencilbuffer een geheugengebied dat kan worden aangetrokken en gebruikt in relatie tot andere grafische buffers om verschillende effecten te bereiken of om delen van een scène te maskeren zodat ze niet worden verwerkt of gerenderd. Een stencilbuffer is een buffer per pixel vergelijkbaar met een zwart-witafbeelding, waarin elke locatie in de buffer een waarde kan hebben die meestal maximaal 1 byte lang is, maar kan zo klein zijn als 1 bit. De buffer was oorspronkelijk ontworpen om te fungeren als een waar of onwaar masker, net als een realistisch stencil, zodat delen van een scène kunnen worden verborgen 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 naast eenvoudig maskeren, waaronder 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 bewaard, zodat deze tijdens het renderen snel toegankelijk is.
Het concept van een stencilbuffer was oorspronkelijk een manier om een tweedimensionaal (2D) masker te maken dat op een driedimensionale (3D) scène kon worden toegepast terwijl de hoekpunten door de grafische pijplijn bewogen. Als de locatie van het 3D-hoekpunt, eenmaal gerasterd, betrekking had op een gebied van de stencilbuffer dat niet op nul was ingesteld, dan kon dat hoekpunt worden genegeerd en de rest van de pijplijnverwerking worden overgeslagen. Dit bood programmeurs de mogelijkheid om alleen kleine delen van een scène weer te geven of een afbeelding in een onregelmatig gevormde viewport te maken, zoals een reflectie in een kleine spiegel binnen een grotere scène, waarbij de vorm van de spiegel wordt getekend als een stencil in de buffer, en dan wordt de reflectie door die vorm getrokken.
Geheugenbezwaren leidden ertoe dat de oorspronkelijke vorm van een stencilbuffer een raster was van enkele bitwaarden waarin elke pixel in de buffer alleen waar of onwaar kon zijn. Naarmate grafische kaarten zich ontwikkelden, konden de meeste buffers een volledige bytewaarde behouden op elke pixellocatie, waardoor programmeurs complexere 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 is het creëren van volumeschaduwen. Dit kan worden gedaan door eerst een scène met zeer weinig licht weer te geven, zodat alles in de schaduw lijkt te staan. Vervolgens worden berekeningen gemaakt om de locatie te bepalen van alle polygoonoppervlakken in de scène die worden verlicht door een lichtbron, en deze vormen worden overgebracht naar de stencilbuffer. De scène wordt opnieuw weergegeven alsof elk object volledig is verlicht en door de stencilvormen is gemengd met de schaduwscène, waardoor een afbeelding wordt gecreëerd die objecten met schaduw lijkt te bevatten.