Extraordinary vertices

Can U-splines deal with extraordinary vertices? If so, how? I understood that U-splines subsumes T-splines, which I understand to actually mean T-NURCCS (with extraordinary vertices).

I am experimenting on implementing U-splines, and don’t have access to a reference implementation, so perhaps someone could share what the result of the following toy example is on Coreform’s implementation.

Consider five four-sided faces which form a cube without a bottom face. The corners on the top face are then extraordinary vertices (each vertex has 3 shared faces). Suppose I require that these faces connect across edges with C1 continuity. If I run through my implementation with 2x2 patches, what I get is a cone: there are four control points which control the shape of the round curve at the bottom, and the top face is shrunk into a single control point which is the tip of the cone. Hence there is a sharp corner at the tip of the cone. This solution, I believe, is valid in the sense that the functions do connect with continuous derivatives; it’s just that the derivative goes to zero at the tip of the cone.

If I then increase the degrees of the faces to 4x4, then I get rid of the cone; i.e. the top face no longer collapses to a point, and I get a smooth surface except for the extraordinary vertices, where sharp corners remain. Again, I think it is differentiable with zero derivatives, but no well-defined tangent plane.

What I’d expect instead, as with T-NURCCS, is that the resulting surface had a well-defined tangent plane even at the extraordinary vertices. Is that possible?

I can give you a short answer, but @derek or @steven can give you more detailed answers.

Short: Yes! A single U-spline entity can handle extraordinary vertices in its native data structure. There is no need to do “multi-patch” (i.e. multiple U-splines) as is done with NURBS entities that encounter an extraordinary point. Here are some examples:

Quadratic, \mathcal{C}^1 U-spline Example

A single U-spline entity on an unstructured, triangular domain – showing one of the global basis functions.

Here’s the same basis function, but colored by a measure of the face-normal which gives some insight to the continuity of the spline. Note the \mathcal{C}^0 continuity around the extraordinary point, evolving into \mathcal{C}^1 continuity as we move away.

Multipatch, Quadratic, \mathcal{C}^0 B-spline Example

And here’s that same mesh, but using B-splines (i.e. requires multi-patch approach). Notice the \mathcal{C^0} continuity:

Thank you @gvernon! Just having a confirmation that something is possible is extremely useful. Having looked at my implementation, I noticed that it had a bug which caused the supports to get too large; hence the cone shape. Now the supports for your example are computed correctly, but I still have some bug so that the null vectors end up incorrect. I’ll keep debugging.

I fixed my bugs, and now have a beautiful surface for the above case. Thanks!

For future readers, my bug was assuming that when I require C1 continuity from an edge, U-spline algorithm would always give me that. Hence, my spline was overconstrained. In the above case the constraints were also inconsistent, so what I got instead was the least-squares solution. The important realization is that U-splines in fact do not provide the required parametric continuity everywhere. As @gvernon’s visualization shows, near an extraordinary vertex there is a transition in parametric continuity. While we do not have C1 continuity, my conjecture is that we have G1 (geometric) continuity instead; i.e. that the unit normals in @gvernon’s images are C1.

Here is what I get for @gvernon’s example:

There are three quads, each of degree 2x2, and a C1 continuity requirement on each edge. Above I speculated that the extraordinary vertex would be G1. However, this image suggests that at the extraordinary vertex it is not even G1. Instead, there are three “bumps”, which meet with C0 continuity. Can @gvernon or someone else confirm whether this is a correct result? In my solution, there are 12 basis functions / control points. 9 of them control boundaries, while three at the top control the bumpy top. The shape of the bumps probably are affected by parametric lengths. In my case, the parametric length of each quad edge is 1.

Turned out that the rows of my spline basis matrix did not sum to 1, although I do normalization for them. Cheating and simply dividing each row by its sum (so that I have convex combinations) produces this:

Now the bumps are gone and it seems we have G1 continuity. So it seems I have a bug in the normalization step, which should produce rows which sum to 1 but doesn’t.

I realized I can compute the nullity of the null space to check how many basis functions there should be. With C1 continuity, there should be 10. Hence, it seems that the cone is actually the correct solution:

This gives correct normalization.

I also realized that if there are more than 10 basis functions with the same constraints, then the basis functions cannot be normalized. That could be connected to linear dependency. So there was no bug in the normalization step, but in how many basis functions were chosen.