background image
background image

Direct3D 11 Tessellation

Speaker: Kevin Gee

Research: Charles Loop / Scott Schafer
Slides: Shanon Drone, Matt Lee, Michael 
Oneppo

background image

Design Background

Programmable pipeline can target any 

surface approach.
One primary scenario facilitates 

subdivision surfaces as a primitive 

type.
Charles Loop and Scott Schaefer 

provided a reference approximation to 

Catmull-Clark.
Converts Sub-D surface into Bezier 

patches.
Other approaches are possible too.

background image

Why Tessellate?

Many reasons including

Reduced asset memory size
More morph targets
Cheap / free LODs

Reduced asset creation time

Improved pixel shader utilization
Reduced GPU skinning costs
Run faster simulations
Move Sub-D costs to GPU

background image

Pre-Tesselated Mesh: ~5500 kb

Asset Size: Comparison

Sub-D Mesh: ~130 kb

background image

Morph Targets

Huge potential memory / size wins
Morph targets in Sub-D take up less 

space than fully-tessellated \ sparse 

morph targets
Enable richer animations 

for the same memory cost 

background image

Level of Detail

Continuous LOD becomes possible.
Reduces content creation time 

Cheaper than building & testing explicit 
LODs

Improves pixel shader quad 

utilization

background image

Faster Simulation

Skin at the control mesh level

Saves skinning costs

Cloth in Sub-D

Reduces the resolution of the simulation
Keeps a smooth surface for rendering
The more complex the simulation, the 
bigger the savings

Compute surface constraints at a 

lower frequency

Limit high-frequency positions to avoid 
penetrations

background image

DIRECT3D 11 
PIPELINE OVERVIEW

background image
background image

New Primitives

background image

Hull Shader

Operates per input primitive 

E.g. patch

Computes control point transforms

E.g. Basis Change

Computes tessellation factors per 

edge of generated patches

background image

Hull Shader Syntax

[patchsize(12)]
[patchconstantfunc(

MyPatchConstantFunc

)]

MyOutPoint

 main(uint Id : SV_ControlPointID,

     InputPatch<

MyInPoint

, 12> InPts)

{
     

MyOutPoint

 result;

     
     …

     result = 

TransformControlPoint

( InPts[Id] );

     return result;
}

background image

Tessellator

Inputs

Takes in “Tessellation Factors” provided 
by the Hull shader 
Tess factors per-side in the range of 
[2.0..64.0]

Outputs

UV or UVW domain points
Connectivity of those points (tris, lines)
No adjacency information

Many possible partitioning schemes

background image

Tessellation Scheme

demo

background image

Domain Shader

Operates on each point generated by 

the tessellator
Gets ALL control points as input

Control points and patch constant data 
are passed directly to the domain 
shader

Evaluate primitive surface to 

compute position of points

Convert from U,V space into positions, 
tangents

background image

Domain Shader Syntax

void main( out 

MyDSOutput

 result,

     float2 myInputUV : SV_DomainPoint,
     

MyDSInput

 DSInputs,

     OutputPatch<

MyOutPoint

, 12> ControlPts, 

     

MyTessFactors

 tessFactors )

{

     …

     result.Position = 
          

EvaluateSurfaceUV

( ControlPoints, 

myInputUV );
}

background image

APPLYING SUBDIVISION 
SURFACES TO THE PIPE

background image

What Are Subdivision Surfaces?

Surfaces defined by iterative 

refinement
Many different techniques

Catmull-Clark (1978)
Doo-Sabin (1978)
Loop (1987)

Techniques differ primarily in edge 

cases and fixing trouble spots in 

previous techniques

background image

Catmull-Clark Subdivision

Start with a quad 

mesh
Faces and edges 

are split in the 

center
Vertices are 

averaged with 

their surrounding 

neighbors
Infinite iteration 

results in the 

“limit surface”

background image

Why Catmull-Clark?

Broad support from industry and 

modeling packages
Parametric evaluation introduced in 

1998 (Stam) at Alias|wavefront
Further refinements added edges and 

creases
Pixar adopted Catmull-Clark early

Facilitates rich character animation

background image

Sub-D’s In Current 
Systems

Build the model in 
Sub-D’s

Modeling, texturing, 
rigging

Configure & preview 
displacement maps
At export time

Tessellate into a poly 
mesh
Apply displacement maps
Write to disk

Game engine

Apply skinning transform
Rasterize

background image

Proposed Future System

Build the model in Sub-D’s
Configure & preview displacement 

maps
Export Sub-D mesh
Game engine

Convert Sub-D mesh into parametric 
surface
Tessellate to desired LOD level
Apply displacement maps and skinning
Rasterize

background image

Catmull-Clark 

Terminology

Vertex, edge, 

quad
Valence is 

number of 

incident edges to 

a vertex

Regular vertex 

has a valence of 

4, otherwise it is 

an 

extraordinary 

vertex

Regul

ar 

Vertex

Extraordina

ry

Vertex

background image

Loop/Schaefer Research

Represent each quad’s limit surface 

as a bicubic patch (16 knots, 4x4)
Add two biquadratic patches that 

create a U and V tangent field

12 knots, 3x4 each
Cross-product is the normal vector

Adjust the U and V patch edges to 

account for surface discontinuities 

around extraordinary vertices

background image

Implementation Overview

Initialization time

Load Sub-D mesh (quad mesh)
Build adjacency-based patches

Use 1-ring of vertices around each quad

Compute texture tangent space for each vertex

Run time

Skin the quad mesh in the vertex shader (VS)
Convert Sub-D mesh into patches in the Hull 
shader (HS)
Evaluate patches using the domain shader (DS)

background image

Quad Mesh

background image

Input Quads

Each patch consists of 4 inner 

quad vertices and a 1-ring 

neighborhood

Sub-D Patch

1-Ring 
Neighborhood

background image

D3D11 Sub-D Pipeline Overview

Hull Shader

VS

Tessellator

Sub-D 

Patch 

Buffer

PS

Domain 

Shader

Dra

w

GS

o  Single pass

o  No additional memory

o  Avoids 16 fetches per vertex

o  Variable tessellation within 

a draw

o  Subsets of HS can operate in 

parallel

Skin

background image

Regular and Extraordinary

Regular patches

All vertices have 4 edge-adjacent 
neighbors

Valence 4

Predictable amount of data and work

Extraordinary patches

Any irregular patch
Not quite as predictable
Require a little more work
Draw call per valence supported

background image

Direct3D 10 SDK 
Sample
Subdivision Surfaces

demo

background image

Handling Creases

Add redundant geometry

Defined 
crease

Redundan

geometry

background image

More Loop/Schaefer 

Research

Latest version: 
Modified Approximate Catmull-Clark 

Patches (ACC2)
Outputs a Bezier patch consisting of 

16 control vertices for regular 

patches
Outputs a Gregory patch consisting of 

20 control vertices for extraordinary 

patches

background image

New Research (ACC2)

Collapse position 
and tangent into a 
single bicubic patch

Fewer control 
points, less memory

Modification of a 
Gregory patch

Bicubic patch with 2 
sets of interior knots 
(20 knots total)

b

10

b

00

b

20

b

30

b

01

b

11v

b

11u

b

21v

b

21u

b

02

b

03

b

13

b

23

b

33

b

32

b

31

b

12v

b

12u

b

22v

b

22u

background image

ACC2 Patch

background image

ACC2 Patch - Position

Average the inner point pairs and evaluate the 

resulting 4x4 bicubic patch for position

background image

ACC2 Patch - Tangents

background image

ACC2 Math

v

p

i

p

i+1

p

i-1

q

i

b

00

b

10,i

b

10,i+1

b

20,i

b

20,i+1

b

11v,i

b

11u,i

q

i-1

background image

This is a lot…

There’s a lot of complexity here, but 

it’s worth it
D3D11 can target almost any surface 

algorithm you want

Bezier
NURBs
Dynamic and static tessellation
Displacement
Subdivision (using Loop transforms)
and more…

background image

Call to Action!

Experiment with the D3D10 

Subdivision Surface Sample from the 

DirectX SDK NOW!
Build support for Sub-D meshes into 

your pipelines, tools, and engines.

Look for a future Community Tech 

Preview (CTP) of Direct3D 11.

background image

www.xnagamefest.com

© 2008 Microsoft Corporation. All rights reserved.

This presentation is for informational purposes only. 

Microsoft makes no warranties, express or implied, in this 

summary.


Document Outline