Dela via


Minskning av Z-fighting

När två trekantsytor överlappar varandra är det inte klart vilken som ska återges ovanpå den andra. Resultatet varierar även per pixel, vilket resulterar i kameravisningsberoende artefakter. När kameran eller nätet rör sig flimrar dessa mönster märkbart. Artefakten kallas z-fighting. För program för förhöjd verklighet och virtuell verklighet intensifieras problemet eftersom huvudmonterade enheter alltid rör sig. Azure Remote Rendering erbjuder z-fightingreduceringsfunktioner för att förhindra visningsbesvär.

Kommentar

Inställningarna för z-fightingreducering har ingen effekt på punktmolnrendering.

Z-fightingreduceringslägen

Situationen Result
Vanliga z-fighting Screenshot shows no deterministic precedence between red and green quads.
Z-fightingreducering aktiverat Screenshot displays the red quad precedence with a solid red rectangle.
Brädmarkering aktiverad Screenshot shows red and green quad toggle preference with a checkerboard pattern rectangle.

Följande kod möjliggör z-fightingreducering:

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

Kommentar

Z-fighting-åtgärder är en global inställning som påverkar alla renderade nät.

Orsaker till z-fighting

Z-fighting sker huvudsakligen av två skäl:

  • När ytorna är långt borta från kameran försämras precisionen för deras djupvärden och värdena blir oskiljaktiga
  • När ytor i ett nät överlappar fysiskt

Det första problemet kan alltid inträffa och är svårt att eliminera. Om den här situationen inträffar i programmet ska du se till att förhållandet mellan det nära planets avstånd och fjärranslutna planets avstånd är så lågt som praktiskt. Till exempel skapar ett nära plan på avstånd 0,01 och långt plan på avstånd 1000 detta problem mycket tidigare än att ha det nära planet på 0,1 och det avlägsna planet på avstånd 20.

Det andra problemet är en indikation på dåligt författat innehåll. I verkligheten kan två objekt inte finnas på samma plats samtidigt. Beroende på programmet kanske användarna vill veta om överlappande ytor finns och var de befinner sig. Till exempel bör en CAD-scen i en byggnad som är grunden för en verklig konstruktion inte innehålla fysiskt omöjliga ytskärningar. För att möjliggöra visuell inspektion är markeringsläget tillgängligt, vilket visar potentiella z-fighting som ett animerat rutmönster.

Begränsningar

Den angivna z-fighting-åtgärden är en bra insats. Det finns ingen garanti för att det tar bort alla z-fighting. Dessutom föredrar lindring en yta framför en annan. När du har ytor som är för nära varandra hamnar den "fel" ytan ovanpå. Ett vanligt problem är när text och andra dekaler tillämpas på en yta. Med z-fightingreducering aktiverat kan den här informationen enkelt försvinna.

Prestandaöverväganden

  • Att aktivera z-fightingreducering medför lite eller inga prestandakostnader.
  • Att aktivera z-fightingöverlägget medför dessutom en icke-trivial prestandabelastning, även om den kan variera beroende på scenen.

API-dokumentation

Nästa steg