Series

Zbuffer — the series

3 essays on one idea, from the one that introduces it to the one that assumes the rest.
  1. 00.2500.5000.7501-10123distance from the eye — log₁₀ metresfraction of the buffer's codes used uphalf the codes by 0.20 ma linear map, for comparisonnear 0.1 m, far 1000 mharmonic mean 0.20 m against arithmetic 500 m

    The precision a depth buffer has left

    Depth is stored as an affine function of one over the distance, so half of a buffer's codes are spent before the harmonic mean of the near and far planes — twenty centimetres out of a kilometre. The resolution goes as the square of the distance, and the fix that works is not more bits.

    part 1 · pipeline
  2. 01230123the plane moved by a factor of ten to the …depth resolution, relative (powers of ten)near plane, brought infar plane, pushed out1/near − 1/farone term does all the work

    One plane is nearly free

    The near and far planes enter a depth buffer's precision through 1/near − 1/far, and one of those reciprocals is enormous. Pushing the far plane out by a factor of a thousand costs a tenth of a per cent; bringing the near plane in by the same factor costs a factor of a thousand — and an infinite far plane is the limit of the first rather than a separate case.

    part 2 · pipeline
  3. 00.2500.5000.7501-10-50510across the edge, in pixels of the picturehow much of the background reaches the sensorwhere a pinhole puts the edgethe pupilone depth per samplethe same edge, two ways of blurring it70% apart

    One depth per sample is not enough

    A depth buffer keeps a single distance at each sample, so a post-process blur can only ask how far away the thing at this pixel is. Across an occluding edge that answer is two depths and an occlusion, and the gather it produces differs from the pupil's own integral by 70 per cent of full scale over a band eleven pixels wide.

    part 3 · pipeline

All series