Z-Fighting-Minimierung
Wenn zwei dreieckige Flächen sich überschneiden, ist unklar, welche über der anderen gerendert werden soll. Das Ergebnis unterscheidet sich sogar per Pixel, was zu Artefakten führt, die von der Kameraansicht abhängen. Wenn die Kamera oder das Gittermodell bewegt wird, kommt es zu einem sehr offensichtlichen Flimmern der Muster. Diese Artefakte werden als Z-Fighting bezeichnet. Bei Augmented Reality- und Virtual Reality-Anwendungen wird das Problem verstärkt, da sich am Kopf angebrachte Geräte naturgemäß ständig bewegen. Damit Unannehmlichkeiten für Benutzer verhindert werden können, bietet Azure Remote Rendering die Funktion zur Minderung von Z-Fighting.
Hinweis
Die Z-Fighting-Minderungseinstellungen haben keine Auswirkungen auf das Rendering von Punktwolken.
Z-Fighting-Minderungsmodi
Situation | Ergebnis |
---|---|
Reguläres Z-Fighting | |
Aktivierte Z-Fighting-Minderung | |
Aktivierte Schachbrettmusterhervorhebung |
Mit dem folgenden Code wird die Z-Fighting-Minderung aktiviert:
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);
}
Hinweis
Die Z-Fighting-Minderung ist eine globale Einstellung, die sich auf alle gerenderten Gittermodelle auswirkt.
Gründe für Z-Fighting
Z-Fighting tritt hauptsächlich aufgrund von zwei Gründen auf:
- Wenn Oberflächen sehr weit von der Kamera entfernt sind, verschlechtert sich die Genauigkeit der Tiefenwerte, wodurch die Werte nicht mehr unterschieden werden können.
- Wenn sich Flächen in einem Gittermodell physisch überlappen
Das erste Problem kann jederzeit auftreten und ist schwer zu beseitigen. Wenn diese Situation in Ihrer Anwendung auftritt, achten Sie darauf, das Entfernungsverhältnis zwischen der nahen Ebene und der entfernten Ebene möglichst gering zu halten. Zum Beispiel wird dieses Problem bei einem Abstand von „0,01“ der nahen Ebene und „1000“ der entfernten Ebene weitaus früher ausgelöst als bei einem Abstand von „0,1“ der nahen Ebene und „20“ der entfernten Ebene.
Das zweite Problem ist ein Hinweis auf schlecht geschriebenen Inhalt. In der echten Welt können sich zwei Objekte nicht gleichzeitig an genau derselben Stelle befinden. Je nach Anwendung möchten Benutzer möglicherweise wissen, ob überlappende Oberflächen vorhanden sind und wo sie sich befinden. Beispielsweise sollte eine CAD-Darstellung eines Gebäudes, die als Grundlage für eine reale Konstruktion dient, keine physisch unmöglichen Oberflächenüberschneidungen enthalten. Für die visuelle Untersuchung wird der Hervorhebungsmodus zur Verfügung gestellt, der potenzielles Z-Fighting mit einem animierten Schachbrettmuster anzeigt.
Begrenzungen
Die bereitgestellte Z-Fighting-Minderung stellt die bestmögliche Maßnahme dar. Es lässt sich jedoch nicht sicherstellen, dass Z-Fighting vollständig beseitigt wird. Außerdem bevorzugt die Entschärfung eine Fläche gegenüber einer anderen. Im Fall von Flächen, die sich zu nah beieinander befinden, liegt möglicherweise die „falsche Fläche“ über der anderen. Ein Problemfall tritt häufig auf, wenn Text oder andere Bilder auf eine Oberfläche angewendet werden. Bei aktivierter Z-Fighting-Minderung könnten diese Details einfach verschwinden.
Überlegungen zur Leistung
- Durch Aktivieren der Z-Fighting-Minderung kommt es nur zu geringem oder gar keinem zusätzlichen Leistungsaufwand.
- Darüber hinaus kommt es bei Aktivierung der Z-Fighting-Überlagerung zu einem nicht trivialen Leistungsmehraufwand. Dieser kann jedoch je nach Darstellung variieren.
API-Dokumentation
- C# RenderingConnection.ZFightingMitigationSettings (Eigenschaft)
- C++ RenderingConnection::ZFightingMitigationSettings()