[Solved] A question to someone with deeper knowledge of nurbs


Do nurb surfaces’ control points coincide with their construction curves’ control points, when using loose loft?

In every single case?


They will coincide in only one case. If you use input curves that all have identical knot parameters and you use the “do not simplify” loft option then the surface control points will be in the same location as the construction curve. points.
If the curves don’t match or you use the refit or rebuild option, the points won’t coincide

Thanks Jim,

Second question would be:
Do surface degree match curves’, assuming all curves are of the same degree?

Third question:
Weight on points: is the weight of a point from the curve transferred to the surface’s respective point?

Final question:
What would be the reason to have surfaces with different area, when reverse engineering a nurb surface, by extracting its control points creating curves from them then loose loft a surface?

  • could it be somewhere there’s a weight different from 1?
  • could it be an issue with rounding of coordinate values?


Yes the degree and weight will be the same on the surface if the knot structure of the curves all match.

The reason would be the surface you create from the points has a different knot structure than the original surface.

If the surface has uniform knots, its easy to construct curves that have uniform knots from the points and then reconstruct the surface. If the knot structure is non-uniform in both directions then I don’t think you have the tools to reliably construct the exact same surface.

I know the original surface was created using loose loft from 5-degree nurb curves. If the number and coordinates of surface control points coincide with these of the curves, then I should’ve created exactly the same surface. because I used these points to create nurb curves in grasshopper and then the loose loft. Alas, their areas don’t match.

What do you mean by knots? the intersections of U and V isocurves?
Assuming all curves have the same degree (original and reverse engineered) doesn’t that mean knots should also coincide?

If the curves have only one knot span, then what you describe would always work. But if there are more than one span (i.e. more than 6 control points) and the knot spacing is different then it won’t work.

No it doesn’t mean the knots are the same. What you are describing would be ordinary bsplines. You are leaving out the “NU” in “NURBS”. It will work the way you think it should if you confine your curves and surfaces to only ones with uniform knot spacing

This is what’s written in that wikipedia article:

The number of knots is always equal to the number of control points plus curve degree plus one (i.e. number of control points plus curve order).

I am sure the number of control points of my curves match the original one, knowing that they should coincide in loose lofted surface. I know the degrees of the curves is 5 and I have 14 control points and 20 curves. This would mean I have (14+6) x (20+6) = 520 knots. Same amount for both the original and the reverse engineered, but different areas.


EDIT: Could it really be that because the object is huge and I’m working with millimeters is impacting result so severly? I know Rhino has issues when working with objects far away from the origin.

That’s correct, but the spacing between knots can be different and that is why you are seeing differences in shape.

If the spacing between knots was always the same, there would be no need for a knot vector as part of the definition of a nurbs curve. That would just be redundant information

I’m confused, I have the same control points, same degree, same type of surface (loose loft), from here I have same number of knots, but different shapes.

I understand what you’re saying that the space between the knots are different, but how could that be, if everything is exactly the same?

Is there a way to get coordinates of each knot so i can compare them?

Interesting result I got from Grasshopper command:

The control points seem to differ between the original and the resulting surfaces.

Are you trying to essentially remake a surface you have in Rhino with Grasshopper?

Yes, I’m trying to parametrize a surface created in Rhino with Grasshopper.

Are you making them in the same exact way with the same curves and same commands? (Some picture or file would help)

Yes, exactly the same, though I do not have the curves from which Rhino surface was created, so I extracted the control points instead. But I know that the curves were of degree-5.

Unfortunately, I cannot provide neither picture nor file.
I’ll investigate the change of control points, that I mentioned in my last post. This seems interesting. I extracted the control points to txt from Rhino, then coordinate by coordinate I created the points in Grasshopper. I don’t see reason why they would be different. Could be my mistake, must check.

Without the exact curves it is almost impossible to get the exact same surface (I assume you are taking the control points and making curves through them?), I think you will have a better result by taking the control points of the surface and using them to remake with surface from points.

Interesting approach, I’ll try that, thanks.

I used curves because I didn’t know if (surface from points) will figure out the order of the points.

Not exactly through the points, I used the control points of the surface to create the curves using this:


I fixed my coordinate issue but the difference in areas is still signifficant.

I’m surprised it actually succeeded creating a surface, anyways, the result was even worse:

What is the meaning of “greville uv points”, because they are so so different between ones created inside GH and the one coming from RH?

Greville points are like edit points at knot averages (Like the points a curve interpolates through, rather than control points) So they are the points on the surface or curve. Similar to using Rhino’s EditPtOn or SurfaceEditPoints command.


I’m surprised it actually succeeded creating a surface, anyways, the result was even worse:

It is just really hard to exactly replicate a surface without knowing all the options that made it. For instance if it was a Loft of degree 5, was it lofted Uniformly, Loosly, ect. Was it simplified, was it a loft using rebuild or refit options? Did all curves have the same structure for contol point count, weights, knot vectors (otherwise there is some auto matching and interpolation that would happen behind the scenes in the loft command) I know you answered some of that but really having all the information is key.

Here I get pretty close cuz I know the settings I used to loft with. However, there is still a difference in area doing it this way (without using the curves I lofted with)

20 nurbs degree 5, with 14 points each.
Loose loft (no refit, no simplify, these are dirty words in ship design cad)


they are all on XY plane, not points on curve nor the surface. And Greville points of the surfaces created in GH are like scaled 1:1000x. Which makes no sense to me, yet.

they are all on XY plane, not points on curve nor the surface.

Because you are plugging them into a point component. Look at my above screenshot. They are UV coordinates as in they should be evaluated on a surface. Plug them into the uv input on an Evaluate Surface component.