A definição de buffer de estêncil da Wikipedia não é realmente boa, ela se concentra demais nos detalhes das implementações modernas (OpenGL). Acho a versão desambiguação mais fácil de entender:
Um estêncil é um modelo usado para desenhar ou pintar letras, símbolos, formas ou padrões idênticos toda vez que é usado. O design produzido por esse modelo também é chamado de estêncil.
Isso é o que o estêncil significava antes da computação gráfica. Se você digitar stencil nas Imagens do Google, este é um dos primeiros resultados:
Como você pode ver, é simplesmente uma máscara ou padrão que pode ser usado para "pintar" o negativo do padrão em algo.
O buffer de estêncil funciona exatamente da mesma maneira. Pode-se preencher o buffer de estêncil com um padrão selecionado, fazendo um passe de renderização do estêncil, depois defina a função de estêncil apropriada que definirá como o padrão deve ser interpretado nos desenhos subseqüentes e, em seguida, renderize a cena final. Os pixels que caem nas áreas rejeitadas da máscara de estêncil, de acordo com a função de comparação, não são desenhados.
Quando se trata de implementar o buffer de estêncil, às vezes é realmente acoplado ao buffer de profundidade. A maioria dos hardwares gráficos usa um buffer de estêncil de 1 byte (8 bits), o que é suficiente para a maioria dos aplicativos. Os buffers de profundidade geralmente são implementados usando 3 bytes (24 bits), o que normalmente é suficiente para a maioria dos tipos de renderização em 3D. Portanto, é lógico empacotar os 8 bits do buffer de estêncil com os outros 24 do buffer de profundidade, possibilitando armazenar cada pixel de profundidade + estêncil em um número inteiro de 32 bits. Isso é o que a Wikipedia quis dizer com:
O buffer de profundidade e o buffer de estêncil geralmente compartilham a mesma área na RAM do hardware gráfico.
Um aplicativo em que o buffer de estêncil costumava ser rei era para renderização de sombra, em uma técnica chamada volumes de sombra , ou às vezes também apropriadamente chamada sombras de estêncil . Esse foi um uso muito inteligente do buffer, mas hoje em dia a maior parte do campo de renderização parece ter mudado para mapas de sombra baseados em profundidade.
cleaver
->clever
. Não consigo editá-lo. D: Ótima resposta, a propósito, isso faz mais sentido até agora.O buffer de estêncil é um buffer inteiro sem sinal, geralmente de 8 bits hoje em dia, onde é possível preencher as informações por pixel conforme desejado, com base no uso de várias operações ( OpenGL Ops aqui, por exemplo ) após um teste de estêncil.
O teste de estêncil é simplesmente uma operação por pixel em que o valor atual do estêncil de pixel é testado em relação ao conteúdo do buffer de estêncil. Você define a condição para a qual o teste de estêncil é aprovado (por exemplo, SEMPRE, MENOS etc.).
Você pode decidir o que acontece com o valor do estêncil, dependendo do resultado do teste (no OpenGL, usando a operação que eu vinculei acima)
O buffer de estêncil tem muitos usos, os primeiros que vêm à mente sendo:
No passado, era usado também para técnicas de sombreamento, como o volume Shadow.
O pobre buffer de estêncil costuma ser subestimado, mas pode ser uma boa arma no arsenal de um programador de gráficos.
[*] Valor a ser lido novamente em um pós-processo usando o SRV certo!
EDIT: Além disso, vale ressaltar que no Shader Model 5.1 (então D3D11.3 e D3D12) você tem acesso ao valor de referência do estêncil via
SV_StencilRef
fonte
Fonte: O que é um buffer de estêncil? | Rede de desenvolvedores da Microsoft
A idéia geral é que você pode definir um valor para cada pixel e, em seguida, definir a operação (
GREATER
,SMALLER
,EQUAL
etc), quando este for avaliada como True o pixel é sombreada e mostrado.Um aplicativo é a reflexão em tempo real; ao renderizar a textura de reflexão, o buffer de estêncil é usado para criar uma máscara para onde a reflexão é aplicada. Por exemplo, aplique apenas a reflexão nos triângulos sombreados do material de vidro. Também pode ser usado para criar máscaras bidimensionais arbitrárias para todo o buffer de estrutura.
fonte