Hvad er en stencilbuffer?
Ved programmering af computergrafik er en stencilbuffer et hukommelsesområde, der kan trækkes til og bruges i forhold til andre grafikbuffere til at opnå forskellige effekter, eller til at maskere områder i en scene, så de ikke behandles eller gengives. En stencilbuffer er en per-pixelbuffer, der ligner et sort / hvidt billede, hvor hver placering i bufferen kan indeholde en værdi, der oftest er 1 byte lang, men kan være så lille som 1 bit. Bufferen var oprindeligt designet til at fungere som en sand eller falsk maske, ligesom en stencil i den virkelige verden, så områder af en scene kunne skjules eller ignoreres ved at indstille værdierne i forskellige regioner i stencilbufferen til en anden værdi end nul. Der er en række anvendelser til bufferen ud over simpel maskering, herunder tegning af en skyggevolumen, implementering af haloer omkring objekter eller placering af områder, hvor objekter overlapper hinanden. I mange tilfælde opretholdes bufferen i grafikhukommelsen på et grafikkort, så den kan fås hurtig adgang under gengivelse.
Konceptet med en stencilbuffer var oprindeligt en måde at skabe en todimensionel (2D) maske, der kunne anvendes på en tredimensionel (3D) scene, når toppunktet bevægede sig gennem grafikrørledningen. Hvis placeringen af 3D-toppunktet, når den først var blevet rasteret, relateret til et område af stencilbufferen, der ikke var indstillet til nul, kunne dette toppunkt ignoreres og resten af dens rørledningsbehandling springes over. Dette gjorde det muligt for programmerere en måde at gengive kun små dele af en scene eller at gengive et billede til et uregelmæssigt formet udsigt, såsom en reflektion i et lille spejl i en større scene, hvor spejlets form tegnes som en stencil i buffer, og derefter trækkes reflektionen gennem den form.
Hukommelsesproblemer førte til, at den oprindelige form af en stencilbuffer var et gitter med en-bit-værdier, hvor hver pixel i bufferen kun kunne være sand eller falsk. Efterhånden som grafikkort udviklede sig, blev de fleste buffere i stand til at have en fuld byteværdi på hver pixelplacering, hvilket gjorde det muligt for programmerere at have mere komplekse værdier på et sted. Dette kan tillade, at bufferen bruges til at detektere områder, hvor objekter overlapper hinanden, hvilket kan gøres ved at øge værdien af bufferen et sted, hvis et objekt optager den pixel på skærmen, når den rasteriseres. Efter denne operation svarer værdien af hver pixelplacering i bufferen til antallet af objekter, der krydser pixlen på en skærm.
En af de mest populære anvendelser til en stencilbuffer er at skabe lydstyrke-skygger. Dette kan gøres ved først at gengive en scene med meget svag belysning, så alt ser ud til at være skraveret. Derefter foretages beregninger for at bestemme placeringen af alle polygonoverflader i scenen, der er oplyst af en lyskilde, og disse former overføres til stencilbufferen. Scenen gengives igen, som om hvert objekt er fuldt oplyst og blandes gennem stencilformerne på den skyggefulde scene, hvilket effektivt skaber et billede, der ser ud til at indeholde objekter med skygger.