Interpolation Tribunal
Series index: Part I, Part II (this post), Part III

In Part I, midpoint recursion and one-pass
Derp lerp §
Remember that annoying dependency between rounds of midpoint subdivision? That is, we can’t midpoint an edge until we place both of its endpoints on the sphere first? Turns out, skipping that step and just interpolating all the new vertices over each face of the root icosahedron doesn’t solve the dependency; it just means we’re performing linear interpolation (lerp) in 3D Euclidean space instead of on the surface of the sphere via spherical linear interpolation (slerp).
Visualize this: each round of midpoint subdivision always—and only—places new vertices at edge midpoints. A midpoint on the sphere between two points on the sphere is the same distance and same angle from each endpoint, just like the midpoint of the chord. So, the “project to sphere” step doesn’t change the angular spacing of the inserted vertices.
Now visualize placing a few equally spaced vertices along the root icosahedron’s edge. The edge’s endpoints start on the surface of the sphere, but the inserted points are inside the sphere and farther away from the surface. That inner span travels farther when projected onto the surface. More projection distance causes more magnification, so those equally-spaced vertices can’t stay equally spaced when projected.
Slerp §
Slerp† was first published by Ken Shoemake (of quaternion fame‡): given points on a unit sphere
If you stare at it, that’s just stating, “take a lerp-weighted average of the two points in angular space, which is the
Lerp v. slerp §
How different is lerp from slerp? That question actually has many domain-specific answers, not simply
So, compute the sign and magnitude of angular separation of the two points on the sphere. Define shorthands for slerp and normalized lerp:
Plug and chug into a formula for the signed angle between two vectors¶:
The determinant atan2 to compute an angle of a ratio, which results in the expression
Another part of that domain-specific answer: the error depends on the angle subtended by the edge of the root icosahedron, which is
With the error introduced by lerp characterized, let’s try to improve on it.
Direct slerp subdivision §
Alright, fine. The one-pass method can be even more one-pass-er by combining the interpolation and projection steps into a single, more accurate slerp. Slerp produces the shortest path between two points on a sphere (a geodesic), so we use it to generate

At this point, I’m thinking, midpoint recursion is taking spherical geometry more seriously by only operating on points already on the sphere, while the
That story is tidy and I liked that story.
So, since the direct slerp method is doing the same thing™ as the midpoint recursion method, the new tryhard method should definitely recover the wedge mesh from Part I. Now I’m finally going to get that Z-fighting I crave. Before testing that claim, one implementation detail came up.
Spherical interpolation weights §
You can probably see where this is going, so let’s take a practical detour to talk about the direct part of direct slerp. Feel free to skip this section to resolve the cliffhanger.
Using slerp for geometry is great because we can skip the projection step for vertices that are already on the sphere. However, interpolating attributes on top of that geometry is another issue.
The classic slerp blending coefficients are not affine barycentric weights in Euclidean space. They actually don’t sum to 1 except at the
If you repurpose them directly for per-vertex attributes, you’ll get real errors and they’re not subtle.
To solve this issue, I had been trying to derive a geometrically correct set of weights (i.e. “reverse project” the slerped point back onto the root face), and even tried to cheat by just normalizing over the coefficients’ sum.
However, for now, I’m using a simpler solution: use ordinary barycentric weights for attribute interpolation. The geometry is still correct because the vertices are still placed correctly on the sphere, and the attributes are blended in a way that’s consistent with the vertices’ angular parameterization. It feels right. I’m all ears for a different perspective (no, not like that) on the in-/correctness of this approach.
Derp… slerp? §
Back to matching the directly slerped wedge against the midpoint method’s wedge.

Nope, again. These two also do not match. And like the previous mismatch between midpoint and one-pass subdivision, it’s still a structured pattern. Strangely, of the faces produced by direct slerp, only those along the last row of faces sit proud of the midpoint method’s faces, but not the others. This lack of dihedral symmetry is a new and unexpected twist, and it suggests that yet again I’ve missed some non-commutativity when composing operations that comprise the direct slerp method.
So now we have three plausible constructions, each spherical-looking, yet no two are equivalent. Sure, we can write off the one-pass method as a performance optimization that sacrifices some accuracy, but what about the other two that are trying to be accurate?
- Which one is the correct one?
- Or are they both wrong?
- Or are they both right in different ways?
- Is a perfect icosphere even possible?
- What defines perfection?
- Does it even matter?
- What was I foreshadowing in Part I?
In the next part, I move from aesthetics to scoring the methods with actual measurements, then dive into visualizing where and what the errors are. We’ll get casually into the rigorous geometry and make some hand-wavy logical leaps into applications that I’m no expert in. Finally, I’ll close out the foreshadowing about the midpoint method’s if.