Z-Pufferung

In der Computergrafik ist Z-Pufferung das Management von Bildtiefe-Koordinaten in der dreidimensionalen (3.) Grafik, die gewöhnlich in der Hardware manchmal in der Software getan ist. Es ist eine Lösung des Sichtbarkeitsproblems, das das Problem des Entscheidens ist, welche Elemente einer gemachten Szene sichtbar sind, und das verborgen wird. Der Algorithmus des Malers ist eine andere allgemeine Lösung, die, obwohl weniger effizient, auch nichtundurchsichtige Szene-Elemente behandeln kann. Z-Pufferung ist auch bekannt als Tiefe-Pufferung.

Wenn ein Gegenstand gemacht wird, wird die Tiefe eines erzeugten Pixels (z Koordinate) in einem Puffer (der Z-Puffer oder Tiefe-Puffer) versorgt. Dieser Puffer wird gewöhnlich als eine zweidimensionale Reihe (x-y) mit einem Element für jedes Schirm-Pixel eingeordnet. Wenn ein anderer Gegenstand der Szene in demselben Pixel gemacht werden muss, vergleicht die Methode die zwei Tiefen und wählt einen näheren am Beobachter. Die gewählte Tiefe wird dann zum Z-Puffer gespart, den alten ersetzend. Schließlich wird der Z-Puffer der Methode erlauben, die übliche Tiefe-Wahrnehmung richtig wieder hervorzubringen: Ein naher Gegenstand verbirgt einen weiteren. Das wird Z-Auswählen genannt.

Die Körnung eines Z-Puffers hat einen großen Einfluss auf die Szene-Qualität: Ein 16-Bit-Z-Puffer kann auf Kunsterzeugnisse hinauslaufen (genannt "Z-Kämpfen"), wenn zwei Gegenstände sehr einander nah sind. Ein 24-bit- oder 32-Bit-Z-Puffer benimmt sich viel besser, obwohl das Problem ohne zusätzliche Algorithmen nicht völlig beseitigt werden kann. Ein 8-Bit-Z-Puffer wird fast nie verwendet, da er zu wenig Präzision hat.

Gebrauch

Z-Pufferdaten im Gebiet des Videoredigierens erlauben, 2. Videoelemente im 3D-Raum zu verbinden, virtuelle Sätze, "geisterhafter Übergang durch die Wand" Effekten und komplizierte Effekten erlaubend, wie, des Videos auf Oberflächen kartografisch darzustellen. Eine Anwendung für den Maya, genannt IPR, erlaubt, Postübergabe texturing auf Gegenständen durchzuführen, vielfache Puffer wie Z-Puffer verwertend, Alpha, um id, UV Koordinaten und irgendwelche Daten einzuwenden, hat als nützlich für den Postproduktionsprozess gemeint, Zeit sparend, die sonst in der Wiederübergabe des Videos vergeudet ist.

Z-Pufferdaten, die dabei erhalten sind, eine Oberfläche von einem POV eines Lichtes zu machen, erlauben die Entwicklung von Schatten in einem scanline renderer, durch die Projektierung der Z-Pufferdaten auf den Boden und die betroffenen Oberflächen unter dem Gegenstand. Das ist derselbe Prozess, der in non-raytracing Weisen durch den freien und offenen sourced 3D-Anwendungsmixer verwendet ist.

Entwicklungen

Sogar mit der kleinen genug Körnung können Qualitätsprobleme entstehen, wenn die Präzision in den Entfernungswerten des Z-Puffers gleichmäßig über die Entfernung nicht ausgebreitet wird. Nähere Werte sind viel genauer (und kann folglich nähere Gegenstände besser zeigen) als Werte, die weiter weg sind. Allgemein ist das wünschenswert, aber manchmal wird es Kunsterzeugnisse veranlassen zu erscheinen, weil Gegenstände entfernter werden. Eine Schwankung auf der Z-Pufferung, die auf gleichmäßiger verteilte Präzision hinausläuft, wird W-Pufferung (sieh unten) genannt.

Am Anfang einer neuen Szene muss der Z-Puffer zu einem definierten Wert, gewöhnlich 1.0 geklärt werden, weil dieser Wert die obere Grenze (auf einer Skala 0 bis 1) von der Tiefe ist, bedeutend, dass kein Gegenstand an diesem Punkt durch die Betrachtung frustum da ist.

Die Erfindung des Z-Pufferkonzepts wird meistenteils Edwin Catmull zugeschrieben, obwohl Wolfgang Straßer auch diese Idee in seiner 1974-Doktorarbeit beschrieben hat.

Auf neuen PC-Grafikkarten (1999-2005) verwendet Z-Puffermanagement einen bedeutenden Klotz der verfügbaren Speicherbandbreite. Verschiedene Methoden sind verwendet worden, um die Leistungskosten der Z-Pufferung zu reduzieren, wie Lossless-Kompression (sind Computermittel, zusammenzupressen zu/dekomprimieren, preiswerter als Bandbreite), und extreme schnelle Hardware z-clear, der veraltet "ein Rahmen positiv, ein Rahmen negativer" Trick macht (klaren Zwischenrahmen auslassend, hat zusammen das Verwenden Zahlen unterzeichnet, um Tiefen klug zu überprüfen).

Z-Auswählen

In der Übergabe ist Z-Auswählen frühe Pixel-Beseitigung, die auf der Tiefe, eine Methode gestützt ist, die eine Zunahme in der Leistung zur Verfügung stellt, wenn die Übergabe von verborgenen Oberflächen kostspielig ist. Es ist eine direkte Folge der Z-Pufferung, wo die Tiefe jedes Pixel-Kandidaten im Vergleich zur Tiefe der vorhandenen Geometrie ist, hinter der es verborgen werden könnte.

Wenn

man einen Z-Puffer verwendet, kann ein Pixel (verworfen) gepflückt werden, sobald seine Tiefe bekannt ist, der es möglich macht, den kompletten Prozess der Beleuchtung und texturing ein Pixel auszulassen, das irgendwie nicht sichtbar sein würde. Außerdem wird zeitraubendes Pixel shaders allgemein für die gepflückten Pixel nicht durchgeführt. Das macht Z-Auswählen einen guten Optimierungskandidaten in Situationen, wo fillrate, Beleuchtung, texturing oder Pixel shaders die Hauptengpässe sind.

Während Z-Pufferung der Geometrie erlaubt, unsortiert zu werden, erlaubt das Sortieren von Vielecken durch die Erhöhung der Tiefe (so einen Algorithmus eines Rückmalers verwendend), jedem Schirm-Pixel, weniger Male gemacht zu werden. Das kann zunehmen Leistung in fillrate-beschränkten Szenen mit großen Beträgen dessen überziehen, aber wenn nicht verbunden mit der Z-Pufferung leidet sie unter strengen Problemen wie:

  • Vielecke könnten einander in einem Zyklus verschließen (z.B: Dreieck A verschließt B, B verschließt C, C verschließt A), und
  • es gibt keinen kanonischen "nächsten" Punkt auf einem Dreieck (z.B: Ganz gleich, ob Sorte-Dreiecke durch ihren centroid oder nächsten Punkt oder weitesten Punkt, man immer zwei Dreiecke A und B solch finden kann, dass A "näher" ist, aber in Wirklichkeit sollte B zuerst gezogen werden).

Als solcher kann ein Algorithmus eines Rückmalers nicht als eine Alternative zum Z-Auswählen (ohne anstrengende Neugestaltung) verwendet werden, außer als eine Optimierung zum Z-Auswählen. Zum Beispiel könnte eine Optimierung sein, Vielecke sortiert gemäß x/y-location und Z-Tiefe zu halten, um Grenzen zur Verfügung zu stellen, um schnell zu bestimmen, ob zwei Vielecke vielleicht eine Verstopfungswechselwirkung haben könnten.

Algorithmus

Gegeben: Eine Liste von Vielecken {P1, P2..... Pn }\

Produktion: Eine FARBEN-Reihe, die die Intensität der sichtbaren Vieleck-Oberflächen zeigt.

Initialisieren Sie:

Zeichen: Z-Tiefe und Z-Puffer (x, y) sind positiv........

Z-Puffer (x, y) =max Tiefe; und

FARBE (x, y) =background Farbe.

Beginnen Sie:

für (jedes Vieleck P in der Vieleck-Liste) tun {\

dafür (jedes Pixel (x, y), der P) durchschneidet, tun {\

Berechnen Sie Z-Tiefe von P an (x, y)

Wenn (Z-Tiefe und Wert dessen. Nach einer Perspektivetransformation wird der neue Wert dessen, oder, definiert durch:

\frac {\\mathit {weit} + \mathit {nahe}} {\\mathit {weiter}-\mathit {nahe}} +

\frac {1} {z} \left (\frac {-2 \cdot \mathit {weiter} \cdot \mathit {nahe}} {\\mathit {weiter}-\mathit {in der Nähe von} }\\Recht)

</Mathematik>

Nach einem orthografischen Vorsprung wird der neue Wert dessen, oder, definiert durch:

2 \cdot \frac {\\mathit {weiter}-\mathit {nahe}} - 1

</Mathematik>

wo der alte Wert unter Ausschluss der Öffentlichkeit des Raums ist, und manchmal genannt wird oder.

Die resultierenden Werte dessen werden zwischen den Werten von-1 und 1 normalisiert, wo das Flugzeug an-1 ist und das Flugzeug an 1 ist. Werte außerhalb dieser Reihe entsprechen Punkten, die nicht in der Betrachtung frustum sind und nicht gemacht werden sollten.

Festkommadarstellung

Gewöhnlich werden diese Werte im Z-Puffer des Hardware-Grafikgaspedals im festen Punkt-Format versorgt. Zuerst werden sie zu einer allgemeineren Reihe normalisiert, die [0,1] durch das Ersetzen der passenden Konvertierung in die vorherige Formel ist:

\frac {\\mathit {weit} + \mathit {nahe}} {2 \cdot \left (\mathit {weiter}-\mathit {nahe} \right)} +

\frac {1} {z} \left (\frac {-\mathit {weiter} \cdot \mathit {nahe}} {\\mathit {weiter}-\mathit {in der Nähe von} }\\Recht) +

\frac {1} {2 }\

</Mathematik>

Zweitens wird die obengenannte Formel damit multipliziert, wo d die Tiefe des Z-Puffers (gewöhnlich 16, 24 oder 32 Bit) und das Runden des Ergebnisses zu einer ganzen Zahl ist:

\frac {\\mathit {weit} + \mathit {nahe}} {2 \cdot \left (\mathit {weiter}-\mathit {nahe} \right)} +\frac {1} {z} \left (\frac {-\mathit {weiter} \cdot \mathit {nahe}} {\\mathit {weiter}-\mathit {in der Nähe von} }\\Recht) +

\frac {1} {2} \right) \right\rfloor

</Mathematik>

Diese Formel kann inversed und derivated sein, um die Z-Pufferentschlossenheit zu berechnen (die 'Körnung' hat früher erwähnt). Das Gegenteil des obengenannten:

\frac {-\mathit {weiter} \cdot \mathit {nahe}} {\\frac {z'} {S }\\ist (\mathit {weit} - \mathit {in der Nähe von }\\Recht) - {weit}} abgereist

\frac {-\mathit S \cdot {weiter} \cdot \mathit {nahe}} {z '\left (\mathit {weit} - \mathit {in der Nähe von }\\Recht) - {weiter} \cdot S} </Mathematik>

wo

Die Z-Pufferentschlossenheit in Bezug auf den Kameraraum würde der zusätzliche Wert sein hat sich aus der kleinsten Änderung in der ganzen Zahl ergeben, die im Z-Puffer versorgt ist, der +1 oder-1 ist. Deshalb kann diese Entschlossenheit von der Ableitung als eine Funktion berechnet werden:

\frac {-1 \cdot-1 \cdot \mathit S \cdot {weiter} \cdot \mathit {in der Nähe von} }\

{\\hat (z '\left (\mathit {weit} - \mathit {in der Nähe von }\\Recht) - {weiten} \cdot S \right) ^2 }\verlassen

\cdot \left (\mathit {weit} - \mathit {in der Nähe von }\\Recht)

</Mathematik>

Das Ausdrücken davon zurück unter Ausschluss der Öffentlichkeit Raumbegriffe, durch das Ersetzen durch das obengenannte:

\frac {-1 \cdot-1 \cdot \mathit S \cdot {weiter} \cdot \mathit {nahe} \cdot \left (\mathit {weit} - \mathit {in der Nähe von }\\Recht) }\

{\\hat (\mathit S \cdot \left (\frac {-\mathit {weiter} \cdot \mathit {nahe}} {z} + \mathit {weiter }\\Recht) - {weiten} \cdot S \right) ^2} = verlassen

</Mathematik>

\frac {\left (\mathit {weit} - \mathit {in der Nähe von }\\Recht) \cdot z^2} {S \cdot \mathit {weiter} \cdot \mathit {nahe}} =

</Mathematik>

\frac {z^2} {S \cdot \mathit {nahe}}-\frac {z^2} {S \cdot \mathit {weit}} =

</Mathematik>

~

\frac {z^2} {S \cdot \mathit {in der Nähe von} }\

</Mathematik>

Das zeigt, dass die Werte dessen viel dichter in der Nähe vom Flugzeug, und viel mehr wenig weiter weg gruppiert werden, auf bessere an der Kamera nähere Präzision hinauslaufend. Je kleiner das Verhältnis, desto weniger Präzision ist, dort hat weit weg der Flugzeug-Satz ist zu nah ein häufiger Grund von unerwünschten Übergabe-Kunsterzeugnissen in entfernteren Gegenständen.

Um einen Z-Puffer durchzuführen, werden die Werte dessen über den Schirm-Raum zwischen den Scheitelpunkten des aktuellen Vielecks geradlinig interpoliert, und diese Zwischenwerte werden allgemein im Z-Puffer im festen Punkt-Format versorgt.

W-Puffer

Um einen W-Puffer durchzuführen, werden die alten Werte unter Ausschluss der Öffentlichkeit des Raums, oder, im Puffer allgemein im Schwimmpunkt-Format versorgt. Jedoch können diese Werte nicht über den Schirm-Raum von den Scheitelpunkten geradlinig interpoliert werden - sie müssen gewöhnlich umgekehrt, interpoliert, und dann wieder umgekehrt werden. Die resultierenden Werte, im Vergleich damit, sind gleichmäßig zwischen unter Drogeneinfluss und. Es gibt Durchführungen des W-Puffers, die die Inversionen zusammen vermeiden.

Ob ein Z-Puffer oder W-Puffer auf ein besseres Image hinauslaufen, hängt von der Anwendung ab.

Siehe auch

  • Edwin Catmull - Erfinder des Z-Pufferkonzepts.
  • 3D-Computergrafik
  • Z-Kämpfen
  • Unregelmäßiger Z-Puffer
  • Z-Ordnung
  • Hierarchischer Z-Puffer

Links

Referenzen

sieh W.K. Giloi, J.L. Encarnação, W. Straßer. "Die Schule von Giloi der Computergrafik". Computergrafik 35 4:12-16.


Kartografisch darstellende Textur / Farley Mowat
Impressum & Datenschutz