SubD to Nurbs G0 continuity problem

Wow, thank you very much!
That makes sense and is easy to understand without diving too deep into the mathmathics behind it.

These edges should be G0 since they are position only (Hard edges)

Is that what you refer to? If so then that is as expected.

1 Like

No, those edge are ok. I refer to the other edges

1 Like

G0 = continuous
G1 = G0 + tangent continuous
G2 = G1 + curvature continuous.

Rhino SubDs are Catmull Clark subdivision surfaces. Below “subd” means Catmull Clark subdivision surface.

For every interior point on a smooth subd edge, the subd is G2.
At an ordinary smooth vertex (4 faces and 4 smooth edges), the subd is also G2.

At smooth exceptional vertices (also called “star points”) the subd is G1, but often is not G2.

In many cases, the corners of subd faces at exceptional vertices are not even NURBS surfaces. This is a well known issue with Catmull Clark subdivision surfaces. As a result, ToNurbs is forced to approximate the subd surface at exceptional points. Chuck has done the hard part of getting a smoother NURBS approximation at exceptional vertices and this will be added to ToNurbs in the near future. In addition, we have finished developing the tools to automatically group subd quads into large grids that can become a single face in the ToNurbs brep and an option to make fewer and larger brep faces will be added to ToNurbs in the near future.

Zebra analysis is created by rendering a simple environment map on a polygon mesh approximation of the brep or subd. Away from the NURBS surface bispans touching exceptional points, any Zebra visualization issues are mesh rendering artifacts. You can run the Zebra command on the subd itself to get a better idea of the subd surface shape. (The mesh used for Zebra display on subds is a very regular quad mesh, the meshes on breps are often more ragged.) You may use the ExtractAnalysisMesh command to see the mesh being used to create the Zebra image.


Setting 0.2 for Tangency and Curvature is too tight a tolerance for Sub-D. 0.5 will be good enough.

In fact the problematic areas are at the starpoints.
The TSplines conversion has some problems too, but to a lesser extend.
The biggest advantage for Tsplines lies in its simplyfied patch layout, resulting in fewer surfaces.

From what I understand the secret sauce in the Tspline to NURBS conversion was a sub divide face exact operation done 5 times before conversion. If you look at the output of this operation in Tsplines you’ll see the extra Isoprams added from the sub divide. This would of course only happen on Tsplines with star points. Single spans were never sub divided.

The result of the 5x sub division was to reduce the impact/span of the discontinuity at the star point by a factor of five, perhaps to below the mfg tolerance. It had the added (bonus?) factor of making the To Nurbs operation a one way street, with the output way more messy than the Tspline it was based on. I did like this from a source protection/process reverse engineering point of view.

Good to hear SubD ToNurbs will have smaller face number count


I nearly missed that bit. Excellent!

@patrick_n - There are topology techniques to refine the shape. I have found that refining the shape around star points can help mitigate some of the area around the star. Inserting an edge or two around the area can help refine reflection lines.

I think we need some more explanations of the theory behind subD surfaces and their curvatures.

McNeel and others have done extensive tutorials and explanations for how curvature works with nurbs curves. There seems to be some similarity between how that works and how subD works.

Things I’d like to know more about:

-the mathematics/theory of how many segments a subD pipe needs before it gets indistinguishably close to circular (the rhino command for SubD pipe gives 8 segments for a reason, right?)
-how the math of the pull of wires on each other works
-how this relates, as an analogy, to control points on nurbs curves
-how ngon faces complicate things

I’m sure there’s more beyond this. I’m figuring out certain rules as I go, and as I experiment, but I’m not a mathematician or particularly well educated in geometry or how it all works under the hood, and a professional explanation/tutorial would be very useful.


@dalelear this one is for you!


The Rhino SubD Rules document that explains the mathematics of RhinoSubD surface evaluation.

I’ve added a reminder for me to write a document that clearly explains Rhino SubD surface continuity. Here’s a very brief sketch.

G0 = continuous (no gaps)
G1 = G0 + tangent continuous (no creases)
G2 = G1 + curvature continuous

Curve examples

Rhino SubD surface continuity:

Points on creased edges are at least G0 but usually not G1.
Points at crease, corner, and dart vertices are G0 but usually not G1.

  • Smooth vertices with 3 edges are G1 but usually not G2.
  • Smooth vertices with 4 smooth edges are G2.
  • Smooth vertices with 5 or more edges are G1 but usually not G2.
  • The interior of every smooth edge is G2.
  • Every quad face is G2.
  • The subdivison point in the middle of a non-quad face (triangle, 5-gon, etc) is G1 but usually not G2. The rest of the face is G2.

In the example SubD shown below. The red points are G1. The rest of the SubD is G2.



hi @dale,

If you trimmed the star point with either the red, yellow, or green circle, and then you patched it with an @XNurbs patch, would you be able to reach smoothness?

How far does the discontinuity of the star-point propagates? (Along the start edges)

EDIT: forgot to upload this…



1 Like

Zero! This is one of those things that math nerds like to drone on about for eons. (Pro tip - don’t invite me to a party.) Something can be perfectly GN everyplace except a single point.

It’s a little easier to think about with curves.

At a subd “star point” it is often the case that the the curvature simply does not exist. But it is alwasy the case that at every single point nearby but not equal to the star point, the SubD surface is G2.

There is at least one serious issue with the approach you suggest. The boundaries of subd object have zero cross boundary curvature. That means you can’t “trim the star point” without modifying the nearby surface location AND having that surface get very flat across the boundary.

Detail from Star Hole.3dm

Star Hole.3dm (308.1 KB)

There’s two different ways to answer the question about how far the discontinuity propagates.

Dale has the correct answer for true SubDs.

However, it is generally not possible to convert a SubD directly to Nurbs, especially around extraordinary regions (star points / n-gons). So anyone that is doing a SubD -> Nurbs conversion is doing some kind of approximation, which will either increase the degree of the Nurbs surfaces or decrease the continuity locally near the star point / n-gon.

The answer for how far the discontinuity propagates in the Nurbs conversion depends on the approximation used. I’ve seen approximations that are G2 everywhere, even at the extraordinary point, although G0 or G1 are more common.

1 Like

Makes sense. I’d love to party with you!

BY trimming, I meant after converting _ToNurbs.

Take a look at this…

The sphere cut is a lot more drastic change since I’m ‘eroding’ a bunch of stuff.

file here for proper inspectionXnurbs_on_corner_starpoint_gf_201014.3dm (1.7 MB)

Since the discontinuities are only 'at a point, I tried this other approach of trimming all the T/star points with micro spheres. It’s pretty impressive I think:

rhino file…
micro_trim_spheres_stars_gf_200514.3dm (5.7 MB)

I’m explorating this because I’m trying to convince @XNurbs guy to release a grasshopper components so we can identity all T-joints and Star joint and give them one of these microspheres skin smoothing treatment. Like this:


1 Like

Gustavo! You never give me all the details. If you’re willing to use goo to improve your models, just rough it out in Rhino and finish it with a good dose of this.


I know, I know… our clients have been tooling from our files with star points and all, I think they just polish the tool and that’s it. No Bondo or Microbeads cream needed. I just need cool tricks for cocktail parties.