Privacy Policy Cookie Policy Terms and Conditions Z-Buffer - Wikipedia

Z-Buffer

aus Wikipedia, der freien Enzyklopädie

Das Z-Buffering (deutsch Z-Pufferung) wird in der Computergraphik angewendet, um die verdeckten Flächen in einer dreidimensionalen Grafik zu ermitteln. Durch die Informationen im Z-Buffer (deutsch Z-Puffer) stellt das Verfahren pixelweise fest, welche Elemente einer Szene gezeichnet werden müssen und welche verdeckt sind. Heutige Grafikkarten unterstützen Z-Buffering als Standardverfahren zur Lösung des Sichtbarkeitsproblems in Hardware.

Wenn ein Objekt von einer 3D-Grafikkarte gerendert wird, wird die Tiefeninformation der erzeugten Pixel (die Z-Koordinate) im so genannten Z-Buffer abgelegt. Dieser Puffer, gewöhnlich als zweidimensionales Array (mit den Indizes X und Y) aufgebaut, enthält also für jeden Bildschirmpunkt einen Tiefenwert. Wenn ein anderes Objekt im selben Pixel dargestellt werden soll, vergleicht die Grafikkarte die beiden Tiefenwerte und wählt denjenigen Pixel, der dem Beobachter am nächsten ist. Die Tiefeninformation des ausgewählten Pixels wird dann im Z-Buffer gespeichert und ersetzt den alten Wert. Durch den Z-Buffer kann die Grafikkarte die natürliche Tiefenwahrnehmung nachbilden: ein nahe gelegenes Objekt verdeckt ein fernes Objekt.

Die Speichertiefe eines Z-Buffers hat einen großen Einfluss auf die Qualität der Szene: Wenn zwei Objekte sehr eng beieinander liegen, können beim 8-Bit Z-Buffer leicht Artefakte entstehen. Ein Z-Buffer mit 16-Bit oder 32-Bit Speichertiefe erzeugt weniger Artefakte.

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, aber er kann auch zu offensichtlichen Artefakten führen, wenn sich Objekte voneinander entfernen. Eine Variation des Z-Bufferings mit ausgeglicheneren Entfernungswerten ist das so genannte W-Buffering.

Zum Erstellen einer neuen Szene muss der Z-Buffer gelöscht werden, in dem er einen einheitlichen Wert (üblicherweise Eins) erhält.

Auf aktuellen Grafikkarten (1999-2003) beansprucht der Z-Buffer einen bedeutenden Teil des verfügbaren Speichers und der Bandbreite. Mit verschiedenen Methoden wird versucht, den Einfluss des Z-Buffers auf die Performance 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 Bandbreite 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.

[Bearbeiten] Die Mathematik des Z-Buffering

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.

Um einen W-Buffer zu implementieren, werden die unveränderten Werte von z bzw. w in den Buffer gespeichert, im allgemeinen als Fließkommazahlen. Diese Werte können nicht linear interpoliert werden - sie 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.

Die Erfindung des Z-Buffers wird zu meist Edwin Catmull zugeschrieben, obwohl Wolfgang Strasser das Konzept 1974 in seiner Dissertation schon beschrieben hat.

siehe auch: 3D-Computergrafik

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -