Skip to main content

Hvad er en stencilbuffer?

I computergrafikprogrammering er en stencilbuffer et hukommelsesområde, der kan drages til og bruges i relation til andre grafikbuffere for at opnå forskellige effekter eller til at maskere områder af en scene, så de ikke bliver behandlet eller gengivet.En stencilbuffer er en per-pixelbuffer, der ligner et sort / hvidt billede, hvor hver placering i bufferen kan have en værdi, der oftest er 1 byte med højst, men kan være så lille som 1 bit.Bufferen blev oprindeligt designet til at fungere som en ægte eller falsk maske, ligesom en virkelig stencil, 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 genstande eller lokalisering af områder, hvor genstande overlapper hinanden.I mange tilfælde opretholdes bufferen i grafikhukommelsen på et grafikkort, så det kan fås hurtigt adgang til under gengivelse.

Konceptet med en stencilbuffer oprindeligt var en måde at skabe en to-dimensionel (2D) maske, der kunne væreanvendt til en tredimensionel (3D) scene, da vertikaterne bevægede sig gennem grafikrørledningen.Hvis placeringen af 3D -toppunktet, når den først var rasteret, relateret til et område af stencilbufferen, der ikke var indstillet til nul, kunne det toppunktet ignoreres og resten af dens rørledningsbehandling sprang over.Dette gjorde det muligt for programmerere en måde at gengive kun små dele af en scene eller at gengive et billede til en uregelmæssigt formet udsigt, såsom en refleksion i et lille spejl inden for en større scene, hvor formen af spejlet tegnes som en stencil iBuffer, og derefter trækkes reflektionen gennem denne form.

Hukommelsesproblemer førte til, at den originale form af en stencilbuffer var et gitter af enkeltbit-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 holde en fuld byteværdi på hver Pixel -placering, 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 på et sted, hvis et objekt optager den pixel på skærmen, når det rasteriseres.Efter denne operation vil værdien af hver pixelplacering i bufferen svare til antallet af objekter, der krydser den pixel på en skærm.

En af de mest populære anvendelser til en stencilbuffer er at skabe lydstyrkeskygger.Dette kan gøres ved først at gengive en scene med meget svag belysning, så alt ser ud til at være skygge.Dernæst 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 ethvert objekt er fuldt oplyst og blandes gennem stencilformerne på den skyggefulde scene, hvilket effektivt skaber et billede, der ser ud til at indeholde genstande med skygger.