Wish: More options for "Match surface"

Hi, I would add another interesting option, that I use in some cases, which is to match a patch projecting the control points in a specific direction(X, Y, Z) , for example in Y, for patches of the wheel arch or bodyside. In X direction for the front grill…
The benefit of that, is you can mantain a good control point distribution of the patches from that specific view in the same time you are modifying or tweaking them.
If it is too complex to add this feature, just add view projection option(current view) and it would work aswell, and more simple.
I think that the majority of the automotive modelers see my point, cause I use this quite a lot in others 3d softwares.
Thank you in advance.


That’s also a welcomed improvement. It have been requested multiple times over the years. Here is one of my posts where I linked a video example of how the projected match works in Alias:

And here is the same video for a quick overview (after the 9:10 minute is where it gets really interesting):

1 Like

Here is another case where the projected match could be essential, but this time I will give you an example with matching a surface edge to a curve consisting a different number of control points with some random distribution. Having a “Set direction” option would let the user set a vector for the matching direction in a similar fashion like the “Planar sections” option of the “Blend surface” tool. I think that it’s self-explanatory why that option would make the modeling experience with Rhino so much better. The current implementation of “Match surface” is quite limited and fails to achieve the necessary result, as shown in my video below. By the end of the video I show how that option is supposed to work by preserving the target direction.

Match surface with Set direction option.3dm (1.9 MB)

Note: If the target curve is longer or shorter than the edge to be matched, then the latter should still try to keep the same parallel direction, even though that may lead to some weird looking results. But when the target curve is relatively same shape and length as the edge to be match, that option would work perfectly fine.


+1 to this, think I’ve posted an example before which I will try and dig out.

1 Like

+1 for point alignment…
I would have liked _matchsrf to keep the points visible during the action and to allow you to play with the points to correct their directions and distributions and their distance from the edge. point by point or by row.

(currently it is possible to use the history to work around this problem.) but you have to quit the command before you can make the changes.
view that the history in rhino is limited to these days. I hope it improves in the future in ways that allow real-time editing for both surfaces at the same time. I saw video vsr it has this possibility. if i remember correctly

the big ogre that strangles me is not being able to convert the direction of the third row of points which corresponds to the curvature with a .lock unlock option. to slide the points in the direction parallel to the edge, with the possibility of loosening or tightening the margin of the slide using a slider for example.
even if that does not give a perfect continuity g2 here allows to preserve at least the silhouette of the surface and to be able to modify it as he sees the user.
currently the command makes the third row of dots follow the direction of the second row. which destroys the shape of the surface.

I’m sure this has all been mentioned several times in other threads. not to mention this discussion


Yes, one of the hugely missing functionalities of “Match surface” is the ability to preserve the control point flow while matching with G2 curvature. That must be an option with a tickbox that could be activated or deactivated at any time during the command. The fact that the 3rd row of control points moves along the UV direction is often disturbing and destroys the intended shape of the surface. Activating that option while matching with G2 should affect the 3rd row of control points only in the normal direction, even at the cost of losing some accuracy (i.e. G1,8 instead of a perfect G2). I proposed that approach years ago in multiple threads and sadly it’s still not implemented. I’m pretty sure that many Rhino users would love to use it.

Also, Class-A modeling programs such like Alias benefit from having “Explicit control” over the structure of the surface in the majority of tools, which is basically ability to use “Rebuild surface” inside another active command such like “Match surface”, “Blend surface”, “Sweep 2 rails” etc.


A pretty simple case where “Match surface” fails to achieve acceptable results despite that both surfaces have the same degree and control point count. Is that a bug or I do something wrong? The control polygons across the adjacent surfaces also don’t match quite well when you turn on the control points.

Match surface fail 3.3dm (162.1 KB)


I think it is a combination of how the geometry of NURBS surfaces works and how MatchSrf is designed to work. Exact tangential continuity along the entire length of the edges requires moving control points towards or away from the edge. MatchSrf appears to only move control points more or less normal to the surface and does not change the distance from the edge. My guess is this behavior by MatchSrf is intentional. By only moving control points normal to the surface exact matching may be only possible at a discrete set of locations. That is why MatchSrf has the “Refine match” option which adds knots and control points as needed to achieve the match within the requested tolerance.

I’ve been looking into the math of tangency and curvature matching of surfaces and it is much more complicated than the equivalent matching of curves.

Example of two exact tangency matches:
Match surface fail 3 DC01.3dm (2.8 MB)

1 Like

I don’t know why is this happening in Rhino, since Alias could do it perfectly. NURBS should be NURBS in every program. Also, I was able to achieve 0,5 degrees manually by moving the 2nd row of control points along their normal direction with the “MoveUVN” tool. It’s amazing that the automatic “Match surface” tool can’t achieve less than 1 degree of tangency.

Presumable Alias moves control points in a direction tangential to the surface as well as normal to the surface. See the examples of exact matches I posted above and compare them to what MatchSrf provides.

It appears that in your example MatchSrf provides an exact match at the side edges. My guess is that is by design. What was the match at the side edges when you manually moved control points?

It was exactly the same except that I moved them to the normal direction only. I don’t keep that model, but it’s easy to make a new one with the “MoveUVN” tool. My goal was to keep the control points at those exact locations across the UV coordinate and only modify the N position. But looks like it’s not possible to do so.

It bugs me that the automatic “Match surface” will create a very unnatural looking control polygon flow along those rows of control points. This thing alone breaks the tangency:

1 Like

I think what you’re not taking into consideration is that curvature and tangency don’t simply follow the UV directions. If the surface is not uniform in it’s control point structure then the curvatures/tangency can run in varying ‘degrees’ diagonally across the surface. When this happens, as in your case, you’re forced to keep on increasing the degree of the matching surface until the maths has enough control points to fully describe how the curvature/tangency crosses the surfaces boundaries diagonally.

Same thing happens in ICEM Surf. If you keep the degree of the matching surface the same and keep on applying the match tool then it’ll distort the control points heavily to get a better match. Increase the degree to 7 or 8 and you’ll get a very clean match.

This is just normal and part of what @davidcockey is describing about the maths involved.

That’s not to say MatchSurf command doesn’t need improvement though…

The problem is that “Match surface” is supposed to achieve a proper tangency, while in reality the 2nd control point of the matched surface in this particular example is not even tangent to the corresponding 2nd control point of the target surface. The angle between those opposite control points between the two adjacent surfaces is 6,1646619 degrees. :slight_smile:

I disagree.

The real problem is that you’re asking the impossible.

The surface you are matching in to is horribly twisted at one end. This causes the tangency to flow across the surface in directions other than straight forward U/V directions. To capture this you’ll have to increase the mathematical ‘resolution’ of the matching surface by increasing the number of control points.

This really isn’t a match surf problem…! :wink:

Try an experiment - increase the order of the matching surface to 8, re-match into that horrible twisting surface and then display your control points and observe what’s happening with the curvature/tangency with the higher ‘resolution’.

Not really. David already demonstrated that a precise match is possible.

Its not hard to manually match Bobi’s surfaces for tangency.

Draw four lines using the bothsides option from the edge cv to the next cv on the surface that you want to match to and then move each control point in the second row of the other surface to the ends of those lines. The surfaces are now precisely matched for tangency. Turn on control points to see how in this file:
MatchSrf.3dm (171.5 KB)

To get the examples David posted all you have to do is scale3d each control point in the second row by the same scale factor using the edge control point as the base point for the scale operation. For Match1 the scale factor is 1.045 and for Match2 the scale factor is 1.93348.

Bobi is right. MatchSrf should be able to do this. It should be able to recognize that the two surfaces start with matching structure and therefore it should have the option to take advantage of that fact.


Or turn on “Refine match” in the current MatchSrf, specify your desired tolerances and MatchSrf will add control points as needed to achieve the tolerance. That is already built into MatchSrf though it refines the match while keeping the degree the same by adding knots and control points.

Give it explicit control over degree/spans and we may be up to something.