Catmull-Clark Subdivision Surfaces

Catmull-Clark Subdivision Surfaces or, in short SubSurf, is a mathematical algorithm to compute a "smooth" subdivision of a mesh. With any regular Mesh as a starting point, Blender can calculate a smooth subdivision on the fly; while modelling or while rendering. This allows high resolution Mesh modelling without the need to save and maintain huge amounts of data. This also allows for a smooth 'organic' look to the models.

Actually a SubSurfed Mesh and a NURBS surface have many points in common inasmuch as both rely on a "coarse" low-poly "mesh" to define a smooth "high definition" surface, but there are also notable differences:

SubSurf is a Mesh option, the button to activate this is in the EditButtons F9 (Figure 59). The NumButtons immediately below it define, on the left, the resolution (or level) of subdivision for 3D visualization purposes, the one on the right the resolution for rendering purposes.

Since SubSurf computations are performed both real-time, while you model, and at render time, and they are CPU intensive, it is usually good practice to keep the SubSurf level low (but non-zero) while modelling and higher for rendering.

Figure 59. SubSurf buttons

Figure 60 and Figure 61 shows, respectively, a rendering of a SubSurf mesh and the original, un-SubSurfed mesh.

Figure 60. Render of a SubSurfed vase.

Figure 61. The un-SubSurfed mesh of that same vase.

Figure 62 shows a 0,1,2,3 level of SubSurf on a single square face or on a single triangular face. Such a subdivision is performed, on a generic mesh, for each square or rectangular face.

It is evident how each single quadrilateral face produces 4^n faces in the SubSurfed mesh, n being the SubSurf level, or resolution, while each triangular face produces 3*4^(n-1) new faces (Figure 62). This dramatic increase of face (and vertex) number reflects in a slow-down of all editing, and rendering, actions and calls for lower SubSurf level in the Editing process than in the rendering one.

Figure 62. SubSurf of simple square and Rectangular faces.

Blender's subdivision system is based on the Catmull-Clarke algorithm. This produces nice smooth SubSurf meshes but any 'SubSurfed' face, that is, any small face created by the algorithm from a single face of the original mesh, shares the normal orientation of that original face.

This is not an issue for the shape itself, as Figure 63 shows, but it is an issue in the rendering phase, and in solid mode, where abrupt normal changes can produce ugly black lines (Figure 64).

Figure 63. Side view of subsurfed meshes. With random normals (top) and with coherent normals (bottom)

Use the CTRL+N command in EditMode and with all vertices selected to make Blender recalculate the normals.

Figure 64. Solid view of SubSurfed meshes with inconsistent normals (top) and consistent normals (bottom).

In the images the face normals are drawn cyan. You can enable drawing normals in the EditButtons (F9) menu.

It is worth noting that Blender cannot recalculate normals correcty if the mesh is not "Manifold". A "Non-Manifold" mesh is a mesh for which an 'out' cannot unequivocally be computed. Basically, from the Blender point of view, it is a mesh where there are edges belonging to more than two faces.

Figure 65 shows a very simple example of a "Non-Manifold" mesh. In general a "Non-Manifold" mesh occurs when you have internal faces and the like.

Figure 65. A "Non-Manifold" mesh

A "Non-Manifold" mesh is not a problem for conventional meshes, but can give rise to ugly artifacts in SubSurfed meshes, so it is better to avoid them as much as possible.

You can tell that a mesh is "Non Manifold" from two hints:

The SubSurf tool allows for very good "organic" models, but keep in mind that a regular Mesh with square faces gives the best result.

Figure 66 and Figure 67 shows an example of what can be done with Blender SubSurfs.

Figure 66. A Gargoyle base mesh (left) and pertinent level 2 SubSurfed Mesh (right).

Figure 67. Solid view (left) and final rendering (right) of the Gargoyle.