Desvio de profundidade (Direct3D 9)

Polígonos que são coplanares em seu espaço 3D podem ser feitos para aparecer como se não fossem coplanares adicionando um viés z a cada um. Essa é uma técnica comumente usada para garantir que as sombras em uma cena sejam exibidas corretamente. Por exemplo, uma sombra em uma parede provavelmente terá o mesmo valor de profundidade que a parede. Se você renderizar a parede primeiro e depois a sombra, a sombra poderá não estar visível ou os artefatos de profundidade poderão estar visíveis. Você pode reverter a ordem na qual renderiza os objetos coplanares na esperança de reverter o efeito, mas artefatos de profundidade ainda são prováveis.

Um aplicativo pode ajudar a garantir que os polígonos coplanares sejam renderizados corretamente adicionando um desvio aos valores z que o sistema usa ao renderizar os conjuntos de polígonos coplanares. Para adicionar um desvio z a um conjunto de polígonos, chame o método IDirect3DDevice9::SetRenderState pouco antes de renderizá-los, definindo o parâmetro State como D3DRS_DEPTHBIAS e o parâmetro Value como um valor float adequado (por exemplo, um valor adequado pode ser de -1,0 a 1,0); para passar esse valor para SetRenderState, você também deve converter o valor em um DWORD. Um valor de viés z maior aumenta a probabilidade de que os polígonos renderizados fiquem visíveis quando exibidos com outros polígonos coplanares.

Offset = m * D3DRS_SLOPESCALEDEPTHBIAS + D3DRS_DEPTHBIAS

em que m é a inclinação de profundidade máxima do triângulo que está sendo renderizado.

m = max(abs(delta z / delta x), abs(delta z / delta y)) 

As unidades para os estados de renderização D3DRS_DEPTHBIAS e D3DRS_SLOPESCALEDEPTHBIAS dependem se o buffer z ou w-buffering está habilitado. O aplicativo deve fornecer valores adequados.

O desvio não é aplicado a nenhuma linha e primitivo de ponto. No entanto, esse desvio precisa ser aplicado a triângulos desenhados no modo de fio.

// RenderStates
D3DRS_SLOPESCALEDEPTHBIAS, // Defaults to zero
D3DRS_DEPTHBIAS,           // Defaults to zero
// Caps
D3DPRASTERCAPS_DEPTHBIAS           
D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS 

Pixel Pipeline