Z: Unterschied zwischen den Versionen
Zeile 19: | Zeile 19: | ||
:•dass Flächen, die parallel zueinander liegen, mit einem Abstand von mindestens einem, besser zwei oder gar vier Pixeln Abstand gezeichnet werden,<br> | :•dass Flächen, die parallel zueinander liegen, mit einem Abstand von mindestens einem, besser zwei oder gar vier Pixeln Abstand gezeichnet werden,<br> | ||
:•dass diese Flächen aus annähernd gleichgroßen Polygonen bestehen, was durch [[T|Tesselierung]] (Teilung) von großen, meist dahinter liegenden Flächen erfolgen kann (große Flächen können kleinere Flächen leicht verdecken, was durch die Angleichung der Größenverhältnisse zu verhindern ist);<br> | :•dass diese Flächen aus annähernd gleichgroßen Polygonen bestehen, was durch [[T|Tesselierung]] (Teilung) von großen, meist dahinter liegenden Flächen erfolgen kann (große Flächen können kleinere Flächen leicht verdecken, was durch die Angleichung der Größenverhältnisse zu verhindern ist);<br> | ||
− | Wenn keine andere Alternative besteht, kann den äußeren, dem Betrachter liegenden Flächen, ein [[Z|Z-Offset]] zugewiesen werden, was aber zwangsläufig zur Bildung eines weiteren [[R|RGDs]] führt und die [[I# | + | Wenn keine andere Alternative besteht, kann den äußeren, dem Betrachter liegenden Flächen, ein [[Z|Z-Offset]] zugewiesen werden, was aber zwangsläufig zur Bildung eines weiteren [[R|RGDs]] führt und die [[I#Instanziierungseigenschaften|Instanzierungseigenschaften]] verschlechtert oder die Instanzierung des 3D-Modells gar unmöglich macht. |
Version vom 15. Dezember 2016, 13:51 Uhr
Z-Buffer
Z-Buffer. Das Z-Buffering (auch Depth Buffering, Tiefenpuffer oder Tiefenspeicher-Verfahren) ist ein Verfahren der Computergrafik zur Verdeckungsberechnung, also um die vom Betrachter aus sichtbaren dreidimensionalen Flächen in einer Computergrafik zu ermitteln. Durch Tiefeninformationen in einem sogenannten Z-Buffer stellt das Verfahren pixelweise fest, welche Flächen in einem 3D-Modell sichtbar sind und damit gezeichnet werden müssen und welche verdeckt sind. Das Prinzip des Verfahrens, das so gut wie alle modernen Grafikkarten unterstützen, ist einfach:
Neben dem sichtbaren Teil des Bildspeichers, dem Frame-Buffer, der die aktuellen Farbwerte enthält, gibt es einen weiteren Speicher, den Z-Buffer, der für jeden Pixel des sichtbaren Objekts den z-Wert für die Tiefe im Raum speichert. Alternativ können die Pixelwerte im Frame-Buffer um den jeweiligen z-Wert erweitert werden. Zu Beginn des Buffering-Verfahrens werden die Einträge im Z-Buffer auf einen Wert gesetzt, der für eine unendliche Entfernung steht. Gleichzeitig wird der Frame-Buffer mit der Hintergrundfarbe initialisiert. Dann wird jedes Polygon gerastert. Nur wenn der aktuell gerasterte Punkt des Polygons nicht weiter weg vom Betrachter liegt als der Punkt, dessen Entfernung im Z-Buffer eingetragen ist, werden die Werte im Z- und im Frame-Buffer durch die Entfernung beziehungsweise die Farbe des aktuellen Polygons ersetzt. Die Reihenfolge, in der die Polygone gerastert werden, ist im Prinzip beliebig, wobei die Grafik-Engine von EEP diese von hinten nach vorne berechnet. Die Speichergröße der Werte im Z-Buffer hat großen Einfluss auf die Qualität des gerenderten Bildes. Wenn zwei Objekte sehr eng beieinander liegen, können bei einem Z-Buffer mit 8 Bit pro Pixel Artefakte entstehen, die sogenannten Z-Fighting-Effekte. Z-Buffer mit 16, 24 oder 32 Bit pro Pixel erzeugen weniger Artefakte. Auf aktuellen Grafikkarten beansprucht der Z-Buffer einen bedeutenden Teil des verfügbaren Speichers und der Datenübertragungsrate. Um den Einfluss des Z-Buffers auf die Leistung der Grafikkarte zu reduzieren, werden verschiedene Methoden erprobt.
Z-Fighting
Z-Fighting, (engl.: Z-Kampf) ist ein Artefakt, der beim Rendering von 3D-Szenen entstehen kann, wenn zwei oder mehr Polygone ähnliche oder gleiche Tiefenwerte (Z-Buffer-Werte) erhalten. Der Fehler tritt auf, wenn Polygone, die nahe beieinander liegen und sozusagen um die Rangfolge und den Platz auf dem Bildschirm konkurrieren. Dies führt dazu, dass die betroffenen Flächen einander durchdringen, was auf dem Bildschirm Flimmereffekte oder Streifenbildung provozieren kann.
Der Fehler entsteht, wenn die Speichergröße des Z-Buffers nicht ausreicht, um die Tiefenwerte exakt genug abzutasten, so dass Flächen mit ähnlicher, aber dennoch ungleicher Tiefe mit gleicher Tiefe berechnet werden. Um die Z-Fighting-Artefakte zu vermeiden, sollte darauf geachtet werden,
- •dass Flächen, die parallel zueinander liegen, mit einem Abstand von mindestens einem, besser zwei oder gar vier Pixeln Abstand gezeichnet werden,
- •dass diese Flächen aus annähernd gleichgroßen Polygonen bestehen, was durch Tesselierung (Teilung) von großen, meist dahinter liegenden Flächen erfolgen kann (große Flächen können kleinere Flächen leicht verdecken, was durch die Angleichung der Größenverhältnisse zu verhindern ist);
Wenn keine andere Alternative besteht, kann den äußeren, dem Betrachter liegenden Flächen, ein Z-Offset zugewiesen werden, was aber zwangsläufig zur Bildung eines weiteren RGDs führt und die Instanzierungseigenschaften verschlechtert oder die Instanzierung des 3D-Modells gar unmöglich macht.
Z-Offset
Z-Offset ist ein zusätzlicher, vom Konstrukteur erzwungener Rang-Wert, der die Tiefenwerte im Z-Buffer beeinflusst. Das Verfahren wird eingesetzt, um Z-Fighting-Effekte zu verhindern. Oft ist es schwierig oder fast unmöglich, zwei Polygone in annähernd gleicher Position so zu zeichnen, dass die Flächen einander nicht durchdringen (z.B. Fahrbahnmarkierungen auf den Strassen; 1. und 2.-Klasse-Aufkleber auf Waggonwänden, etc.). In solchen Fällen bietet sich das Z-Offset an. Dieses vermittelt der Rendering-Engine unmissverständlich, dass die mit Z-Offset versehene Fläche vor eine andere Fläche - vom Betrachter aus gesehen - gezeichnet werden muss. Die Anwendung des Z-Offsets bietet den Vorteil, dass das Drahtgitter der dahinter liegenden Fläche nicht tesseliert werden muss und dass die Flächen im geringem Abstand oder sogar auf den gleichen Koordinaten platziert werden dürfen. Nachteilig ist, dass für die mit Z-Offset versehenen Modellteile automatisch weitere RGDs angelegt werden, sodass das Rendering-Verfahren verlangsamt wird!