There are three main buffers that correspond to the three main processing steps the algorithm performs.


Iteration is plotted here and the dimensions are the combination of several fields:

histwidth = (finalwidth * supersample) + (2 * gutter)
histheight = (finalheight * supersample) + (2 * gutter)

The gutter is to account for the extra space needed when filtering at edge pixels. It’s calculated by:

gutter = 10 * supersample

Computing the histogram bounds (camera) is much more complex. The values are based off of the following Xml fields: size, supersample, scale, zoom, center, spatial and density filter widths.

Scale is the pixels per unit, meaning the number of raster pixels needed to represent the distance from 0 to 1 in the Cartesian plane. The higher the value, the more zoomed in the camera is. Increasing scale without a corresponding increase in the quality field will degrade image quality.

Zoom is the amount of zoom to apply to the image. It has a similar effect to increasing scale, but does not suffer from quality loss. This will increase the number of iterations done to compensate.

Supersample is the value to multiply the dimensions of the histogram and accumulator by to accomplish anti-aliasing.

Center is the camera offset in on each axis. The image will move in the opposite direction of these values.

Density filter buffer

This has the same dimensions and type as the histogram, density filter output is written here.

Final image buffer

The final output is written here. The dimensions are not supersampled, and are just the values specified in the size field of the Xml. The type of each pixel is a 16 byte RGBA with each channel being a 32-bit float.