Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

15.06.2003, 17:31

Z-Buffer

Auf Seite 89 in deinem Buch schreibst du, dass der Z-Buffer nicht überall eine gleich grosse Genauigkeit hat und man besser hohe Werte für die nahe Clipping-Ebene verwenden sollte. Das verstehe ich allerdings nicht.

Wenn ich jetzt eine hohe Entfernung zwischen naher und ferner Clipping-Ebene habe ist es klar, dass eine höhere Genauigkeit (32, statt 16 Bit) da Vorteile bringt. Aber das Problem mit der nahen Clipping-Ebene verstehe ich nicht. Für jeden Pixel werden doch 32/16/etc Bit als Tiefenwert genommen oder? Als float oder double oder was auch immer. Dabei spielt es doch keine Rolle, ob der Wert nahe an der 0 (nahe Clipping-Ebene) oder an der 1 (ferne Clipping-Ebene) liegt. 32/16 Bit sind 32/16 Bit.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

15.06.2003, 17:59

Hi. Es klingt komisch, aber es ist wirklich so. Zitat aus der DirectX-Dokumentation (wichtige Stellen hervorgehoben):

Nearly all 3-D accelerators on the market support z-buffering, making z-buffers the most common type of depth buffer today. However ubiquitous, z-buffers have their drawbacks. Due to the mathematics involved, the generated z values in a z-buffer tend not to be distributed evenly across the z-buffer range (typically 0.0 to 1.0, inclusive). Specifically, the ratio between the far and near clipping planes strongly affects how unevenly z values are distributed. Using a far-plane distance to near-plane distance ratio of 100, 90% of the depth buffer range is spent on the first 10% of the scene depth range. Typical applications for entertainment or visual simulations with exterior scenes often require far-plane/near-plane ratios of anywhere between 1000 to 10000. At a ratio of 1000, 98% of the range is spent on the 1st 2% of the depth range, and the distribution becomes worse with higher ratios. This can cause hidden surface artifacts in distant objects, especially when using 16-bit depth buffers, the most commonly supported bit-depth.

A w-based depth buffer, on the other hand, is often more evenly distributed between the near and far clip planes than a z-buffer. The key benefit is that the ratio of distances for the far and near clipping planes is no longer an issue. This allows applications to support large maximum ranges, while still getting relatively accurate depth buffering close to the eye point. A w-based depth buffer isn't perfect, and can sometimes exhibit hidden surface artifacts for near objects. Another drawback to the w-buffered approach is related to hardware support: w-buffering isn't supported as widely in hardware as z-buffering.

3

15.06.2003, 18:25

Dann sollte man also - wenn möglich - besser einen W-Buffer verwenden um das Problem zu umgehen? Sonst kann man z.B. keine Aussenlandschaften mit hoher Sichtweite erzeugen?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

15.06.2003, 18:46

Ja. Aber wie dort schon steht, kann es Probleme mit der Unterstützung geben, und manchmal gibt es keine Möglichkeit, das abzufragen. Ich hatte beispielsweise eine GeForce 2 MX und wollte Environment Mapping verwenden, und ich hatte dort auch einen W-Buffer. Es ging einfach nicht, mit Z-Buffer kein Problem. Da habe ich mich an nvidia gewendet und die teilten mir dann mit, dass W-Buffering zusammen mit Environment Mapping von der Karte nicht unterstützt wird. Das fand ich schon ein wenig seltsam!
24-Bit-Z-Buffer sollten aber eine genügend gute Genauigkeit bieten, solange man es nicht mit der Sichtweite übertreibt. Vor allem sollte man für die nahe Clipping-Ebene große Werte einsetzen. 0.1 ist schlecht, besser ist 1 oder 2.

5

15.06.2003, 19:11

Nur was ist übertreiben? Bei "Far Cry" kann man ja über die ganze Insel gucken (oder war das ein anderes Spiel?) und das ist schon eine sehr hohe Sichtweite.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

15.06.2003, 19:20

Es gibt da ja noch andere Möglichkeiten, wie man das machen kann. Man kann z.B. bei den ganz weit entfernten Objekten auf den Z-Buffer verzichten und die Dreiecke per Hand sortieren. Oder man verwendet verschiedene Projektionsmatrizen für verschieden weit entfernte Teile...

Werbeanzeige