Share via


Atténuation du Z-fighting

Quand deux surfaces triangulaires se chevauchent, il n’est pas évident de déterminer laquelle doit être affichée par-dessus l’autre. Le résultat varie même selon le pixel, ce qui génère des artefacts dépendants de l’affichage de l’appareil photo. Lorsque la caméra ou le maillage se déplace, ces éléments scintillent franchement. Cet artefact est appelé le z-fighting. Pour des applications de réalité augmentée et de réalité virtuelle, le problème est amplifié car les casques audiovisuels bougent naturellement en permanence. Afin d’éviter toute gêne pour l’utilisateur, Azure Remote Rendering propose une fonctionnalité d’atténuation du z-fighting.

Remarque

Les paramètres d’atténuation du z-fighting n’ont aucun effet sur le rendu cloud de point.

Modes d’atténuation du z-fighting

Situation Résultat
Z-fighting normal Screenshot shows no deterministic precedence between red and green quads.
Atténuation du z-fighting activée Screenshot displays the red quad precedence with a solid red rectangle.
Mise en surbrillance du damier activée Screenshot shows red and green quad toggle preference with a checkerboard pattern rectangle.

Le code suivant permet l’atténuation du 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);
}

Remarque

L’atténuation du z-fighting est un paramètre global qui influe sur tous les maillages affichés.

Causes du z-fighting

Le z-fighting se produit principalement pour deux raisons :

  • Lorsque les surfaces sont éloignées de la caméra, la précision de leurs valeurs de profondeur se dégrade et les valeurs deviennent impossibles à distinguer ;
  • Les surfaces se chevauchent physiquement dans un maillage.

Le premier problème peut toujours se produire, et il est difficile à éliminer. Si cette situation se produit dans votre application, vérifiez que le rapport entre la distance du plan proche et celle du plan lointain est aussi faible que possible. Par exemple, un plan proche à une distance de 0,01 et un plan lointain à une distance de 1 000 créent ce problème bien plus tôt qu’un plan proche à 0,1 et un plan lointain à une distance de 20.

Le second problème indique que le contenu est mal écrit. Dans le monde réel, deux objets ne peuvent pas se trouver au même endroit en même temps. En fonction de l’application, les utilisateurs peuvent souhaiter savoir si des surfaces se chevauchant existent, et à quel endroit. Par exemple, une simulation par CAO d’un bâtiment à la base d’une construction réelle ne doit contenir aucune intersection de surfaces matériellement irréalisable. Pour permettre l’inspection visuelle, le mode de mise en surbrillance est disponible ; il affiche la zone de z-fighting potentielle sous la forme d’un motif en damier animé.

Limites

L’atténuation du z-fighting est la meilleure solution dont nous disposons. Il n’est pas garanti qu’elle permette de supprimer entièrement le z-fighting. De plus, l’atténuation privilégie une surface au détriment d’une autre. Quand des surfaces sont trop proches l’une de l’autre, la « mauvaise » surface se retrouve au-dessus. Un problème courant se pose lorsque du texte et d’autres décalques sont appliqués à une surface. Avec l’atténuation du z-fighting activée, ces détails peuvent tout simplement facilement disparaître.

Considérations relatives aux performances

  • L’activation de l’atténuation du z-fighting entraîne peu voire pas de surcharge de performances.
  • De plus, l’activation de la superposition du z-fighting entraîne bien une surcharge de performances non négligeable, même si elle peut varier en fonction de la scène.

Documentation de l’API

Étapes suivantes