Ograniczanie efektu Z-fighting

Gdy dwa trójkątne powierzchnie nakładają się, nie jest jasne, który z nich powinien być renderowany na drugim. Wynik różni się nawet na piksel, co powoduje, że artefakty zależne od widoku aparatu. Gdy aparat lub siatka porusza się, te wzorce migotają zauważalnie. Ten artefakt jest nazywany walką z. W przypadku aplikacji rzeczywistości rozszerzonej i rzeczywistości wirtualnej problem jest nasilony, ponieważ urządzenia zainstalowane na głowę są naturalnie przenoszone. Aby zapobiec dyskomfortowi przeglądarki, usługa Azure Remote Rendering oferuje funkcję ograniczania ryzyka walki z.

Uwaga

Ustawienia ograniczania ryzyka walki z nie mają wpływu na renderowanie chmury punktowej.

Tryby ograniczania ryzyka walki Z

Sytuacji Wynik
Regularne walki z Screenshot shows no deterministic precedence between red and green quads.
Ograniczenie ryzyka walki Z włączone Screenshot displays the red quad precedence with a solid red rectangle.
Włączono wyróżnianie tablicy kontrolnej Screenshot shows red and green quad toggle preference with a checkerboard pattern rectangle.

Poniższy kod umożliwia ograniczenie ryzyka walki z:

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

Uwaga

Ograniczanie ryzyka walki Z jest globalnym ustawieniem, które wpływa na wszystkie renderowane siatki.

Powody walki z

Walka Z odbywa się głównie z dwóch powodów:

  • Gdy powierzchnie są dalekie od aparatu, precyzja ich wartości głębokości spada, a wartości stają się nie do odróżnienia
  • Gdy powierzchnie w siatkach fizycznie nakładają się

Pierwszy problem może zawsze wystąpić i jest trudny do wyeliminowania. Jeśli taka sytuacja występuje w aplikacji, upewnij się, że stosunek odległości bliskiej płaszczyzny do dalekiej odległości płaszczyzny jest tak niski, jak praktyczny. Na przykład bliski samolot w odległości 0,01 i dalekiego samolotu w odległości 1000 tworzy ten problem znacznie wcześniej niż posiadanie bliskiego samolotu na poziomie 0,1 i dalekiego samolotu w odległości 20.

Drugi problem jest wskazaniem źle utworzonej zawartości. W świecie rzeczywistym dwa obiekty nie mogą znajdować się w tym samym miejscu w tym samym czasie. W zależności od aplikacji użytkownicy mogą chcieć wiedzieć, czy nakładające się powierzchnie istnieją i gdzie się znajdują. Na przykład scena CAD budynku, który jest podstawą rzeczywistej konstrukcji, nie powinien zawierać fizycznie niemożliwe przecięcia powierzchni. Aby umożliwić inspekcję wizualną, dostępny jest tryb wyróżniania, który wyświetla potencjalne walki z jako animowany wzorzec tablicy kontrolnej.

Ograniczenia

Zapewnione środki zaradcze z są najlepszym wysiłkiem. Nie ma gwarancji, że usuwa wszystkie walki z. Ponadto środki zaradcze preferują jedną powierzchnię nad drugą. Gdy masz powierzchnie, które są zbyt blisko siebie, "niewłaściwa" powierzchnia kończy się na górze. Typowy przypadek problemu polega na tym, że tekst i inne kalkalacje są stosowane do powierzchni. Dzięki włączeniu ograniczania ryzyka walki z te szczegóły mogą łatwo zniknąć.

Zagadnienia dotyczące wydajności

  • Włączenie ograniczania ryzyka walki z nie wiąże się z niewielkim obciążeniem w zakresie wydajności.
  • Ponadto włączenie nakładki z-fighting powoduje nietrygalne obciążenie wydajności, choć może się różnić w zależności od sceny.

Dokumentacja interfejsu API

Następne kroki