Z-Buffer

Z-Buffer

Das Z-Buffering (auch Depth Buffering, Tiefenpuffer[1] oder Tiefenspeicher-Verfahren[2]) 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 („Z-Puffer“) stellt das Verfahren pixelweise fest, welche Elemente einer Szene gezeichnet werden müssen und welche verdeckt sind. Praktisch alle heutigen Grafikkarten implementieren Z-Buffering direkt in Hardware. Als Entwickler des Z-Buffer-Verfahrens gilt Edwin Catmull[3]; allerdings beschrieb Wolfgang Straßer das Prinzip etwa zur gleichen Zeit in einem anderen Kontext[4][5]. Die wichtigste Alternative zum z-Buffering ist der Raytracing-Algorithmus.

Inhaltsverzeichnis

Funktionsweise

Das Prinzip des Z-Buffering ist sehr einfach. Neben dem sichtbaren Teil des Bildspeichers, der die aktuellen Farbwerte enthält, gibt es einen weiteren Speicher, den Z-Buffer, der die Tiefe des sichtbaren Objekts an jedem Pixel enthält. Alternativ können die Pixelwerte im Framebuffer um einen z-Wert erweitert werden. Zu Beginn werden die Einträge im Z-Buffer auf einen Wert gesetzt, der für eine unendliche Entfernung steht. Der Framebuffer wird mit der Hintergrundfarbe initialisiert. Jedes Polygon wird nun 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-Buffer und im Framebuffer durch die Entfernung beziehungsweise die Farbe des aktuellen Polygons ersetzt.

Prinzip des Z-Buffers am Beispiel zweier sich schneidender Polygone


Die Reihenfolge, in der die Polygone gerastert werden, ist im Prinzip beliebig. Nicht nur Polygone, sondern beliebige weitere grafische Primitiven können mit Hilfe des Z-Buffers gerendert werden.

Die Speichergröße der Werte im Z-Buffer hat einen 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 leicht Artefakte entstehen. 16, 24 oder 32 Bit tiefe Z-Buffer erzeugen weniger Artefakte.

Auf aktuellen Grafikkarten beansprucht der Z-Buffer einen bedeutenden Teil des verfügbaren Speichers und der Datenübertragungsrate. Mit verschiedenen Methoden wird versucht, den Einfluss des Z-Buffers auf die Leistung der Grafikkarte zu reduzieren. Dies ist zum Beispiel durch die verlustfreie Kompression der Daten möglich, da das Komprimieren und Dekomprimieren der Daten kostengünstiger ist als die Erhöhung der Datenübertragungsrate einer Karte. Ein anderes Verfahren spart Löschvorgänge im Z-Buffer: die Tiefeninformation wird mit alternierendem Vorzeichen in den Z-Buffer geschrieben. Ein Bild wird mit positiven Vorzeichen gespeichert, das nächste Bild mit negativem, erst dann muss gelöscht werden. Eine weitere Möglichkeit zur Optimierung ist die Vorsortierung der Primitiven: Werden zunächst die näherliegenden Primitiven gerendert, kann bei den weiter entfernten später direkt entschieden werden, ob bzw. welche Pixel gerendert werden müssen und welche von Vordergrundobjekten verdeckt werden, wodurch Texturierungs- und Pixel-Shader-Vorgänge eingespart werden können.

Algorithmus

Pseudocode
Initialisierung:

          zBuffer durch -2
          FrameBuffer durch Hintergrundfarbe

Beginn:

          Für jedes Pixel (x,y) auf Fi
              Ermittle Farbe c und z-Koordinate z
              IF z < zBuffer(x,y)
                   zBuffer(x,y) = z
                   FrameBuffer(x,y) = c
              FI

Codierung der Tiefeninformationen

Ein computergeneriertes Bild (oben) und der Inhalt des dazugehörigen Z-Buffers (unten)

Der Bereich der Tiefeninformation im Kameraraum, der zu rendern ist, wird häufig durch den nah-Wert und fern-Wert von z definiert. Nach einer Perspektivtransformation wird der neue Wert von z, hier als z' bezeichnet, wie folgt berechnet:

z'=
\frac{\mbox{fern}+\mbox{nah}}{\mbox{fern}-\mbox{nah}} +
\frac{1}{z} \left(\frac{-2 \cdot \mbox{fern} \cdot \mbox{nah}}{\mbox{fern}-\mbox{nah}}\right)

Dabei ist z' der neue Wert von z im Kameraraum. Manchmal werden auch die Abkürzungen w und w' verwendet.

Die resultierenden Werte von z' werden auf Werte zwischen −1 und 1 normiert, wobei die Fläche bei nah den Wert −1 und die Fläche bei fern den Wert 1 erhält. Werte außerhalb dieses Bereichs stammen von Punkten, die sich nicht im Sichtbereich befinden, und sollten nicht gerendert werden.

Bei der Implementierung eines Z-Buffers werden die Werte der Scheitelpunkte eines Polygons linear interpoliert und die z'-Werte einschließlich der Zwischenwerte im Z-Buffer gespeichert. Die Werte von z' sind wesentlich enger an der Nah-Fläche verteilt und wesentlich mehr zur Fern-Fläche hin verstreut, was zu einer höheren Genauigkeit der Darstellung nahe dem Kamerastandpunkt führt. Je enger die Nah-Fläche an die Kamera gesetzt wird, desto geringer ist die Präzision im Fernbereich. Eine häufige Ursache für unerwünschte Artefakte bei entfernten Objekten ist, dass die Nah-Fläche zu eng an die Kamera gesetzt wurde.

Da die Abstandswerte nicht gleichmäßig im Z-Buffer abgelegt werden, werden nahe Objekte besser dargestellt als ferne, da ihre Werte genauer abgespeichert sind. Allgemein ist dieser Effekt erwünscht, er kann aber auch zu offensichtlichen Artefakten führen, wenn sich Objekte voneinander entfernen. Eine Variation des Z-Bufferings mit ausgeglicheneren Entfernungswerten ist das sogenannte W-Buffering. Um einen W-Buffer zu implementieren, werden die unveränderten Werte von z bzw. w in den Buffer gespeichert, im allgemeinen als Gleitkommazahlen. Diese Werte können nicht linear interpoliert werden, sondern müssen invertiert, interpoliert und wieder invertiert werden. Die resultierenden w-Werte sind, im Gegensatz zu z, gleichmäßig zwischen nah und fern verteilt. Ob ein Z-Buffer oder ein W-Buffer zu besseren Bildern führt, hängt vom jeweiligen Anwendungszweck ab.

Vor- und Nachteile

  • Vorteile
    • einfache Implementierung (sowohl in Software als auch direkt in Hardware)
    • keine Vorsortierung der Eingabe nötig
    • sehr schnell
    • einfache Parallelisierung möglich (z. B. Unterteilung in kleinere Quadranten)
    • kein wahlfreier Zugriff auf die Szene nötig
  • Nachteile
    • jedes Polygon der Eingabe wird gerendert
    • die Laufzeit wächst linear mit der Eingabegröße
    • es werden keine Zusammenhänge der Objekte ausgenutzt

Literatur

  • Tomas Akenine-Möller, Eric Haines: Real-Time Rendering. AK Peters, Natick Mass 2002, ISBN 1-56881-182-9
  • James D. Foley u. a.: Computer Graphics: Principles and Practice. Addison-Wesley, Reading 1995, ISBN 0-201-84840-6
  • David F. Rogers: Procedural Elements for Computer Graphics. WCB/McGraw-Hill, Boston 1998, ISBN 0-07-053548-5
  • Alan Watt: 3D Computer Graphics. Addison-Wesley, Harlow 2000, ISBN 0-201-39855-9

Weblinks

Einzelnachweise

  1. Hans-Joachim Bungartz u. a.: Einführung in die Computergraphik: Grundlagen, geometrische Modellierung, Algorithmen, S. 128. Vieweg, Braunschweig 2002, ISBN 3-528-16769-6
  2. Michael Bender, Manfred Brill: Computergrafik: ein anwendungsorientiertes Lehrbuch, S. 67. Hanser, München 2006, ISBN 3-446-40434-1
  3. Edwin Catmull: A Subdivision Algorithm for Computer Display of Curved Surfaces. Dissertation, Report UTEC-CSc-74-133, Computer Science Department, University of Utah, Salt Lake City 1974
  4. Wolfgang Straßer: Schnelle Kurven- und Flächendarstellung auf graphischen Sichtgeräten. Dissertation, TU Berlin 1974
  5. W. K. Giloi: Computer Graphics Pioneers: the Giloi’s School of Computer Graphics – Starting Computer Graphics in Germany. ACM SIGGRAPH Computer Graphics 35, 4 (Nov. 2001): 12–13, ISSN 0097-8930

Wikimedia Foundation.

Игры ⚽ Нужно сделать НИР?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Buffer overflow protection — refers to various techniques used during software development to enhance the security of executable programs by detecting buffer overflows on stack allocated variables as they occur and preventing them from becoming serious security… …   Wikipedia

  • Buffer — can refer to: * Buffer state, a country lying between two potentially hostile greater powers, thought to prevent conflict between them * Buffer zone, any area that keeps two or more other areas distant from one another, may be demilitarized *… …   Wikipedia

  • Buffer — Buffer, Stoßballen (buffing apparatus, buffers; appareils de choc, tampons; respingenti, paraurti). B. sind an den Stirnseiten der Eisenbahnfahrzeuge angebrachte Konstruktionsteile, die den Zweck haben, die auf die Fahrzeuge nach deren… …   Enzyklopädie des Eisenbahnwesens

  • Buffer triestado — Saltar a navegación, búsqueda En electrónica digital, la lógica triestado permite puertos de salida con valor 0,1 ò Hi Z (High Impedance).Es este último estado el que proporciona los buffer triestado. El estado Hi Z pone la salida en alta… …   Wikipedia Español

  • buffer — buff‧er [ˈbʌfə ǁ ər] noun [countable] 1. COMPUTING a place in a computer s memory for storing information temporarily: • Any data still in the file buffer is written to the file before the file is closed. 2. something that protects something from …   Financial and business terms

  • Buffer Zone, Karachi — Buffer Zone is one of the neighbourhoods of North Nazimabad Town in Karachi, Sindh, Pakistan. [ [http://www.karachicity.gov.pk/town/index.asp?txtTown=N.Nazimabad North Nazimabad Town Government of Karachi] ] There are several ethnic groups… …   Wikipedia

  • Buffer — Saltar a navegación, búsqueda El termino buffer puede referirse: En informática, un buffer de datos es una ubicación de la memoria en una computadora o en un instrumento digital reservada para el almacenamiento temporal de información digital,… …   Wikipedia Español

  • Buffer (navy) — Buffer is the colloquial title for the senior seaman sailor in a Commonwealth of Nations Navy ship. The formal title is Chief Boatswain s Mate.This person is typically a Chief Petty Officer in frigates or destroyers, and in larger ships may be a… …   Wikipedia

  • Buffer Credits — werden auch buffer to buffer credits genannt. Sie gewährleisten die Kommunikation in einem Fibre Channel Storage Area Network (SAN), insbesondere bei großen Distanzen zwischen den Geräten. Da die Signale nicht schneller als Lichtgeschwindigkeit… …   Deutsch Wikipedia

  • buffer stock — ➔ stock1 * * *    Stock of commodities held by an international organization that will aim to stabilize prices and supplies by buying and selling from its stockpile. * * * buffer stock UK US noun [C or U] ► ECONOMICS, FINANCE a large supply of a… …   Financial and business terms

  • Buffer credits — Buffer credits, also called buffer to buffer credits (BBC) are used as a flow control method by Fibre Channel technology and represent the number of frames a port can store. Each time a port transmits a frame that port s BB Credit is decremented… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”