Game Development Reference
Voxels from older
Volume from previous frame
Figure 6.1. Schematic overview of the algorithm. During the cleanup phase each voxel
is tested against the available depth images. If the projected voxel center lies in front
of the recorded depth, it is cleared; otherwise it is retained. During the injection phase,
voxels are “turned-on” based on the RSM-buffers and the camera-based depth buffer.
In each frame, two steps are performed: First, in a cleanup stage, the volume
is swept voxel-by-voxel and the center of each voxel is transformed to the eye-
space coordinate system of the buffer and tested against the available depth image
value, which is also projected to eye-space coordinates. If the voxel lies closer to
the image buffer viewpoint than the recorded depth, the voxel is invalidated and
removed. Otherwise, the current voxel attributes are maintained. The update of
the volume is performed by writing the cleared or retained values into a separate
volume in order to avoid any atomic write operations and thus make the method
fast and a very broadly applicable one. At the end of each cleanup cycle, the
two volume buffers are swapped. After the cleanup phase, samples from all
the available image buffers are injected into the volume (similar to the LPV
method [Kaplanyan 09]).
When multiple image buffers are available, the cleanup stage is repeated for
each image buffer, using the corresponding depth buffer as input for voxel invali-
dation. Each time, the currently updated (read) and output (written) buffers are
swapped. The current image buffer attributes are then successively injected in
the currently updated volume. The whole process is summarized in Figure 6.1.