Catmull-Clark subdivision surfaces: holes and boundaries

Posted: 12 Jun 2011 10:37
Tags: catmull clark subdivision surface

As promised, this post describes the remaining features in Catmull-Clark subdivision surfaces: holes and boundaries. This is going to be a lot more straightforward than the previous posts

Holes

A hole is a face or a group of faces that will not generate geometry to be drawn. You could say, why bother and specify data that will not be seen? Remember that a face depends on its 1-neighbourhood. Therefore, when a subdivision iteration occurs, a face next to a hole is influenced by it even if it is not to be seen.

Putting it all together
Image Unavailable
crease, hole and two corners

Boundaries

So far, so good but for faces abutting the boundary of an open mesh, their 1-neighbourhood is not complete and smooth subdivision rules as defined in this post do not apply. There are three possible interpolation strategies to handle this particular case:

  • no interpolation: boundary faces are treated like holes and will not be rendered
  • edge interpolation: boundary edges are tagged as infinitely sharp creases (which do not require a 1-neighbourhood for subdivision). All boundary vertices become implicitely crease vertices.
  • full interpolation: boundary edges are tagged as infinitely sharp creases and boundary vertices of valence 2 (in general, these correspond to geometric corners) are tagged as infinitely sharp corners. If you have abutting control meshes, you get abutting limit surfaces but they are only C0-continuous.

Let's have a quick example to illustrate all of these:

No interpolation
Image Unavailable
Edge interpolation
Image Unavailable
Full interpolation
Image Unavailable

Not yet ready …

This ends the series of posts on Catmull-Clark but it does not mean I am ready for delivery. Although I have made good progress with the implementation, there are still rough edges to be ironed out, the biggest one being the lack of texturing support for this primitive.

Rate this post:

rating: 0+x

Comments: 2