
88 IDiscovering
required multiple passes over the geometry shader, proving awkward and slow. Tes-
sellation shaders allow displacement mapping to occur in a single pass [Casta
˜
no 08].
Tessellation shaders can also compute geometric level-of-detail on the fly, which
we’ll explore later in the chapter . Previous techniques required the CPU to resubmit
new vertex buffers when changing the level-of-detail.
6.1.1 Subdivision Surfaces
One of the most compelling uses of GPU tessellation is efficiently rendering Catmull-
Clark subdivision surfaces. Most of these techniques use tessellation shaders to eval-
uate a parametric approximation of the limit surface rather than performing iterative
subdivision. Iterative subdivision can still be done on the GPU but is often better
suited for CUDA or OpenCL.
Pa rametric approximation of Catmull-Clark surfaces (ACC) arose from Charles
Loop’s research at Microsoft in 2008 [Loop and Schaefer 08], and was subsequently
enhanced to support creases [Kovacs et al. 09]. An excellent overview of the state of
the art can be found in [Ni et al. 09]. This includes a report from Valve, the first
major game developer to use tessellation shaders in this way.
6.1.2 Smoothing Polygonal Data
Catmull-Clark surfaces are not the only way to make good use of tessellation shaders;
game developers may find other surface definitions more attractive. For example,
tessellation can be used to simply “smooth out” traditional polygonal mesh data.
PN triangles are a popular example of this. An even simpler application is Phong
tessellation, the geometric analogue of a Phong lighting.
6.1.3 GPU Compute
OpenCL or CUDA can be used in conjunction with tessellation shaders for various
techniques. The compute API can b e used for simulation, e.g., hair physics, [Yuksel
and Tariq 10], or it can be used to perform a small number of iterative subdivisions
to “ clean up” the input mesh, removing extraordinary vertices before submitting the
data to the OpenGL pipeline [Loop 10].
6.1.4 Curves, Hair, and Grass
Tessellation shaders can also be applied to lines with isoline tessellation, which opens
up several possibilities for data amplification. One is tessellating a series of line seg-
ments into a smooth cubic curve. In this way, application code works only with a
small number of points. Smooth curves are generated entirely on the GPU, either for
3D applications like hair or rope or for 2D applications such as B´ezier curves from a
drafting tool. Isoline tessellation can also be used to generate multiple curves from a
single cur ve.