Delen via


Beperking van Z-bestrijding

Wanneer twee driehoekige oppervlakken elkaar overlappen, is het niet duidelijk welke boven op de andere moet worden weergegeven. Het resultaat varieert zelfs per pixel, wat resulteert in cameraweergaveafhankelijke artefacten. Wanneer de camera of het mesh beweegt, flikkeren deze patronen merkbaar. Dit artefact wordt z-fighting genoemd. Voor augmented reality- en virtual reality-toepassingen wordt het probleem geïntensiveerd omdat op hoofd gemonteerde apparaten natuurlijk altijd worden verplaatst. Om ongemak van viewer te voorkomen, biedt Azure Remote Rendering z-vechtbeperkingsfunctionaliteit.

Notitie

De beperkingsinstellingen voor z-vechten hebben geen effect op point cloud rendering.

Beperkingsmodi voor Z-bestrijding

Situatie Result
Regelmatige z-gevechten Screenshot shows no deterministic precedence between red and green quads.
Risicobeperking voor Z-bestrijding ingeschakeld Screenshot displays the red quad precedence with a solid red rectangle.
Markering van het vinkbord is ingeschakeld Screenshot shows red and green quad toggle preference with a checkerboard pattern rectangle.

Met de volgende code kunt u z-fighting beperken:

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);
}

Notitie

Z-vechtbeperking is een globale instelling die van invloed is op alle gerenderde meshes.

Redenen voor z-vechten

Z-vechten gebeurt voornamelijk om twee redenen:

  • Wanneer oppervlakken zich ver van de camera bevinden, verslechtert de precisie van de dieptewaarden en worden de waarden niet te onderscheiden
  • Wanneer oppervlakken in een mesh fysiek overlappen

Het eerste probleem kan altijd optreden en is moeilijk te elimineren. Als deze situatie zich in uw toepassing voordoet, moet u ervoor zorgen dat de verhouding van de afstand in de buurt van het vlak tot de verre vlakafstand zo laag is als praktisch. Een vlak in de buurt op afstand 0,01 en ver vlak op afstand 1000 veroorzaakt dit probleem bijvoorbeeld veel eerder dan het nabij gelegen vliegtuig op 0,1 en het verre vliegtuig op afstand 20.

Het tweede probleem is een indicatie van slecht geschreven inhoud. In de echte wereld kunnen twee objecten zich niet op dezelfde plek op hetzelfde moment bevinden. Afhankelijk van de toepassing willen gebruikers mogelijk weten of overlappende oppervlakken bestaan en waar ze zich bevinden. Een CAD-scène van een gebouw dat de basis is voor een echte wereldconstructie, mag bijvoorbeeld geen fysiek onmogelijk oppervlakknooppunten bevatten. Om visuele inspectie mogelijk te maken, is de markeringsmodus beschikbaar, die mogelijk z-vechten weergeeft als een geanimeerd controlebordpatroon.

Beperkingen

De geleverde z-vechtbeperking is een best effort. Er is geen garantie dat het alle z-gevechten verwijdert. Bovendien geeft mitigatie de voorkeur aan één oppervlak boven een ander oppervlak. Wanneer u oppervlakken hebt die zich te dicht bij elkaar bevinden, eindigt het 'verkeerde' oppervlak bovenaan. Een veelvoorkomend probleem is wanneer tekst en andere decals worden toegepast op een oppervlak. Als z-fighting beperking is ingeschakeld, kunnen deze details eenvoudig verdwijnen.

Prestatieoverwegingen

  • Het inschakelen van z-vechtbeperking heeft weinig tot geen overhead voor prestaties.
  • Daarnaast leidt het inschakelen van de z-fighting overlay tot een niet-triviale prestatieoverhead, hoewel deze afhankelijk van de scène kan variëren.

API-documentatie

Volgende stappen