//****************************************************************************//
//************ Catmull-Clark Subdivision- April 3rd, 2019 *******************//
//**************************************************************************//
- We're starting off today's lecture with a video - "Geri's Game," from Pixar wayyyy back in 1997
- Besides being enjoyable, this is the first film Pixar ever did with sudvidision surfaces (and if you look at the "Executive Producers" in the credits, Edwin Catmull is right there!)
- If you look at the original mesh for Geri, his face is mostly made up of quadrilaterals, but with a few triangles here and there
- How do you end up with creases in "smooth" subdivided surfaces? Tony DeRose figured out a way to do it in this movie with Geri's wrinkles, so there must be a way!
--------------------------------------------------------------------
- If Pixar uses Catmull-Clark subdivision, then it should be good enough for us - so let's look at it!
- CATMULL-CLARK subdivision is C2 ALMOST everywhere, and is for surfaces made up of mostly quadrilaterals
- To subdivide this, for all the polygons in the mesh, we'll first add a new vertex at the middle of the whole polygon AND one to each edge of the polygon, and then connect the edge vertices to the center vertex
--------- ----*----
| | | |
| | => * * * =>
| | | |
--------- ----*----
- Notice that this will turn triangles into quadrilaterals, giving us an all-quad surface after the first subdivision
- More mathematically, if we have a quadrilateral with original vertices V1 to V4, then:
- The new center vertex, V, will have position:
V = 1/4 * (V1 + V2 + V3 + V4)
- For a polygon with "K" vertices, the center vertex in general will be:
V = 1/k * (V1 + ... + Vk)
- Once again, notice that this is a convex combination!
- For the vertices on an edge, this is a little bit more tricky
- In the typical case of two quads that share an edge, the new point on the line the polygons share will be:
v = 1/16(v1 + v2 + v3 + v4) + 3/8(v5 + v6)
- Where the 1/16 vertices are the ones that don't form the edge in question, and the other are the two "line segment" vertices
- MORE generally, for 2 polygons of any number of sides the weight will be an even 1/4 for the 2 vertices forming the line segment and 1/4 for the 2 polygon's central vertices
- After adding these new vertices, though, we need to move the old vertices to actually smooth the surface - how do we do that?
- Well, the math is a little bit messy, but let's say that "ei" are the new "edge vertices" on the mesh and "fi" are the new center vertices
- In that case, we'll say the constant points E and F are:
E = 1/k (e1 + ... + ek)
F = 1/k (f1 + ... + fk)
- THEN, for a given original vertex "v", its new position will be:
v' = E/k + F/k + v*(k-2)/k
- With that calculated, how smooth will this Catmull-Clark surface be?
- As we said, MOST points will have C2 continuity, and will have a valence of 4 (i.e. they'll be quads)
- ...where will it be C1, then? Only at the "extraordinary vertices" of the surface
- Okay, that's Catmull-Clark subdivision in general, but most surfaces aren't perfectly smooth - they have creases and sharp edges on them (e.g. the edge of an otherwise-smooth desk)! How can we replicate that with subdivision?
- To do this, we can "tag"/label certain edges of the polygon to be SHARP
- If a new vertex is being created, we'll ONLY form a new point on that edge using this formula:
V = 1/2(v1 + v2)
- Where v1/v2 are the vertices making up the sharp edge's line segment
- This way, the new points will only be on the line, and won't change that outline!
- If an old vertex is between 2 sharp edges, then, we'll change the formula for its new position to be:
v' = (6v + v1 + v2)/8
- Where v1/v2 are the adjacent vertices to "v" along the sharp edge
- This means that "v" is only allowed to slide along the existing sharp edge - again, not disturbing the outline!
- This doesn't *quite* cover all the cases for sharp edges (what if there are 3 sharp edges leading to a vertex? What about vertices at the end of a sharp edge?), but it should give you the general idea
- Sometimes, we might also want SEMI-SHARP EDGES: cases where we don't want a knife-sharp edge, but we DO want it to hold its shape in some way
- For these, basically, we want to have a sharpness "parameter" for a given edge, where "S=0" doesn't do any sharpening, "S=1" is a little bit sharp, "S=2" is more sharp, and so one, up until "S=infinity" (perfectly sharp)
- The rule for this is actually surprisingly simple: we'll use the "sharp" subdivision rules on a vertex "S" times, and then apply our smoothing rules once
- This adds a bunch of polygons without changing the edge's shape, then tries to smooth those now-smaller polygons (which'll result in a more constrained smoothing)
- Now, we'll be covering platonic solids on Friday, but before we get to that we NEED to talk about regular polygons
- A REGULAR POLYGON is one that is convex, has all sides equal-length, and where all angles within the polygon are the same
- Common examples of these are equilateral triangles, squares, regular pentagons/hexagons/septagons/octagons/etc.
- "Poor Heptagon - we can't agree on a name for 7-sided shapes"
- Years ago, Professor Turk thought that Heptagons just didn't exist out "in the wild," and then one day in CVS he found a pill container with one side for every day of the week - "so I had to buy it!"
- What about a pentagram? It has equal angles and equal sides, but it's NOT convex!
- As it turns out, you can tile your floor with equilateral triangles, squares, and hexagons - but what about the rest? We'll get to that on Friday - adios!