Extraordinary points

15 April 2026

Note: this article is not finished yet.

In my article about basis splines, we looked at basis spline surfaces created from two linearly independent basis splines. The surface is defined as the tensor product of these two basis splines, which results in the control point mesh topology to be rectangular.

Because of this, it is not possible to represent more complex topologies, such as a cube, using a single continuous surface. The solution to this is to represent a mesh using separate surface patches. These patches are trimmed using basis spline curves and later blended or stitched together.

A limitation of this approach is that it does not guarantee mesh watertightness as the trim curves cannot be projected onto the local parameter space of a given patch analytically, and multiple patches might not exactly align at the trimming curve. Another limitation is geometric and parametric continuity guarantees at the trimming curves, e.g. \(G0\), \(G1\), \(G2\) and \(C0\), \(C1\), \(C2\).

My goal with this article is to explore whether it is possible to create a mesh representation that:

One of these requirements – the ability to represent any shape – requires extraordinary points (EPs).

EPs are defined as vertices that have valence \(v \not= 4\).

A cube for example, has 6 EPs, one at each corner vertex. Where each corner vertex has valence \(v=3\).

Generalization of basis splines: PB-splines #

Basis splines have a single knot vector, which creates the segments in parameter space for the piecewise polynomial basis functions. We can change this so that each individual basis function has its own knot vector. In the T-splines paper, these are referred to as PB-splines.

Another change is to define the knot vector not in terms of absolute parameter values, but as segment lengths.

In the context of a surface instead of a curve, each bivariate basis function associated with a given control point has two separate knot vectors.

Deducing knot vectors #

Given these changes, we can create a mesh with arbitrary topology. However, it is not intuitive for a user to fill in each individual knot vector. It is also hard to then create knot vectors that guarantee partition of unity and a given curve continuity. Therefore, we must define a certain method for deducing the knot vector given a certain mesh topology. This is trivial for the case where the mesh topology is a rectangular patch as this degenerates to a simple tensor product NURBS patch. However, in the case of EPs, the knot vector is ambiguous, as there aren’t 4 clear directions (up, down, left, right), i.e. 2 dimensions \((u, v)\) for the parameter space.

T-junctions #

We need a way to locally add more detail to the mesh. This can be done with T-junctions. A T-junction is a vertex that does not have 4 indicent edges, but 3. When deducing the knot vectors for that vertex, the missing edge can be replaced with a simple raytrace in parameter space.

Quad flow topology techniques #

As an alternative to T-junctions, we could use common modeling techniques for going from \(n\) edges to \(m\) edges using only quads (see the following figure). But these introduce additional EPs that redirect the flow of the parameter space, which could be less desirable than T-junctions.

Parameter space around EPs #

For valence \(v=6\), this gives the patches and corresponding parameter spaces \(p_0(u,v)\), \(p_1(v,w)\), \(p_2(w,x)\), \(p_3(x,y)\), \(p_4(y,z)\), and \(p_5(z,u)\).

The basis functions are computed in their own parameter space. When deducing the knot vectors by “raytracing” into the other parameter spaces, it is ambiguous which space to use. Therefore, we add a constraint that the edge lengths around an EP must be equal.

Assuming a 1:1 mapping from the control points to the knots, this requirement is extended to require equal edge lengths for multiple rings around the EP. See the following ring-neighborhoods:

An issue that needs addressing is how evaluating the basis functions will result in distortion. To visualize this distortion, we can plot the basis function for the EP. For simplicity, we set all edge lengths to 1. We map the value for the basis function to a color gradient, and render this on the face. We can do this for different degrees.

Because of the edge length constraint, the interpolation function is symmetrical along the \(u\)-axis in point (u)

For degree \(d=1\), i.e. a linear basis function, we need a 1-ring neighborhood around the EP. For \(d=2\) and \(d=3\) a 2-ring neighborhood.

Because a basis function is made up of \(d+1\) segments and knot vector of size \(d+2\), this gives the following table:

DegreeSegmentsKnot vectorN-ring neighborhood
1 (linear)2\([-u_1, u_0, u_1]\)1
2 (quadratic)3\([-u_{1.5}, -u_{0.5}, u_{0.5}, u_{1.5}]\)2
3 (cubic)4\([-u_2, -u_1, u_0, u_1, u_2]\)2
4 (quartic)5\([-u_{2.5}, -u_{1.5}, -u_{0.5}, u_{0.5}, u_{1.5}, u_{2.5}]\)3
5 (quintic)6\([-u_3, -u_2, -u_1, u_0, u_1, u_2, u_3]\)3

So, in order to construct a basis function of degree \(d\) for the EP, \(\left\lceil \frac{d+1}{2} \right\rceil\) neighboring rings need to exist around the EP.