20110331 - DX11 Tessellation and Level Building Blocks

Developer friendly solution to tessellation of scene geometry.

Level Building Blocks

Scene geometry is composed of level building blocks (LBBs) as described in this Killzone 2 presentation. Similar to tessellation, LBBs without tessellation require solutions to the geometry crack problem when two LBBs share edges:

(1.) In some situations, for the same vertex, different drawing passes can generate slightly different post-transform vertex positions or vertex outputs. (2.) LBBs which share edges and have a T-junction likely will have cracks. (3.) LBBs changing between different static LOD models can produce cracks. (4.) Cracks can cause occlusion query results to be poor.

Solutions to the crack problem include,

(1.) Overlap of LBB surfaces on the same surface plane will have z-fighting, instead for flat surfaces, extra hidden lip surface behind or at an angle to the surface plane will cause a little overdraw, but can solve crack problems. (2.) For non-flat surfaces, insuring LBBs intersect. (3.) Overlay higher detail LBBs over low detail LBBs, but still draw the low detail LBBs.

LBBs with Tessellation

LBBs with tessellation can be a simple extension of LBBs without tessellation. To avoid all the problems typical of DX11 tessellation, using a single dynamically computed LOD level for each drawn LBB. Displacement aliasing can trivially be solved by specifying displacement map texture fetch LOD level (since all edges now share the same tessellation factor).

Second, skip using continuous LOD changes for each LBB. Instead use a fixed set of LOD levels. This avoids the problem of constant vertex swimming, or models getting stuck in a LOD point where geometry looks bad because of intermediate tessellation vertex positions. When LBBs need to transition between LOD levels, transition them using a fixed 1 second interval where the tessellation LOD factor smoothly transitions between states.

Advantages of This Type of System

(1.) Should be easier to tune engine for performance of various graphics cards by tuning the LOD transition points. Engine could self tune by adaptively adjusting LOD to meet performance requirements. (2.) Should be easier for an artist to build level geometry: no hand construction of different LOD levels. (3.) Pre-computed radiance transfer or pre-computed lighting perhaps better, no need for separate baking for different LOD levels.