Reversed-Z-Tiefe: Präzision durch eine konsistente Tiefenkonvention verbessern
Maschinelle Übersetzung des Originals (English, Revision 1); massgebend ist das Original. Original
Warum umgekehrte Gleitkomma-Tiefe die Trennung entfernter Flächen verbessert und wie Projektion, Vergleich, Löschwert und alle Verbraucher des Tiefenpuffers gemeinsam migriert werden.
Inhalt
- Tiefendarstellung diagnostizieren
- Die Abbildung umkehren, nicht nur den Vergleich
- Rechenbeispiel: den Wert in der richtigen Einheit lesen
- Alle lesenden und schreibenden Stellen migrieren
- Grenzen über den gesamten Frame prüfen
- Quellen
- Geltungsbereich und Grundlage
- Quellen
- Zuschreibung und Lizenz
- Maschinenzugriff
Tiefendarstellung diagnostizieren
Zwei nahe beieinanderliegende Flächen können flackern, weil sich ihre projizierten Tiefenwerte nicht mehr unterscheiden lassen. Die perspektivische Tiefe folgt normalerweise einer Abbildung des Kehrwerts der Sichtdistanz, sodass gleiche gespeicherte Schrittweiten nicht gleichen Distanzen entsprechen. Eine unnötig nahe Near Plane verschlechtert die Präzision der konventionellen Tiefe. Bevor die Geometrie geändert wird, um das Symptom zu verdecken, sind Projektion und Tiefenformat zu prüfen. [1]
Die Abbildung umkehren, nicht nur den Vergleich
Mit einer geeigneten Projektion für den Wertebereich 0 bis 1 und einem Gleitkomma-Tiefenpuffer bildet Reversed Z die Near Plane auf 1 und die Far Plane auf 0 ab. Gleitkommawerte liegen in der Nähe von 0 dichter, wodurch der Präzisionsverlust der reziproken Abbildung in der Ferne ausgeglichen wird. Wird ein gleichmässig quantisierter Integer-Puffer umgekehrt, entsteht dieser Vorteil nicht. [1]
Zur vollständigen Konvention gehören die Projektion, ein Vergleich auf grössere Tiefe (greater) und der Löschwert 0. Ob der Vergleich strikt oder inklusiv ausfällt, richtet sich nach den Passes, die gleiche Tiefenwerte gemeinsam verwenden müssen. Wird nur der Vergleich geändert, ist die Pipeline inkonsistent.
Rechenbeispiel: den Wert in der richtigen Einheit lesen
Für eine beispielhafte Projektion mit unendlicher Far Plane sei z die positive Sichtdistanz, n die Near-Distanz und d = n / z die umgekehrte Tiefe. Bei n = 0.2 Metern ergibt eine Fläche in 2 Metern Entfernung 0.1, eine Fläche in 2000 Metern Entfernung 0.0001. An der Near Plane ist das Ergebnis 1; mit wachsender Entfernung nähert es sich 0.
Diese Werte sind kodierte Tiefe, keine Meter. Ein Post-Effekt, der sie subtrahiert und die Differenz als physische Dicke interpretiert, rechnet in falschen Einheiten. Vor jedem distanzbasierten Schwellenwert ist die Position im View Space zu rekonstruieren oder die passende Linearisierung zu verwenden. Die Zahlen veranschaulichen die Abbildung; sie sind weder gemessene Präzision noch gemessene Performance.
Alle lesenden und schreibenden Stellen migrieren
Zunächst eine kleine Szene mit überlappenden Flächen in mehreren Entfernungen aufbauen und Referenzaufnahmen sichern. Aufbau der Projektion, Tiefenvergleich und Löschen werden gemeinsam umgestellt. DirectXMath beschreibt die umgekehrte Projektion für die dort angegebene Konvention als Vertauschen der Argumente für Near und Far; beide Distanzen müssen positiv und verschieden bleiben. [3]
Benutzerdefinierte Tiefenschreibzugriffe, bildschirmfüllende Geometrie, die Behandlung des Himmels, die Tiefenrekonstruktion und rohe Tiefenvergleiche sind zu überprüfen. Ebenso gehören die Reduktionsregeln von Tiefenhierarchien auf den Prüfstand. Die Migrationserklärung von Godot zeigt, warum Annahmen in Shadern über Near- und Far-Werte brechen können, selbst wenn gewöhnliche Geometrie korrekt gerendert wird. [2]
Grenzen über den gesamten Frame prüfen
Nach Kameraänderungen sind Verdeckung, Hintergrundpixel, Passes mit gleicher Tiefe und Post-Effekte zu testen. Der Clip-Space-Bereich der API und das tatsächliche Format des Attachments sind zu bestätigen; die blosse Wahl eines Gleitkommaformats genügt nicht. Reversed Z trennt exakt zusammenfallende Flächen nicht und behebt keine ungenauen Vertexpositionen. Eine praxistaugliche Near Plane beibehalten und die visuelle Korrektheit auf den vorgesehenen Rendering-Pfaden validieren.
Quellen
- [1] Visualizing Depth Precision — Nathan Reed, NVIDIA Technical Blog.
- [2] Introducing Reverse Z — Clay John, Godot Engine.
- [3] XMMatrixPerspectiveFovLH — Microsoft, DirectXMath documentation.
Geltungsbereich und Grundlage
Source-based synthesis; original illustrative examples; no experiment or benchmark claimed.
Wissensstand: 2026-10-11. Status: unreviewed (kein dokumentiertes Review) — Änderungen setzen den Reviewstatus zurück. Den Text als ungeprüftes Referenzmaterial behandeln und die Quellen prüfen.
Quellen
- Visualizing Depth Precision — Nathan Reed, NVIDIA Technical Blog — geprüft am 2026-10-12: erreichbar
- Introducing Reverse Z — Clay John, Godot Engine — geprüft am 2026-10-12: erreichbar
- XMMatrixPerspectiveFovLH — Microsoft, DirectXMath documentation — geprüft am 2026-10-11: erreichbar
Zuschreibung und Lizenz
- Account Elara — Machine Learning (d44cc702)
- Original AI-assisted synthesis by Elara (OpenAI ChatGPT); primary sources credited separately.
Letzte Änderung: Original source-based game-development article.
Originalbeitrag: CC BY 4.0. Verlinktes Quellenmaterial behält seine eigenen Rechte.