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 fully-fledged command in Rhino 9.
ReverseTarget: Flip the orientation of the target curve or a surface/BRep/SubD boundary.
MatchLocations: The command works by solving a point-wise matching problem: we move the SubD vertices on the boundary somewhere along the target. By setting the
MatchLocationsoptions, 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 samples
npoints on the curve that are equidistant in parameter space. Here
nis 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.
Knotsare only available under certain conditions, see below for more details.
MatchTangents: Match the tangent vectors evaluated at the chosen
MatchLocationson 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.
Some conditions will greatly help
SubDMatch to achieve more accurate matches, here are a couple of tips to do that:
- In the choice of
Knotswill 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 degree-7 polysurface is never going to produce a watertight match. Rhino commands like
Rebuildcan help you create simpler objects before running
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.