Skip to main content

O que é um buffer de estêncil?

Na programação de gráficos de computador, um buffer de estêncil é uma área da memória que pode ser desenhada e usada em relação a outros buffers gráficos para obter efeitos diferentes ou para mascarar áreas de uma cena para que não sejam processadas ou renderizadas. Um buffer de estêncil é um buffer por pixel semelhante a uma imagem em preto e branco, na qual cada local no buffer pode conter um valor com mais freqüência de 1 byte no máximo, mas que pode ser tão pequeno quanto 1 bit. O buffer foi originalmente projetado para agir como uma máscara verdadeira ou falsa, como um estêncil do mundo real, para que áreas de uma cena pudessem ser obscurecidas ou ignoradas, definindo os valores de diferentes regiões do buffer de estêncil para um valor diferente de zero. Há vários usos para o buffer, além do simples mascaramento, incluindo o desenho de um volume de sombra, a implementação de halos em torno de objetos ou a localização de áreas onde os objetos se sobrepõem. Em muitos casos, o buffer é mantido na memória gráfica de uma placa gráfica, para que possa ser acessado rapidamente durante a renderização.

O conceito de um buffer de estêncil originalmente era uma maneira de criar uma máscara bidimensional (2D) que poderia ser aplicada a uma cena tridimensional (3D) à medida que os vértices se moviam pelo pipeline gráfico. Se a localização do vértice 3D, uma vez rasterizada, estiver relacionada a uma área do buffer de estêncil que não foi definida como zero, esse vértice poderá ser ignorado e o restante do processamento do pipeline ignorado. Isso permitiu aos programadores uma maneira de renderizar apenas pequenas partes de uma cena ou renderizar uma imagem em uma viewport de formato irregular, como um reflexo em um espelho pequeno dentro de uma cena maior, onde a forma do espelho é desenhada como um estêncil no buffer e, em seguida, o reflexo é desenhado através dessa forma.

As preocupações com a memória levaram a forma original de um buffer de estêncil a ser uma grade de valores de bit único em que cada pixel no buffer só poderia ser verdadeiro ou falso. À medida que as placas gráficas se desenvolviam, a maioria dos buffers conseguiu manter um valor de bytes completo em cada local de pixel, permitindo que os programadores tivessem valores mais complexos em um local. Isso pode permitir que o buffer seja usado para detectar áreas onde os objetos se sobrepõem, o que pode ser feito incrementando o valor do buffer em um local se um objeto ocupar esse pixel na tela quando rasterizado. Após esta operação, o valor de cada localização de pixel no buffer será igual ao número de objetos que cruzam esse pixel em uma tela.

Um dos usos mais populares de um buffer de estêncil é a criação de sombras de volume. Isso pode ser feito renderizando uma cena com iluminação muito fraca para que tudo pareça estar sombreado. Em seguida, são feitos cálculos para determinar a localização de todas as superfícies poligonais da cena que são iluminadas por uma fonte de luz e essas formas são transferidas para o buffer de estêncil. A cena é renderizada novamente como se todos os objetos estivessem totalmente iluminados e misturados através das formas do estêncil à cena sombreada, criando efetivamente uma imagem que parece conter objetos com sombras.