Better-er Spheres, Fewer-er Triangles
Series index: Part I (this post), Part II, Part III

Back in 2009 I wrote a post about icospheres. It ended, “To be completed….” Completing it now.
The case for icospheres §
It might be easier for us thinkmeats to imagine UV spheres: globes with latitudes and longitudes.
But for silicon, or at least rasterizing* GPUs, an icosahedron better approximates a sphere with fewer triangles (20 to be exact), and they’re already all equilateral and each equal size to the others. Moreover, if more detail or a smoother surface is needed, we can subdivide the faces into smaller triangles.
Recursive midpoint subdivision §
The best known method is simple and elegant. Because the icosahedron has congruent (equal-sized) equilateral (each side and corner equal) triangular faces, we can picture a single “root” face being subdivided into an “icosa-wedge” to understand how the entire icosphere is constructed. See animated figure above.
- Start with a regular icosahedron, inscribed in a unit sphere†.
- Split each triangle into four by midpointing its edges then connecting the midpoints‡.
- Project all the new vertices back to unit length.
- Repeat until your GPU lawyers up against your abuse.
This is a modified case of Loop subdivision§ whose typical behavior after quartering faces is a “weighted average of neighbors” that yields a mostly-G² limit surface. Because the desired mesh at the limit is a unit sphere, we don’t need the special Loop weights. It’s faster and more exact to constrain vertices to distance 1 from the origin, projecting them onto the sphere’s surface by its definition.
If, and take this if as a hefty Oedipus Rex-sized umbra of foreshadowing, we can split each face of the icosahedron into four congruent equilateral triangles, then the resulting icosphere, regardless of subdivision depth, must consist of only congruent equilateral triangles. How convenient, right?
The exponential growth is annoying §
Besides the (maybe implied) properties of its results, there’s also an annoying wrinkle to the algorithm: each round of subdivision quadruples the triangle count, yielding
| Subdivision depth | Triangle count |
|---|---|
| 0 | 20 |
| 1 | 80 |
| 2 | 320 |
| 3 | 1280 |
| 4 | 5120 |
| 5 | 20480 |
This works great because you can generate lots of mesh density with few rounds¶, but exponential growth is… exponential. It’s actually somewhat unwieldy for 3D.
It sounds nice to grow detail fast, but in practice, it’s a lousy knob for budgeting mesh density.
As a reminder, a sphere’s surface area is
One-pass subdivision §
The method I’ve seen and always thought was superior is one-pass subdivision: divide each edge into

In fact, this is what we see on Wikipedia for geodesic polyhedra.

Wikimedia Commons, User: Tomruen, CC BY-SA 4.0
Now we get
| Subdivision depth | Subdivision segments | Triangle count |
|---|---|---|
| 0 | 1 | 20 |
| 1 | 2 | 80 |
| 3 | 180 | |
| 2 | 4 | 320 |
| 5 | 500 | |
| 6 | 720 | |
| 7 | 980 | |
| 3 | 8 | 1280 |
| 9 … 15 | 1620 … 4500 | |
| 4 | 16 | 5120 |
| 17 … 31 | 5440 … 19800 | |
| 5 | 32 | 20480 |
“Dope,” I thought, “same 320 tris, same icosphere, done.” Time to take a side quest.
Urgent tangent: “geodesic” domes §
Quick aside: where does the geodesic part of geodesic dome come from? Peep the Greek roots of the word: geo- means “earth” (think Gaia) and -desic comes from daiein, meaning “to divide.” Fair enough!
However, be careful with etymology. Geodesy, which obviously shares the same roots, refers to the art of earth measurement. It significantly predates geodesic domes, both the structures and the term as used by John G. DomeBuckminster Fuller, probably the figure most closely associated with them♥. Meaning, geodesic stayed truer to its roots than geodesy did, and even more so than geometry. To make things even clearer (/s): in geodesy and geometry, a geodesic—as a noun—is the shortest path between two points♦. Sound good?
So what’s the etymology of geometry? Why, “earth measurement,” of course.
Anyways, back to the mesh: if one-pass and midpoint reach the same triangle counts, they should produce the same geometry.
The proof of the polygons is in the rendering §
So, take the 16-triangle wedge produced by the

Nope, can’t triforce♣.
They don’t just “floating point epsilon stability” “not line up.” They aren’t just “slightly offset due to accumulated error.” They’re actually visibly different with a distinct dihedral-symmetric pattern in which triangles sit proud of their counterparts, suggesting that the algorithms construct different meshes, not the same mesh with different noise.
If the mismatch pattern is too structured to be numerical noise, then something else is up: they don’t interpolate along the same path(s). Midpoint recursion keeps reprojecting local midpoints onto the sphere. One-pass 1/n first spaces points linearly along a chord, then projects. Those are different geometric operations, and the difference should have a predictable angular error profile over the edge parameter
Maybe the distortion and its cause are obvious without the visual aid. But don’t worry; there’s a lot of analysis left and we’ve still yet to call back to the foreshadowing about the midpoint method’s if yet. That is, except for the previous sentence. That’s definitely a callback.
To be completed… but actually.