Eu leio muito a palavra estêncil e não tenho idéia de qual é o seu real objetivo em computação gráfica.
Vendo a foto em preto e branco na wikipedia, ainda estou tendo problemas com ela.
Por que usamos um estêncil ou um buffer de estêncil e qual é a diferença com um buffer Z? Por que usar essa palavra que parece ter algum significado no design gráfico?
Respostas:
Na sua encarnação original, um buffer de estêncil era um buffer de quadro de um bit por pixel (ou seja, preto ou branco, mas não cinza). Você pode renderizar o que quiser como qualquer outro buffer de quadro. Posteriormente, você poderá usar o conteúdo desse buffer para "estêncil" ou ocultar ao desenhar para o buffer comum.
Um exemplo: digamos que você esteja fazendo um jogo de direção. Você quer ter um pequeno espelho retrovisor na tela que mostra o que está atrás do carro. Você precisará renderizar uma vista apontando atrás do carro, mas só deseja renderizá-la dentro do pequeno retângulo arredondado do espelho retrovisor. A solução típica é:
O estêncil irá mascará-lo para que você desenhe apenas a forma do espelho.
Agora que os pipelines de renderização são muito mais flexíveis e programáveis, os buffers de estêncil são usados apenas como um buffer de quadros genérico de 1 bit, com o qual você pode fazer o que quiser. Sombras são um caso de uso comum.
fonte
Além do uso funcional dos buffers de estêncil que as pessoas já discutiram, os buffers de estêncil também podem ser usados para otimização.
Devido à posição do teste de estêncil no pipeline de gráficos (que é anterior ao sombreamento de pixels), o teste de estêncil pode ser usado para eliminar pixels que realizam trabalhos pesados de sombreamento quando não são necessários. Muitas vezes, isso pode ser feito com uma granularidade mais grossa do que apenas um pixel, por exemplo. um bloco de pixels, para que o trabalho também possa ser selecionado durante os estágios de rasterização grosseira.
fonte
É apenas um buffer que controla quais pixels podem ser modificados quando os polígonos são renderizados. Para cada pixel, há um valor de estêncil correspondente e os pixels podem ser modificados / ignorados condicionalmente, dependendo desses valores
No mais simples, pode ser usado como um estêncil físico - uma máscara que permite a passagem de alguns pixels e impede a modificação de outros pixels.
É muito semelhante no comportamento a um buffer z - como o teste de profundidade, o teste de estêncil é um teste verdadeiro / falso e há configurações semelhantes para controlar o teste de estêncil (passe se maior / menor / igual). Mas, em vez de escrever uma profundidade, geralmente terá valores predefinidos gravados, ou serão incrementados / decrementados quando os pixels forem desenhados, conforme usado nos algoritmos de sombra de estêncil.
fonte