Rhino WIP Feature: SubDMatch

Have you ever wanted to have more control over the shape of a SubD boundary? Have you ever wanted to match a SubD to some degree of continuity to other Rhino objects?

We’ve added SubDMatch in Rhino WIP.

What is SubDMatch?

SubDMatch matches a chain of SubD boundary edges to another curve, surface or SubD. The command offers support for position and tangency continuity.

Why would you use it?

  1. For manufacturing: Making a transition to existing Nurbs Surfaces, e.g. matching to a radius.
  2. Matching a SubD tangent to other geometry.
  3. Matching a SubD to other geometry that doesn’t have a matching amount of edges.

Examples

Want to try it out? Download the latest version of Rhino WIP


Tips and tricks

Some conditions will greatly help SubDMatch to achieve more accurate matches, here are a couple of tips to do that:

  • In the choice of MatchLocations, selecting EditPoints or Knots will normally produce tighter matches. However, these options will only be available if and only if the number of edit points or knots in the target object is equal to the number of vertices in the selected SubD boundary.
  • SubDs can approximate best a limited subset of NURBS objects. Oversimplifying, SubDs “are” BReps made of degree 3 NURBS surface patches. Therefore, trying to match to a degree-7 polysurface is never going to produce a watertight match. Rhino commands like MakeSubDFriendly and Rebuild can help you create simpler objects before running SubDMatch.

Known limitations

The SubDMatch command will produce fairly inaccurate matches or won’t work at all in any of these cases:

  • For position matching:

    • In the presence of edges with weighted creases connected to the matching boundary of a SubD.
  • For tangency matching:

    • If all the faces next to the matching SubD boundary are not quads (i.e. if there are triangular or ngon faces next to the boundary).
    • In the presence of any creased vertex on the matching chain of SubD boundary edges, with the exception of creased vertices located at the start or end of an open chain.

We are working hard to reduce the size of this list by adding support for the abovementioned cases :slightly_smiling_face:

SubDs have zero cross-curvature at the boundaries (at least the Catmull-Clark SubD type that Rhino implements). Therefore, curvature continuous SubD matches (like in the MatchSrf command for NURBS) are not possible.

Download Rhino WIP…

36 Likes

Super exciting!

1 Like

We hope you find the command useful, @martinsiegrist!

crazy stuff!!

1 Like

nice.
(1) would be great if the command options (tangent check box) are saved.

did a fast test with a corner for chamfer of a box

ToNurbs with G1xx

TestSubDEdgeMatch.3dm (3.6 MB)

(2) for more complex stuff, it would be great to have some optional kind of “matching / align guides”, input point to point… (vertex to target)

(3) I see a great potential not only in the combination SubD Nurbs but also just in more easily define some subD conditions or even more like a constraint.
are inner matches supported ? - this would be a great benefit
similar to this older topic
and if seen more as a constraint then a match - i would love to see history - support

3 Likes

This is a great example, @Tom_P! We only offer support for matches along the boundary edges of a SubD at this time. However, we do plan to support history for this command and to store the command settings of the last run, so please stay tuned for an update. Thanks for your feedback!

6 Likes

Great feature! And thanks for the detailed explanation.

A suggestion if it’s going to take until Rhino 9 to be a standard feature:

Put a UI opt-in flag in Rhino to allow accessing it as
SubDEdgeMatch (without the ‘Test’)

(Also in API’s including scripting)

Reasoning: this will be pretty widely used even while it’s an experimental feature, so it would be nice for early adopters, devs and scripters, to not have a problem for themselves or their users when it goes live and the name changes.

1 Like

Did you check this link ?

Alias has a command called

which seems to make a lot of sense / has a lot of power.

please consider inner edge match to curve - wether it s the same underlying algorithm or closer to align - command

1 Like

Thanks for the pointer to the topic, @Tom_P! The topic is on our radar. Will do our best to add support for interior SubDs edges sometime, but can’t promise just yet. I hope though that you find TestSubDEdgeMatch useful to match SubD boundaries to other objects in the meantime :slight_smile:

Hi Rafael @pastrana
Thanks a lot, this is very great.

As this is a Test command, slated for R9, Are we still going to have access to it [the Test Command] once R8 is released ?

Or will it move from WIP8 to WIP9 and get removed from the released version? [I hope not]

thanks a lot
akash

1 Like

This is our current plan. The command would be removed from Rhino 8 once a Rhino 9 WIP is available. Development would continue in the Rhino 9 WIP, but as a real command.

2 Likes

Hi,I downloaded the latest WIP TestSubdEdgeMatchbut it doesn’t show up in the command line.

It’s a test command, try typing the whole name: TestSubDEdgeMatch

4 Likes

Thanks

Hello Rafael,
your tool is fantastic, congratulation, very very useful!
Is it also possible evolve it to generate N-sided surface whit perfect G2 continuity inner and at the boundary edges. Look the images, please.
Best,

Toni



3 Likes

could you post that file?

G2 continuity with SubD is probably not going to happen, because SubDs always have 0 cross curvature on their boundary. We would need a way to trim SubDs to be able to control curvatures on SubD boundaries.

For generating the patch layout, we are thinking about it for future improvements to SubD commands.

If you already have the patch created without the boundaries matched up, and an exact solution to the multi-edge G1 tangency problem exists, you should be able to find that solution by repeating the SubDMatch command for each boundary side. If there is no exact solution (for example because target tangent directions are not compatible around a corner), then applying SubDMatch repeatedly won’t work because you would risk loosing G0 continuity on an edge when matching the nest one for G1 continuity.

hi why? TestSubDEdgeMatch cannot run in Rhin8 Today update

2 Likes

Hi -

As was stated earlier in this thread, this is something that will be further developed in Rhino 9.
-wim

1 Like

This feature will be available as SubDMatch in Rhino 9. The Rhino 9 WIP should be available for download in the coming weeks.

6 Likes