Mixed semi-sharp cube example from [DeRose et al. 1998]

Cornell CS 466: Computer Graphics Practicum

Subdivision Surfaces Project

Instructor: Doug James
Hard CMS Due Date: 3am on Thurs Dec 13 (yes, that's 3hrs after Wed Dec 12 midnight)


In this practicum component you will get experience working with adjacency data structures for representing polygon meshes, and subdivision surface algorithms for modeling and animation.

Project Steps

This project involves several distinct steps:
  1. OBJ file format:  Familiarize yourself with the OBJ file format. Build an OBJ file parser to read vertex and polygon face data, e.g., into temporary arrays.  Error handling is recommended to handle a variety of OBJ files that might be used.  For example, it should provide an error message if the input file has the wrong kind of geometry, e.g., "expected only triangles but found a 6-gon." Some sample triangle-based and quadrilateral-based meshes are provided below.
  2. Mesh adjacency datastructure: Build an object-oriented mesh datastructure with adjacency information to represent the input mesh:
  3. Subdivision: Use your data structure to subdivide the mesh using one subdivision algorithm, e.g., Loop scheme or Catmull-Clark scheme (or even Butterfly scheme, Kobbelt scheme, or Doo-Sabin scheme) (note that some of these schemes require nontriangle meshes, or involve dual meshes).  Augment the adjacency datastructure to support parent and child relationships to navigate the multi-level subdivision mesh hierarchy. For example, vertex objects can point to their child (finer) and parent (coarser) vertex relations;  faces can point to their children (finer) and parent (coarse) relations;  edges can point to their parent edge, or odd-vertex child (in cases where they are bisected);  mesh objects might provide access to mesh components, and support access to refined or coarsened variants.
  4. Interactive modeling: Integrate subdivision surfaces inside your geometric modeling assignment so that you can interactively model and deform the surfaces. You should integrate the OBJ file loading, and subdivision kernels into the modeler GUI, and allow interactive selection of subdivision levels of detail.  Scenegraph transformations act on the control points of the subdivision mesh. Support interactive picking of base-mesh control points to interactively deform the surface.
  5. Mesh export: Implement exporting of subdivided polygon meshes within the modeling program.  For example, a typical usage would be to subdivide and modify a loaded OBJ mesh, then write the new mesh (at some level of detail) out to disk as a new OBJ file complete with vertices, faces, normals, etc.
  6. Hand in your full source code, and compiled executable tools. 

Other things to try:

.obj files

Here are some connected manifold-with-boundary test meshes:

Also, check out Turbo Squid; it has a lot of free models. (Warning: Some of these models can have pretty gross mesh topology, since artists seldom care about the numerical properties of the meshes they create. Improving the error error checking of your code will be helpful.)

Mesh-related Pre-Submission (due Fri Nov 16)

You are required to submit a preliminary version of the final project up to but not including the subdivision algorithm. Please submit source code and a brief write-up describing your mesh data structure implementation that includes:

Additional tips


  1. Tony D. DeRose, Michael Kass, and Tien Truong. Subdivision Surfaces in Character Animation. Proceedings of SIGGRAPH 98. pp. 85-94, 1998.
  2. Hugues Hoppe, Tony DeRose, Tom Duchamp, Mark Halstead, Hubert Jin, John McDonald, Jean Schweitzer, and Werner Stuetzle. Piecewise Smooth Surface Reconstruction. Proceedings of SIGGRAPH 94. pp. 295-302, 1994.
  3. Jos Stam. Exact Evaluation of Catmull-Clark Subdivision Surfaces at Arbitrary Parameter Values. Proceedings of SIGGRAPH 98. pp. 395-404, 1998.
  4. Joe Warren and Henrik Weimer. Subdivision Methods for Geometric Design: A Constructive Approach Morgan Kaufmann, 2001.
  5. Denis Zorin, Peter Schröder, Tony DeRose, Leif Kobbelt, Adi Levin, and Wim Sweldens. Subdivision for Modeling and Animation. SIGGRAPH 2000 Course Notes. 2000.