PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Z-Buffer-Einteilung


Matti
2004-08-11, 16:38:01
Der Z-Buffer ist ja nicht linear. Also mit der Entfernung nimmt die Präzision ab.
Ist er logarithmisch eingeteilt? ...oder steht 1/Entfernung drin?

zeckensack
2004-08-11, 16:56:29
Der Z-Buffer speichert Z/W ... bei Ortho-Projektionen ist das immer exakt Z, bei Perspektiv-Projektionen eben nicht. Das genaue Hardware-Format ist "implementation dependent" und damit weder bekannt noch wichtig. Das Fehldesign "Z16 lockable" in Direct3D ist die Ausnahme, die die Regel bestätigt.

stav0815
2004-08-11, 16:58:12
wieso sollte er logarithmsich eingestellt sein? imho wäre dies quatsch

Legolas
2004-08-11, 17:12:53
wieso sollte er logarithmsich eingestellt sein? imho wäre dies quatsch
Weil man in Betrachternähe eine feinere Auflösung braucht, weil man dort Unterschiede in Z-Richtung stärker sieht, wie in der Ferne.

Thanatos
2004-08-13, 19:06:08
Würde es Lesitungsmäßig irgendwas bringen wenn man einen höheren z-buffer erzwingt???z.b 32bit z-buffer without stencil mit dem 3d nalyzer?????

Xmas
2004-08-13, 21:30:29
Die neueren Karten können 32bit Z gar nicht.

zeckensack
2004-08-13, 22:21:19
Weil man in Betrachternähe eine feinere Auflösung braucht, weil man dort Unterschiede in Z-Richtung stärker sieht, wie in der Ferne.Nö. Lad' dir mal die Beyond Good And Evil-Demo runter, und schau dir das Intro an. Und dann erzähl mir nochmal was von günstigen Präzisionsverteilungen ...

In der Praxis hat man eher das Problem, dass es am Ende genau so verteilt ist, wie du dir das als vorteilhaft vorstellst. So vorteilhaft ist das aber garnicht.
Wie bereits gesagt, der Z-Buffer speichert Z/w. Es gibt bei Frustum-Projektionen eine starke Korrelation zwischen Z und W, was bei zu "naher" Near Plane dazu führt, dass ein Großteil der Auflösung im Nahbereich verballert wird, und man den Rest der Szene nicht mehr vernünftig auflösen kann.

Thanatos,
nein :)

GloomY
2004-08-14, 00:52:45
Der Z-Buffer speichert Z/W ... bei Ortho-Projektionen ist das immer exakt Z, bei Perspektiv-Projektionen eben nicht. Das genaue Hardware-Format ist "implementation dependent" und damit weder bekannt noch wichtig. Das Fehldesign "Z16 lockable" in Direct3D ist die Ausnahme, die die Regel bestätigt.Entschuldige meine Unwissenheit, aber was ist denn bitte W?

W-Buffering ist doch das Speichern des Reziproken des Z-Werts, oder? Z/W wäre dann ja Z²...
Google hat mir leider nicht weitergeholfen, genausowenig die Suche im Forum, wo an vielen Stellen nur auf das Ausprobieren des W-Buffers verwiesen wird aber nicht erklärt (http://www.forum-3dcenter.org/vbulletin/showpost.php?p=1114269&postcount=10) (selbiges Posting nur als Beispiel) wird, was das letztendlich ist. Google spuckt als Verständlichstes das (http://www.theavonlady.org/theofpfaq/install/wbuffer.htm) aus...

Muh-sagt-die-Kuh
2004-08-14, 02:24:54
Entschuldige meine Unwissenheit, aber was ist denn bitte W?

W-Buffering ist doch das Speichern des Reziproken des Z-Werts, oder? Z/W wäre dann ja Z²...
Google hat mir leider nicht weitergeholfen, genausowenig die Suche im Forum, wo an vielen Stellen nur auf das Ausprobieren des W-Buffers verwiesen wird aber nicht erklärt (http://www.forum-3dcenter.org/vbulletin/showpost.php?p=1114269&postcount=10) (selbiges Posting nur als Beispiel) wird, was das letztendlich ist. Google spuckt als Verständlichstes das (http://www.theavonlady.org/theofpfaq/install/wbuffer.htm) aus...
In der graphischen Datenverarbeitung verwendet man homogene Koordinaten, sprich [x y z w] statt [x y z] Vektoren. Sie ermöglichen überhaupt erst Translationen (affine Abbildungen); wenn du das genauer nachlesen möchtest, schau einfach mal hier (http://www.3dsource.de/deutsch/3Dmathe.htm) nach, das ist eine ziemlich brauchbare Schnelleinführung.

Was den Z-Buffer angeht, für diesen gilt folgende Funktion, die einen beliebigen Z-Wert (genauer: Z-Wert nach der Dehomogenisierung) abhängig von den Koordinaten der near- und far-plane auf das [0,1] Intervall abbildet:

zwin = [(z - znear) * zfar] / [(zfar - znear) * z]

Ein 16-bit Z-Buffer kennt nun 2^16 Stufen zwischen 0 und 1, d.h. eine Stufe ist 0,0000152587890625 Einheiten breit.

Als Beispiel kann man sich nun einmal die Funktion für ein paar znear und zfar Werte betrachten, sagen wir mal zfar = 20 und znear1 = 1 sowie znear2 = 0.001. Welche Kombination ist wohl die bessere Wahl? ;)