Home Download Tutorial Algorithms GitHub



Catmull-Clark Subdivision Algorithm
Zachary Ferguson



Step 1: For each face in the mesh, create a new vertex at the center of the face.
  1. Average the face vertices' x, y, and z values.
  2. Create a new vertex with these x, y, and z (center vertex).
Step 2: For each edge in the mesh, create a new edge midpoint vertex that is the average of the adjacent edge vertices and the adjacent face vertices.
  1. Sum the two adjacent edge vertices and the two adjacent face vertices created in "Step 1".
  2. Divide this sum by four to yield the new edge vertex.
Step 3: Update the original vertices to be an weighted average of the surrounding face centres, new edge midpoints, and vertex.
  1. Sum all of the face vertices for the faces that the vertex is part of, then divide the sum by the number of edges connected to the vertex.
  2. Sum all of the midpoints of the edges that the vertex is part of, then multiply the sum by two and divide by the number of edges connected to the vertex.
  3. Multiply the vertex that is being updated by the number of edges connected to the vertex minus three and then divide by the number of edges connected to the vertex.
  4. Update the vertex being updated to be the sum of the results from 1, 2, and 3.