1. Em que situação dois objetos podem ter a mesma profundidade no Z-buffer?

Passo 1

O enunciado pergunta sobre o Z-buffer, que é o mecanismo que armazena, para cada pixel da tela, a profundidade (o valor de z após transformação para janela) do fragmento já desenhado. A ideia é impedir que um fragmento mais distante sobrescreva um fragmento mais próximo. Para resolver, vamos revisar quando dois fragmentos diferentes podem gerar exatamente o mesmo valor de profundidade no Z-buffer.

Passo 2

Quando processamos um fragmento, ele tem um valor de profundidade z já convertido para o intervalo de [0,1] (pós divisão por w e mapeamento para janela). Se dois fragmentos distintos chegarem a disputar o mesmo pixel e produzirem exatamente o mesmo valor de z — isto é, z_1 = z_2 com precisão de ponto flutuante do Z-buffer — eles aparecem como “empate” no teste de profundidade.

Passo 3

Uma situação típica em que isso ocorre é quando duas superfícies estão exatamente no mesmo plano no espaço do mundo, paralelas à câmera ou inclinadas, mas posicionadas de modo que, após toda a transformação (mundo \tovisão \toprojeção \tojanela), seus valores de profundidade coincidam. Em outras palavras, são polígonos coplanares ou cópias exatas um sobre o outro.

Passo 4

Outra causa comum é imprecisão numérica do Z-buffer. Mesmo que as superfícies não estejam rigorosamente na mesma profundidade, se a diferença for menor que a resolução do buffer (por exemplo, dois z que diferem em 10^{-7} num buffer de 24 bits), o hardware pode quantizá-los para o mesmo valor inteiro de profundidade.
Quando isso acontece, dizemos que ocorre “z-fighting”: os dois objetos brigam pelo mesmo pixel e o resultado varia frame a frame ou conforme o ângulo de visão, gerando flicker ou manchas indesejadas.

Resposta

Dois objetos podem ter a mesma profundidade no Z-buffer quando seus fragmentos geram idêntico valor de profundidade após a transformação de viewport (por exemplo, superfícies perfeitamente coplanares ou cópias exatas uma sobre a outra) ou por causa de quantização/imprecisão do buffer, levando ao chamado z-fighting.

Exercícios relacionados