I implemented the tiger, sphone, and duospindle here (specifically at 7:03):
The Duo-spindle was really cool. I didn't have to round the manifold to get a good result which was surprising, and it had some interesting features.
It got cut off in the video, but here's the projection function I used for the duospindle in the video:
Proj::proj(vector: vec4) -> vec4 { let xy: vec4 = vec4(vector.x, vector.y, 0, 0); let xy_len: f32 = length(xy); let zw: vec4 = vec4(0, 0, vector.z, vector.w); let zw_len: f32 = length(zw); let d: f32 = clamp(xy_len - zw_len, -r, r); let xy_component: vec4 = select( normalize(xy), vec4(0, 0, 0, 0), xy_len == 0 ) * (r + d); let zw_component: vec4 = select( normalize(zw), vec4(0, 0, 0, 0), zw_len == 0 ) * (r - d); (xy_component + zw_component) / 2 }
The rest of the basic shape code is at 14:31
I'll try some of the other manifolds soon, the pinched duo-cylinder looks interesting.