O que é um buffer de estêncil?
Na programação gráfica de computadores, um buffer de estêncil é uma área de 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, no qual cada local no buffer pode conter um valor que geralmente é de 1 byte de comprimento, mas pode ser tão pequeno quanto 1 bit. O buffer originalmente foi projetado para atuar como uma máscara verdadeira ou falsa, como um estêncil no 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 como um valor diferente de zero. Existem vários usos para o buffer além do mascaramento simples, incluindo desenhar um volume de sombra, implementar halos em torno de objetos ou localizar áreas onde os objetos se sobrepõem. Em muitos casos, o buffer é mantido na memória gráfica em uma placa gráfica para que possa ser acessada rapidamente durante o Rendering.
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 de gráficos. Se a localização do vértice 3D, uma vez rasterizada, relacionada a uma área do buffer de estêncil que não foi definida como zero, esse vértice poderia ser ignorado e o restante do processamento do pipeline foi 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 uma reflexão em um pequeno espelho dentro de uma cena maior, onde a forma do espelho é desenhada como um estêncil no buffer e, em seguida, a reflexão é desenhada através dessa forma.
As preocupações com a memória levaram à forma original de um buffer de estêncil sendo uma grade de valores de bits únicos nos quais cada pixel no buffer só poderia ser verdadeiro ou falso. À medida que as placas gráficas se desenvolvemEd, a maioria dos buffers foi capaz de manter um valor completo de bytes em cada local de pixels, permitindo que os programadores tenham 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 rastejado. Após esta operação, o valor de cada localização de pixels no buffer será igual ao número de objetos que cruzam esse pixel em uma tela.Um dos usos mais populares para um buffer de estêncil é criar sombras de volume. Isso pode ser feito primeiro, tornando 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 de polígono na 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 de estêncil na cena sombreada, efCriando de forma perfeita uma imagem que parece conter objetos com sombras.