Z-buffering - All About All

Search:  

Everything you wanted to know - online encyclopedia

See live article   •   Z-buffering
 

Z-buffering

Z-buffer data

In computer graphics, z-buffering is the management of image depth coordinates in three-dimensional (3-D) graphics, mainly used in hardware, more seldom in software. It is one solution to the visibility problem, which is the problem of deciding which elements of a rendered scene are drawn in front, and which are hidden. The painter's algorithm is another common solution.

When an object is rendered by a 3D graphics card, the depth of a generated pixel (z coordinate) is stored in a buffer (the z-buffer). This buffer is usually arranged as a two-dimensional array (x-y), one element for each screen pixel. If another object of the scene must be rendered in the same pixel, the graphics card compares the two depths and chooses the one closest to the observer. The chosen depth is then saved to the z-buffer, replacing the old one. In the end, the z-buffer will allow the graphics card to correctly reproduce the usual depth perception: a close object hides a farther one.

The granularity of a z-buffer has a great influence on the scene quality: an 16-bit z-buffer can result in artifacts (called z-buffer fighting) when two objects are very close to each other. A 24-bit z-buffer behaves much better. An 8-bit z-buffer is almost never used since it has too little precision.

Additionally, precision in the z-buffer distance values is not spread evenly over distance. Nearer values are much more precise (and hence can display closer objects more properly) than values which are farther away. Generally, this is desirable, but sometimes it will cause artifacts to appear as objects become more distant. A variation on z-buffering which results in more evenly distributed precision is called w-buffering.

At the start of a new scene, the z-buffer must be cleared to a defined value, usually 1.0, because this value is the upper limit of depth, meaning that no object is present at this ray through the viewing frustum.

The invention of the z-buffer concept is most often attributed to Edwin Catmull. Actually, also Wolfgang Straßer described this idea in his 1974 Ph.D. thesis1.

On recent PC graphics cards (1999-2005), z-buffer management uses a significant chunk of the available memory bandwidth. Various methods have been employed to reduce the impact of z-buffer, such as lossless compression (computer resources to compress/decompress are cheaper than bandwidth) and ultra fast hardware z-clear that makes obsolete the "one frame positive, one frame negative" trick (skipping inter-frame clear altogether using signed numbers to cleverly check depths).

Mathematics

The range of depth values in camera space (See 3D projection) to be rendered is often defined between a near and far value of z. After a perspective transformation, the new value of z, or z', is defined by:

z'= \frac{\mathit{far}+\mathit{near}}{\mathit{far}-\mathit{near}} + \frac{1}{z} \left(\frac{-2 \cdot \mathit{far} \cdot \mathit{near}}{\mathit{far}-\mathit{near}}\right)

Where z is the old value of z in camera space, and is sometimes called w or w'.

The resulting values of z' are normalized between the values of -1 and 1, where the near plane is at -1 and the far plane is at 1. Values outside of this range correspond to points which are not in the viewing frustum, and shoudn't be rendered.

To implement a z-buffer, the values of z' are linearly interpolated across screen space between the vertices of the current polygon, and these intermediate values are generally stored in the z-buffer in fixed point format. The values of z' are grouped much more densely near the near plane, and much more sparsely farther away, resulting in better precision closer to the camera. The closer the near plane is set to the camera, the less precision there is far away -- having the near plane set too closely is a common cause of undesireable rendering artifacts in more distant objects.

To implement a w-buffer, the old values of z in camera space, or w, are stored in the buffer, generally in floating point format. However, these values cannot be linearly interpolated across screen space from the vertices -- they usually have to be inverted, interpolated, and then inverted again. The resulting values of w, as opposed to z', are spaced evenly between near and far.

Whether a z-buffer or w-buffer results in a better image depends on the application.

See also

Notes

Note 1: see W.K. Giloi, J.L. Encarnação, W. Straßer. "The Giloi’s School of Computer Graphics". Computer Graphics 35 4:12–16.


Also helps finding: Zbuffering, uffering, uffering, bffering, bufering, bufering, buffring, buffeing, bufferin, -buffering, zbuffering, z-uffering, z-bffering, z-bufering, -buffering

   
 
  
Add to bookmarks
Related Articles
 
Roman letters used in mathematics
Priority fill
Graphics pipeline
Cel-shaded animation
Hidden surface determination
Z buffer
Ray casting
F-Zero X
Depth buffer
Z-buffer
Edwin Catmull
Binary space partitioning
Nintendo GameCube
Nintendo 64
Rendering (computer graphics)
Atari Jaguar
Accelerated Graphics Port
Top Articles
 
2005
Africa
African American (U.S. Census)
Album (disambiguation)
Animal
Asian (U.S. Census)
Biography
Census
England
English language
France
Hispanic (U.S. Census)
IP address
New York
Paris
Race (U.S. Census)
The Internet Movie Database
U.S. postal abbreviations
United Kingdom
United States Navy
Wikipedia
Search LiveJournal blogs for Z-buffering
 

Free Advertising  •  Compare Credit Cards  •  Loan  •  Police to target mini-moped terrors •  MPAA

Copyright @ 2005 AllAboutAll.Info
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.