Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
Subdivision Surfaces
Connelly Barnes
CS 4810: Graphics
Acknowledgment: slides by Jason Lawrence, Misha Kazhdan, Allison Klein, Tom Funkhouser, Adam Finkelstein and David Dobkin
Subdivision• How do you make a smooth curve?
Zorin & Schroeder SIGGRAPH 99 Course Notes
We want to “smooth out” severe angles
Subdivision• How do you make a smooth curve?
Zorin & Schroeder SIGGRAPH 99 Course Notes
We want to “smooth out” severe angles
Subdivision• How do you make a smooth curve?
Zorin & Schroeder SIGGRAPH 99 Course Notes
We want to “smooth out” severe angles
Subdivision Surfaces• Coarse mesh & subdivision ruleoDefine smooth surface as limit of
sequence of refinements
Zorin & Schroeder SIGGRAPH 99 Course Notes
Key Questions• How to subdivide the mesh?oAim for properties like smoothness
• How to store the mesh?oAim for efficiency of implementing subdivision rules
Zorin & Schroeder SIGGRAPH 99 Course Notes
General Subdivision Scheme• How to subdivide the mesh?
Two parts:»Refinement:
–Add new vertices and connect (topological)»Smoothing:
–Move vertex positions (geometric)
Loop Subdivision Scheme• How to subdivide the mesh?
Refinement:»Subdivide each triangle into 4 triangles by splitting each edge and connecting new vertices
Zorin & Schroeder SIGGRAPH 99 Course Notes
Loop Subdivision Scheme
Zorin & Schroeder SIGGRAPH 99 Course Notes
Existing vertex being moved from one level to the next
• How to subdivide the mesh:RefinementSmoothing: »Existing Vertices: Choose new location as weighted average of original vertex and its neighbors
Loop Subdivision Scheme• General rule for moving existing interior vertices:
Zorin & Schroeder SIGGRAPH 99 Course Notes
What about vertices that have more Or less than 6 neighboring faces?
new_position = (1-kβ)original_position + sum(β*each_original_vertex)
What about vertices that have more or less than 6 neighboring faces?
Loop Subdivision Scheme• General rule for moving existing interior vertices:
Zorin & Schroeder SIGGRAPH 99 Course Notes
What about vertices that have more Or less than 6 neighboring faces?
new_position = (1-kβ)original_position + sum(β*each_original_vertex)
What about vertices that have more or less than 6 neighboring faces?
0≤ β ≤1/k:
• As β increases, the contribution from adjacent vertices plays a more important role.
Where do existing vertices move?• How to choose β?oAnalyze properties of limit surfaceoInterested in continuity of surface and smoothnessoInvolves calculating eigenvalues of matrices
»Original Loop
»Warren
Loop Subdivision Scheme• How to subdivide the mesh:
RefinementSmoothing:»Inserted Vertices: Choose location as weighted average of original vertices in local neighborhood
New vertex being inserted
Zorin & Schroeder SIGGRAPH 99 Course Notes
Boundary Cases?• What about extraordinary vertices and boundary
edges?:oExisting vertex adjacent to a missing triangleoNew vertex bordered by only one triangle
Zorin & Schroeder SIGGRAPH 99 Course Notes
Boundary Cases?• Rules for extraordinary vertices and boundaries:
Zorin & Schroeder SIGGRAPH 99 Course Notes
1/2 1/2 1/8 1/83/4
Loop Subdivision Scheme
Pixar
Loop Subdivision Scheme
PixarZorin & Schroeder SIGGRAPH 99 Course Notes
Loop Subdivision Scheme
Geri’s Game, Pixar
Subdivision Schemes• There are different subdivision schemesoDifferent methods for refining topology oDifferent rules for positioning vertices
»Interpolating versus approximating
Zorin & Schroeder, SIGGRAPH 99 , Course Notes
Subdivision Schemes
Zorin & Schroeder SIGGRAPH 99 Course Notes
21
Key Questions• How to refine the mesh?oAim for properties like smoothness
• How to store the mesh?oAim for efficiency for implementing subdivision rules
Zorin & Schroeder SIGGRAPH 99 Course Notes
Subdivision SmoothnessTo determine the smoothness of the subdivision:
• Repeatedly apply the subdivision scheme
• Look at the neighborhood in the limit.
Subdivision SmoothnessTo determine the smoothness of the subdivision:
• Repeatedly apply the subdivision scheme
• Look at the neighborhood in the limit.
Subdivision SmoothnessTo determine the smoothness of the subdivision:
• Repeatedly apply the subdivision scheme
• Look at the neighborhood in the limit.
Subdivision SmoothnessTo determine the smoothness of the subdivision:
• Repeatedly apply the subdivision scheme
• Look at the neighborhood in the limit.
Subdivision SmoothnessTo determine the smoothness of the subdivision:
• Repeatedly apply the subdivision scheme
• Look at the neighborhood in the limit.
Subdivision SmoothnessTo determine the smoothness of the subdivision:
• Repeatedly apply the subdivision scheme
• Look at the neighborhood in the limit.
Subdivision SmoothnessTo determine the smoothness of the subdivision:
• Repeatedly apply the subdivision scheme
• Look at the neighborhood in the limit.
Subdivision SmoothnessTo determine the smoothness of the subdivision:
• Repeatedly apply the subdivision scheme
• Look at the neighborhood in the limit.
Subdivision SmoothnessTo determine the smoothness of the subdivision:
• Repeatedly apply the subdivision scheme
• Look at the neighborhood in the limit.
Subdivision SmoothnessTo determine the smoothness of the subdivision:
• Repeatedly apply the subdivision scheme
• Look at the neighborhood in the limit.
Subdivision SmoothnessTo determine the smoothness of the subdivision:
• Repeatedly apply the subdivision scheme
• Look at the neighborhood in the limit.
…
Computing infinitely many iterations is computationally prohibitive!!!
Subdivision Matrix• Compute the new positions/vertices as a linear
combination of previous ones.
p0
p1p6
p5
p4 p3
p2 p0’p5’
p4’ p3’
p2’
p1’p6’
Subdivision Matrix• Compute the new positions/vertices as a linear
combination of previous ones.
p0
p1p6
p5
p4 p3
p2 p0’p5’
p4’ p3’
p2’
p1’p6’
Subdivision Matrix0
BBBBBBBB@
p00
p01
p02
p03
p04
p05
p06
1
CCCCCCCCA
=116
0
BBBBBBBB@
10 1 1 1 1 1 16 6 2 0 0 0 26 2 6 2 0 0 06 0 2 6 2 0 06 0 0 2 6 2 06 0 0 0 2 6 26 2 0 0 2 2 6
1
CCCCCCCCA
0
BBBBBBBB@
p0
p1
p2
p3
p4
p5
p6
1
CCCCCCCCA
Subdivision Matrix• Compute the new positions/vertices as a linear
combination of previous ones.
• To find the limit position of p0, repeatedly apply the subdivision matrix.
0
BBBBBBBBBB@
p(n)0
p(n)1
p(n)2
p(n)3
p(n)4
p(n)5
p(n)6
1
CCCCCCCCCCA
=116
0
BBBBBBBB@
10 1 1 1 1 1 16 6 2 0 0 0 26 2 6 2 0 0 06 0 2 6 2 0 06 0 0 2 6 2 06 0 0 0 2 6 26 2 0 0 2 2 6
1
CCCCCCCCA
n 0
BBBBBBBB@
p0
p1
p2
p3
p4
p5
p6
1
CCCCCCCCA
Subdivision Matrix• Compute the new positions/vertices as a linear
combination of previous ones.
• To find the limit position of p0, repeatedly apply the subdivision matrix.
0
BBBBBBBBBB@
p(n)0
p(n)1
p(n)2
p(n)3
p(n)4
p(n)5
p(n)6
1
CCCCCCCCCCA
=116
0
BBBBBBBB@
10 1 1 1 1 1 16 6 2 0 0 0 26 2 6 2 0 0 06 0 2 6 2 0 06 0 0 2 6 2 06 0 0 0 2 6 26 2 0 0 2 2 6
1
CCCCCCCCA
n 0
BBBBBBBB@
p0
p1
p2
p3
p4
p5
p6
1
CCCCCCCCA
If, after a change of basis we have M=A-1DA, where D is a diagonal matrix, then:
Mn=A-1DnA,
Since D is diagonal, raising D to the n-th power just amounts to raising each of the diagonal entries of D to the n-th power.
Key Questions• How to refine the mesh?oAim for properties like smoothness
• How to store the mesh?oAim for efficiency for implementing subdivision rules
Zorin & Schroeder SIGGRAPH 99 Course Notes
Polygon Meshes• Mesh RepresentationsoIndependent facesoVertex and face tablesoAdjacency listsoWinged-Edge
Independent Faces• Each face lists vertex coordinates
Independent Faces• Each face lists vertex coordinates
ûRedundant verticesûNo topology information
Vertex and Face Tables• Each face lists vertex references
Vertex and Face Tables• Each face lists vertex references
üShared vertices
Vertex and Face Tables• Each face lists vertex references
üShared verticesûStill no topology information
Adjacency Lists• Store all vertex, edge, and face adjacencies
Adjacency Lists• Store all vertex, edge, and face adjacencies
üEfficient topology traversal
Adjacency Lists• Store all vertex, edge, and face adjacencies
üEfficient topology traversalûExtra storageûVariable size arrays