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 are excited to share SubDMatch
, a new test command in Rhino that matches a chain of SubD boundary edges to another Rhino curve or surface. Supported target geometry types include NURBS curves and surfaces, BReps, and SubDs. The command offers support for position and tangency continuity.
Want to try it out? Download the latest version of Rhino 9 WIP for Windows or MacOS, and type SubDMatch
to take this command for a spin. If you would like to learn more about it, consider taking a look at this video with an overview of how the command works (watching at 1.5x speed recommended).
Please note that SubDMatch
is in active development in the latest WIP and that it may still have plenty of rough edges. However, we are looking forward to receiving your feedback as we continue developing it towards a fullyfledged command in Rhino 9.
Command options

ReverseTarget
: Flip the orientation of the target curve or a surface/BRep/SubD boundary. 
MatchLocations
: The command works by solving a pointwise matching problem: we move the SubD vertices on the boundary somewhere along the target. By setting theMatchLocations
options, you specify where the boundary SubD vertices will go.ClosestPoints
: Moves the SubD vertices to the points on the target that are at the shortest distance from their initial position.UniformParameters
: Takes the parameter domain of the target curve/target boundary on a surface/BRep/SubD, and samplesn
points on the curve that are equidistant in parameter space. Heren
is the number of vertices in the picked SubD boundary. For example, if the matching SubD boundary is open and contains 4 vertices, and the curve to match is parametrized in the domain 0 to 1, then the 4 points the command will pull the SubD vertices to will be located at parameters t=0, t=1/3, t=2/3, and t=1 on the target curve.EditPoints
*: Moves the SubD vertices to the edit points (the points you get by evaluating a curve at the Greville abcissae) of the target curve / target surface/BRep/SubD boundary.Knots
*: Moves the SubD vertices to points of the target evaluated at the knots of the target.
*EditPoints
andKnots
are only available under certain conditions, see below for more details.

MatchTangents
: Match the tangent vectors evaluated at the chosenMatchLocations
on the target curve or boundary. 
Bulge
: This number controls the distance between the first and second rows of SubD control points that result while performing a tangency match. The allowed bulge factors are clamped between 0.1 and 5. 
FlipTangents
: Reverses the orientation of the tangent vectors on the target curve or boundary.
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
, selectingEditPoints
orKnots
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 a degree7 polysurface is never going to produce a watertight match. Rhino commands like
MakeSubDFriendly
andRebuild
can help you create simpler objects before runningSubDMatch
.
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 crosscurvature at the boundaries (at least the CatmullClark SubD type that Rhino implements). Therefore, curvature continuous SubD matches (like in the MatchSrf
command for NURBS) are not possible.
Examples

Match a curve: subdedgematch_curve.3dm (2.6 MB)

Bike connector: subdedgematch_bikeframe_connector.3dm (822.2 KB)

Tripod: subdedgematch_tri.3dm (209.2 KB)