NVIDIA Developer Zone

Tessellation

 


Programmable Tessellation is a new GPU feature available to developers starting with the NVIDIA Fermi family. Available using the DirectX 11 and OpenGL 4.0 APIs, Programmable Tessellation allows developers unprecedented levels of geometry detail--improving lighting and silhouettes in ways that were previously impractical.

How Tessellation Works

Tessellation 'magnifies' input geometry, producing geometric multiplication of up to 2,048 triangles per input primitive. When running with tessellation, input primitives are referred to as 'patches'. The layout, payload and number of input control points per patch is application specified--the API allows anywhere from 1 to 32 control points per input patch.
Three pipeline stages have been added to support programmable tessellation: the Hull Shader, the Tessellation Generator and the Domain Shader. The stages are run in that order. The responsibilities of each pipestage follow.
  • Hull Shader: Performs a basis-transformation from the input control points' basis space to the output control points' basis space. The Hull Shader operates in two phases, on an entire patches at a time. First, one or more threads--one for each output control point--are run to shade the control points. Upon completion of the threads for all output control points, a Constant Patch function is run. The Constant Patch function must, at a minimum, output tessellation factors (LOD values) for each edge and the interior of the patch.
  • Tessellation Generator: Uses the tessellation factor values written by the Hull Shader Constant Patch function to output contiguous patch-space vertices, for use by the Domain Shader. This stage is not programmable.
  • Domain Shader: Combines control points written by the Hull Shader and vertices generated (in patch space) by the Tessellation Generator to transform created vertices to their correct location with appropriate normals, UVs, and other application-defined data.
For a more detailed description of how tessellation fits into the general pipeline, please see the whitepaper "Crack-Free Point-Normal Triangles Using Adjacent Edge Normals," (below) which has an entire chapter devoted to understanding programmable tessellation.

Developer Resources

by Danny66supereva
postd on Jan 29 2012 at 08:39PM

Hi, I'm italian, I've seen the crack free tessellation algorythm and I've found it very interesting. Is there a way to compute the normals at the points B012, B120, ... B111? This allows to retessellate the output mesh with a second pass.
Thank you.