ABSTRACT

In this chapter, the authors address different techniques to build and render from an A-buffer in real time. They focus on scenes with moderate or sparse depth complexity; the techniques present will not scale well on extreme transparency scenarios. All techniques build the A-buffer in a single geometry pass: the scene geometry is rasterized once per frame. The techniques differ along two axes. The first axis is the scheduling of the sort: when do we spend time on depth-sorting the fragments associated with each pixel? The second axis is the memory allocation strategy used for incrementally building the per-pixel lists of fragments. The authors implement all techniques in OpenGL Shading Language (GLSL) fragment programs, using the extension NV_shader_buffer_store on NVIDIA hardware to access graphics processing unit memory via pointers. They discuss the sort in local memory required for Post-Lin and Post-Open, as well as how to perform early culling with Pre-Lin and Pre-Open.