How does the Catmull-Clark mesh subdivision algorithm work

Kristian Kristola

Kristian Kristola

· 5 min read
flutter

This algorithm is also on Wikipedia, but I wanted to write a slightly modified version of it, because I think a couple of steps can be made a bit clearer than on Wikipedia, at least at the time of writing this.

Images by Wikipedia user UserTwoSix.


Step 1: For every face:

  • Calculate the average of all its vertices

==> These are called the face points (blue spheres)


Step 2: For every edge:

  • Take the average of the two vertices that the edge connects and the two face points that belong to the faces that the edge is in middle of

==> These are called the edge points (purple cubes)

  • Additionally, take the average of the two vertices that the edge connects and call it the edge midpoint (not in the picture)

Step 3: For every vertex:

  • Calculate F = the average of all the face points (blue spheres) of the faces that contain this vertex

  • Calculate R = the average of all the edge midpoints (not in the picture) of the edges that contain this vertex

  • P = the original position of the vertex

  • Calculate n = the number of edges that contain this vertex

  • Calculate:

(F + 2R + (n - 3)P) / n

==> These are called vertex points (green cones)

==> The new vertex positions have now been calculated. Now we just need to create the new faces.


Step 4: For every original face:

  • Make new edges by connecting each face point (blue) to every edge point (purple) which belongs to an edge that the face in question contains.


Step 5: For every original vertex:

  • Connect each new vertex point (green) with a new edge to those edge points (purple) that belong to those edges that the vertex touches


Step 6: For every new 4-vertex loop:

  • New loops with four edges have formed
  • Make a new face for every such loop

Kristian Kristola

About Kristian Kristola

I'm a consultant and software developer with a strong foundation in game programming and the ability to adapt to new technologies and languages. Please feel free to contact me at:@
Copyright © 2024 Kiuas Games. All rights reserved.
Made by Osuuskunta Kiuas Games

This website uses Google Analytics to collect anonymous information such as the number of visitors to different pages.