Partilhar via


Mitigação de combate Z

Quando duas superfícies triangulares se sobrepõem, não fica claro qual delas deve ser renderizada em cima da outra. O resultado varia até por pixel, resultando em artefatos dependentes da visão da câmera. Quando a câmera ou a malha se move, esses padrões piscam visivelmente. Este artefato é chamado de z-fighting. Para aplicações de realidade aumentada e realidade virtual, o problema é intensificado porque os dispositivos montados na cabeça naturalmente sempre se movem. Para evitar o desconforto do visualizador, a Renderização Remota do Azure oferece a funcionalidade de mitigação de combate ao z.

Nota

As configurações de mitigação z-fighting não têm efeito na renderização da nuvem de pontos.

Modos de mitigação de combate Z

Localização Resultado
Z-fighting regular Screenshot shows no deterministic precedence between red and green quads.
Mitigação de combate Z habilitada Screenshot displays the red quad precedence with a solid red rectangle.
Realce quadriculado ativado Screenshot shows red and green quad toggle preference with a checkerboard pattern rectangle.

O código a seguir permite a mitigação do z-fighting:

void EnableZFightingMitigation(RenderingSession session, bool highlight)
{
    ZFightingMitigationSettings settings = session.Connection.ZFightingMitigationSettings;

    // enabling z-fighting mitigation
    settings.Enabled = true;

    // enabling checkerboard highlighting of z-fighting potential
    settings.Highlighting = highlight;
}
void EnableZFightingMitigation(ApiHandle<RenderingSession> session, bool highlight)
{
    ApiHandle<ZFightingMitigationSettings> settings = session->Connection()->GetZFightingMitigationSettings();

    // enabling z-fighting mitigation
    settings->SetEnabled(true);

    // enabling checkerboard highlighting of z-fighting potential
    settings->SetHighlighting(highlight);
}

Nota

A mitigação do combate ao Z é um cenário global que afeta todas as malhas renderizadas.

Razões para z-fighting

A luta em Z acontece principalmente por dois motivos:

  • Quando as superfícies estão longe da câmara, a precisão dos seus valores de profundidade degrada-se e os valores tornam-se indistinguíveis
  • Quando as superfícies de uma malha se sobrepõem fisicamente

O primeiro problema pode sempre acontecer e é difícil de eliminar. Se esta situação acontecer na sua aplicação, certifique-se de que a relação entre a distância do plano próximo e a distância do plano distante é tão baixa quanto possível. Por exemplo, um plano próximo à distância 0,01 e um plano distante à distância 1000 criam este problema muito mais cedo do que ter o plano próximo a 0,1 e o plano distante à distância 20.

O segundo problema é a indicação de conteúdo mal criado. No mundo real, dois objetos não podem estar no mesmo lugar ao mesmo tempo. Dependendo do aplicativo, os usuários podem querer saber se existem superfícies sobrepostas e onde elas estão. Por exemplo, uma cena CAD de um edifício que é a base para uma construção do mundo real, não deve conter cruzamentos de superfície fisicamente impossíveis. Para permitir a inspeção visual, está disponível o modo de realce, que exibe o potencial z-fighting como um padrão quadriculado animado.

Limitações

A mitigação de combate z fornecida é o melhor esforço. Não há garantia de que ele remova todos os z-fighting. Além disso, a mitigação prefere uma superfície a outra. Quando você tem superfícies muito próximas umas das outras, a superfície "errada" acaba em cima. Um caso de problema comum é quando o texto e outros decalques são aplicados a uma superfície. Com a mitigação z-fighting ativada, esses detalhes poderiam facilmente desaparecer.

Considerações de desempenho

  • Habilitar a mitigação do combate z incorre em pouca ou nenhuma sobrecarga de desempenho.
  • Além disso, habilitar a sobreposição z-fighting incorre em uma sobrecarga de desempenho não trivial, embora possa variar dependendo da cena.

Documentação da API

Próximos passos