Subdivision Surfaces
Introduction
The most common way to model complex smooth surfaces is by using a patchwork of bicubic patches such as BSplines or NURBS.
However, while they do provide a reliable smooth limit surface definition, bicubic patch surfaces are limited to 2dimensional topologies, which only describe a very small fraction of realworld shapes. This fundamental parametric limitation requires authoring tools to implement at least the following functionalities:
 smooth trimming
 seams stitching
Both trimming and stitching need to guarantee the smoothness of the model both spatially and temporally as the model is animated. Attempting to meet these requirements introduces a lot of expensive computations and complexity.
Subdivision surfaces on the other hand can represent arbitrary topologies, and therefore are not constrained by these difficulties.
Arbitrary Topology
A subdivision surface, like a parametric surface, is described by its control mesh of points. The surface itself can approximate or interpolate this control mesh while being piecewise smooth. But where polygonal surfaces require large numbers of data points to approximate being smooth, a subdivision surface is smooth  meaning that polygonal artifacts are never present, no matter how the surface animates or how closely it is viewed.
Ordinary cubic Bspline surfaces are rectangular grids of tensorproduct patches. Subdivision surfaces generalize these to control grids with arbitrary connectivity.
Uniform Subdivision
Applies a uniform refinement scheme to the coarse faces of a mesh. The mesh converges closer to the limit surface with each iteration of the algorithm.
Feature Adaptive Subdivision
Applies a progressive refinement strategy to isolate irregular features. The resulting vertices can be assembled into bicubic patches defining the limit surface.
Uniform or Adaptive ?
Feature adaptive refinement can be much more economical in terms of time and memory use, but the best method to use depends on application needs.
The following table identifies several factors to consider:
Uniform  Feature Adaptive 







Release Notes (3.0.0)
 Full support for bicubic facevarying interpolation is a significant feature which will be supported in future releases.
 Feature adaptive refinement for the Loop subdivision scheme is expected to be supported in future releases.
Boundary Interpolation Rules
Boundary interpolation rules control how boundary edges and vertices are interpolated.
The following rule sets can be applied to vertex data interpolation:
Mode  Behavior 

VTX_BOUNDARY_NONE  No boundary edge interpolation should occur; instead boundary faces are tagged as holes so that the boundary edgechain continues to support the adjacent interior faces but is not considered to be part of the refined surface 
VTX_BOUNDARY_EDGE_ONLY  All the boundary edgechains are sharp creases; boundary vertices are not affected 
VTX_BOUNDARY_EDGE_AND_CORNER  All the boundary edgechains are sharp creases and boundary vertices with exactly one incident face are sharp corners 
On a grid example:
FaceVarying Interpolation Rules
Facevarying data is used when discontinuities are required in the data over the surface  mostly commonly the seams between disjoint UV regions. Facevarying data can follow the same interpolation behavior as vertex data, or it can be constrained to interpolate linearly around selective features from corners, boundaries, or the entire interior of the mesh.
The following rules can be applied to facevarying data interpolation  the ordering here applying progressively more linear constraints:
Mode  Behavior 

FVAR_LINEAR_NONE  smooth everywhere the mesh is smooth 
FVAR_LINEAR_CORNERS_ONLY  sharpen (linearly interpolate) corners only 
FVAR_LINEAR_CORNERS_PLUS1  CORNERS_ONLY + sharpening of junctions of 3 or more regions 
FVAR_LINEAR_CORNERS_PLUS2  CORNERS_PLUS1 + sharpening of darts and concave corners 
FVAR_LINEAR_BOUNDARIES  linear interpolation along all boundary edges and corners 
FVAR_LINEAR_ALL  linear interpolation everywhere (boundaries and interior) 
These rules cannot make the interpolation of the facevarying data smoother than that of the vertices. The presence of sharp features of the mesh created by sharpness values, boundary interpolation rules, or the subdivision scheme itself (e.g. Bilinear) take precedence.
All facevarying interpolation modes illustrated in UV space using the catmark_fvar_bound1 regression shape  a simple 4x4 grid of quads segmented into three UV regions (their control point locations implied by interpolation in the FVAR_LINEAR_ALL case):
SemiSharp Creases
It is possible to modify the subdivision rules to create piecewise smooth surfaces containing infinitely sharp features such as creases and corners. As a special case, surfaces can be made to interpolate their boundaries by tagging their boundary edges as sharp.
However, we've recognized that real world surfaces never really have infinitely sharp edges, especially when viewed sufficiently close. To this end, we've added the notion of semisharp creases, i.e. rounded creases of controllable sharpness. These allow you to create features that are more akin to fillets and blends. As you tag edges and edge chains as creases, you also supply a sharpness value that ranges from 010, with sharpness values >=10 treated as infinitely sharp.
It should be noted that infinitely sharp creases are really tangent discontinuities in the surface, implying that the geometric normals are also discontinuous there. Therefore, displacing along the normal will likely tear apart the surface along the crease. If you really want to displace a surface at a crease, it may be better to make the crease semisharp.
Chaikin Rule
Chaikin's curve subdivision algorithm improves the appearance of multiedge semisharp creases with varying weights. The Chaikin rule interpolates the sharpness of incident edges.
Mode  Behavior 

CREASE_UNIFORM  Apply regular semisharp crease rules 
CREASE_CHAIKIN  Apply "Chaikin" semisharp crease rules 
Example of contiguous semisharp creases interpolation:
"Triangle Subdivision" Rule
The triangle subdivision rule is a rule added to the CatmullClark scheme that can be applied to all triangular faces; this rule was empirically determined to make triangles subdivide more smoothly. However, this rule breaks the nice property that two separate meshes can be joined seamlessly by overlapping their boundaries; i.e. when there are triangles at either boundary, it is impossible to join the meshes seamlessly
Mode  Behavior 

TRI_SUB_CATMARK  Default Catmark scheme weights 
TRI_SUB_SMOOTH  "Smooth triangle" weights 
Cylinder example :
Manifold vs NonManifold Geometry
Continuous limit surfaces generally require that the topology be a twodimensional manifold for the limit surface to be unambiguous. It is possible (and sometimes useful, if only temporarily) to model nonmanifold geometry and so create surfaces whose limit is not as welldefined.
The following examples show typical cases of nonmanifold topological configurations.
NonManifold Fan
This "fan" configuration shows an edge shared by 3 distinct faces.
With this configuration, it is unclear which face should contribute to the limit surface (assuming it is singular) as three of them share the same edge. Fan configurations are not limited to three incident faces: any configuration where an edge is shared by more than two faces incurs the same problem.
These and other regions involving nonmanifold edges are dealt with by considering regions that are "locally manifold". Rather than a single limit surface through this problematic edge with its many incident faces, the edge locally partitions a single limit surface into more than one. So each of the three faces here will have their own (locally manifold) limit surface  all of which meet at the shared edge.
NonManifold Disconnected Vertex
A vertex is disconnected from any edge and face.
This case is fairly trivial: there is a very clear limit surface for the four vertices and the face they define, but no possible way to exact a limit surface from the disconnected vertex.
While the vertex does not contribute to any limit surface, it may not be completely irrelevant though. Such vertices may be worth retaining during subdivision (if for no other reason than to preserve certain vertex ordering) and simply ignored when it comes time to consider the limit surface.