Subdivision Surfaces Dr. Scott Schaefer
B-spline Surfaces
B-spline Surfaces
B-spline Surfaces
B-spline Surfaces
B-spline Surfaces
B-spline Surfaces
B-spline Surfaces
B-spline Surfaces
B-spline Surfaces
B-spline Surfaces
B-spline Surfaces
B-spline Surfaces
B-spline Surfaces
B-spline Surfaces Example
B-spline Surfaces Example
B-spline Surfaces Example
B-spline Surfaces Example
B-spline Surfaces Example
B-spline Surfaces Example
B-spline Surfaces Example
B-spline Surfaces Example
B-spline Surfaces Example
B-spline Surfaces Example
B-spline Surface – Properties Surface inside convex hull of control points Guaranteed to be smooth everywhere Smoothness is determined by number of averaging steps
Arbitrary Topology Surfaces
Arbitrary Topology Surfaces
Subdivision Surfaces Used in movie and game industries Supported by most 3D modeling software Toy Story © Disney / Pixar Geri’s Game © Pixar Animation Studios
Subdivision Surfaces Set of rules S that recursively act on a shape Arbitrary topology surfaces Smooth everywhere
Repeated Averaging Assume surface is made out of quads Any number of quads may touch a single vertex Subdivision rules: linear subdivision followed by averaging
Linear Subdivision
Linear Subdivision
Averaging
Averaging
Averaging
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Implementing Linear Subdivision linearSub ( F, V ) newV = V newF = {} for each face Fi for j = 1 to 4 ej = getVert ( Fi,j, Fi,j+1) add centroid to newV and store index in c add face (Fi,j, ej, c, ej-1) to newF return (newF, newV)
Implementing Linear Subdivision getVert ( i1, i2 ) if orderless key (i1,i2) not in hash add midpoint of V[i1], V[i2] to newV hash[(i1,i2)] = index of new point return hash[(i1,i2)]
Implementing Averaging Average( F, V ) newV = 0 * V val = array of 0 whose size is number of vertices newF = F for each face Fi cent = centroid for Fi newV[Fi] += cent val[Fi] += 1 for each vertex newV[i] newV[i] /= val[i] return (newF, newV)
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Subdivision Surfaces – Examples
Catmull-Clark Subdivision
Catmull-Clark Subdivision
Catmull-Clark Subdivision
Catmull-Clark Subdivision
Catmull-Clark Subdivision
Catmull-Clark Subdivision
Catmull-Clark Subdivision midpoint
Catmull-Clark Subdivision
Catmull-Clark
Catmull-Clark Subdivision
Catmull-Clark Subdivision
Catmull-Clark Subdivision Repeated Averaging Catmull-Clark
Catmull-Clark Subdivision One round of subdivision produces all quads C2 almost everywhere C1 at vertices with valence 4 Most commonly used subdivision scheme in existence
Doo-Sabin Subdivision
Doo-Sabin Subdivision
Doo-Sabin Subdivision
Doo-Sabin Subdivision
Doo-Sabin Subdivision
Doo-Sabin Subdivision Variant of repeated averaging subdivision All vertices valence 4 after one round of subdivision C1 everywhere
Midedge Subdivision
Midedge Subdivision
Midedge Subdivision
Midedge Subdivision Two rounds of midedge subdivision similar to one round of Doo-Sabin
Midedge Subdivision Simplest subdivision scheme in terms of rules (midpoint) Produces C1 surfaces everywhere Very slow convergence at high valence vertices and fast convergence at low valence vertices creates artifacts
Loop Subdivision
Loop Subdivision
Loop Subdivision
Loop Subdivision
Loop Subdivision
Loop Subdivision
Loop Subdivision Operates only on triangle surfaces Produces C2 surfaces almost everywhere C1 at vertices with valence 6
Sqrt(3) Subdivision
Sqrt(3) Subdivision
Sqrt(3) Subdivision
Sqrt(3) Subdivision
Sqrt(3) Subdivision Two rounds of sqrt(3) subdivision yield a ternary split of the original surface!!!
Sqrt(3) Subdivision
Sqrt(3) Subdivision
Sqrt(3) Subdivision
Sqrt(3) Subdivision Produces all triangles after one round of subdivision Creates C2 surfaces almost everywhere C1 at vertices with valence 6
Interpolatory Quadrilateral Subdivision Tensor-Product of four-point curve subdivision
Interpolatory Quadrilateral Subdivision Tensor-Product of four-point curve subdivision
Interpolatory Quadrilateral Subdivision Tensor-Product of four-point curve subdivision
Interpolatory Quadrilateral Subdivision Tensor-Product of four-point curve subdivision
Interpolatory Quadrilateral Subdivision Tensor-Product of four-point curve subdivision
Interpolatory Quadrilateral Subdivision Tensor-Product of four-point curve subdivision Same result!!!
Interpolatory Quadrilateral Subdivision Tensor-Product of four-point curve subdivision
Interpolatory Quadrilateral Subdivision Tensor-Product of four-point curve subdivision
Interpolatory Quadrilateral Subdivision Tensor-Product of four-point curve subdivision
Interpolatory Quadrilateral Subdivision Tensor-Product of four-point curve subdivision Same result!!!
Interpolatory Quadrilateral Subdivision Tensor-Product of four-point curve subdivision
Interpolatory Quadrilateral Subdivision Construct a virtual point v such that tensor-product is the same
Interpolatory Quadrilateral Subdivision Construct a virtual point v such that tensor-product is the same
Interpolatory Quadrilateral Subdivision Based on four-point curve subdivision Interpolates vertices Operates only on quadrilateral surfaces Creates C1 surfaces everywhere
Butterfly Subdivision
Butterfly Subdivision
Butterfly Subdivision
Butterfly Subdivision
Butterfly Subdivision
Butterfly Subdivision
Butterfly Subdivision
Butterfly Subdivision Interpolatory subdivision scheme for triangle meshes Produces surfaces that are C1 everywhere
Comparisons Loop Butterfly Catmull-Clark Doo-Sabin Image taken from “Subdivision for Modeling and Animation” Siggraph 2000 Course Notes by Zorin et al.
Comparisons Loop Butterfly Catmull-Clark Doo-Sabin Image taken from “Subdivision for Modeling and Animation” Siggraph 2000 Course Notes by Zorin et al.
Catmull-Clark (triangulated) Comparisons Mesh Loop (triangulated) Catmull-Clark Catmull-Clark (triangulated) Image taken from “Subdivision for Modeling and Animation” Siggraph 2000 Course Notes by Zorin et al.