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?
For manufacturing: Making a transition to existing Nurbs Surfaces, e.g. matching to a radius.
Matching a SubD tangent to other geometry.
Matching a SubD to other geometry that doesn’t have a matching amount of edges.
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
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.
(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
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!
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.
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
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.
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,
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.