In this video Phil Cook from Simply Rhino takes a look at SubD, or Subdivision Surface Modelling, that is being developed for Rhino v7.
Traditionally SubD objects are mesh based and lend themselves well to more approximate types of modelling such as character modelling and creating smooth organic forms that are controlled in an approximate fashion.
Rhino SubD objects are, however, high precision spline based surfaces and thus introduce a level of accuracy to the process of creating complex freeform shapes. Whilst traditional SubD ‘push-pull’ editing of edges, faces and vertices is enabled, Rhino’s surface commands such as Loft, Revolve, Sweep 1 & 2 and Extrude all now produce direct SubD output.
Similarly the Control Point Curve and Interpolated Curve have ‘SubD Friendly’ options that allow accurate SubD surfaces to be produced from a curve layout in a similar method that one might employ for NURBS modelling but with the advantage of the inherent smoothness of SubD surfaces.
The video starts by examining SubD surfaces and how these compare to NURBS before moving on to look at some examples of how and why SubD can be used alongside the traditional NURBS workflow in Rhino.
Watch the Introduction to SubD tools in Rhino v7 Video:
Introduction to SubD tools in Rhino v7 Video Transcript.
We’ve made a transcript of the video for anyone who would like to follow the video by script.
Follow the video transcript here:
This is Phil at Simply Rhino, and today, I’d like to take a look at SubD modelling which is new in Rhino v7.
Here, I’m using a work in progress version of the software, and so some features may be further developed by the time the product ships.
What is SubD?
So, first of all, what is SubD? SubD, or SubDivision surfaces are a new object type inside of Rhino. If we step back to version 6, we have NURBS objects and meshes. In very simple terms, NURBS surfaces can be regarded as being a continuous description of, in this case, a curved volume. Depending on the degree and the control point layout, NURBS curves and surfaces can hold constant radii or can be used to describe curvature continuous freeform shapes.
Meshes on the other hand, can only approximate curve geometry. If we look at the example of the mesh sphere, then only the mesh vertices are touching the notional sphere. The mesh edges are extrapolated from these vertices by tracing a straight path through pairs of points and flat mesh faces are then created between three or four mesh edges.
If you’ve been a Rhino3d user for some time, then you may be familiar with plugins such as T-Splines and Clayoo. These brought a SubD workflow to Rhino but crucially, these were mesh based. So, the underlying geometry was a mesh which was smoothed to approximate a curvature continuous surface or poly-surface.
The new SubD objects in Rhino are spline based. So, just as with Rhino NURBS objects, they provide a continuous description of curve geometry. This means that SubD geometry can be created accurately in Rhino and this gets over one of the major criticisms of mesh based SubD workflows that are often regarded as being approximate.
Rhino’s new SubD objects can be created in a number of ways. Surface commands such as Loft, Revolve, Sweep1, Sweep2 and Extrude, all have the option of creating SubD output. Curve commands have SubD friendly options, and of course, there’s a number of primitives. There are also workflows where meshes can be converted into SubD objects. Finally, Rhino’s SubD objects can be losslessly converted to NURBS objects.
Comparing SubD Rhino geometry with NURBS in Rhino3d v7
So, what makes a SubD different to NURBS, and why do we need them?
Let’s look at the first part of that question and compare both an open and closed NURBS surface with an open and closed SubD surface.
On the left, I have a degree 3 deformable sphere, and a degree 3 plain surface, and on the right, their SubD equivalents. Now, we don’t need to concern ourselves with the subject of degree with SubD objects, but broadly speaking, they are analogous to degree 3 curvature continuous surfaces.
With the closed NURBS surface, I can turn on the control points, pick some of those control points and smoothly adjust the shape. I can do the same with the SubD object, but I can also use sub-option selection which in Windows is (keyboard shortcut) Shift, Control and left click, and I can pick either one or more faces or one or more edges to adjust the form smoothly.
Whilst SubD surfaces are essentially smooth, I can add creases to them and this is done by picking edges and here I can sub-object select and double click, to pick an edge boundary, and then once I’ve selected those edges, I can add a crease to them. Creases can also be removed using the remove crease command.
Perhaps the biggest difference though between NURBS and SubD, is how we add local control into a surface. If I just look at the NURBS surface to start off with, if I want to add some local control in to this area, then I’ll need to add rows and columns of control points. So, I’ll do this for example, by going to edit, control points and insert knot, and I’ll insert some knots in the U direction. Then I’ll hit toggle and I’ll insert some knots in the V direction. So, this will give me a denser area of control points here, but because the control points need to be added across the domain of the surface, in other words, from edge to edge in either the U or the V direction, then I’m adding complexity to this part of the surface and this part of the surface. It does however, give me the ability to add local detail onto the surface like this.
If we were to look at the SubD, then with the SubD, I can SubDivide this surface. So, I can pick a face and then I can use the SubDivide command to SubDivide that face, and I can keep going adding more SubDivisions as I go along and then I can pick one of these faces and move this upwards to get my local control.
If I want to put in edges in a more controlled way, rather than just SubDividing a whole region, I can use the InsertEdge command and copy an edge and insert it. And if I want to move an edge, I can use the SlideEdge command.
The InsertEdge command has a proportional mode, a both sides mode, and an absolute mode, and you can see here the difference between the absolute and proportional mode. Likewise, when I move edges with the command SlideEdge, I can pick two edges and move them in and out at the same time, and I have a proportional and an absolute mode for this too.
A major difference between the way in which NURBS and SubD works, is that with NURBS, you have the concept of either having a single surface or a poly-surface, which is more than one surface joined together by part or all of a coincident edge. So, using that metaphor, I can take six surfaces that share coincident edges and join them into a solid closed poly-surface.
There is no concept of a poly-surface with SubD and so to replicate a shape like this in SubD, we need to have a single SubD surface with creased edges.
There is however, a workflow that allows us to simulate a NURBS poly-surface in SubD and this comes with a proviso, and that is that each of the individual constituent surfaces of the poly-surface, need to be untrimmed surfaces. If this is the case then we can explode our poly-surface and we can use the convert to SubD tool. It is important that we want the corner option here to say yes, so we can maintain these sharp corners of the individual surfaces. We will now have six individual SubD surfaces and then we can join these together using the join tool. Again, we’ll have an option here as to what to do with the edges. We can either have smooth edges or creased edges. Here I’ve chosen to have creased edges, and if we look at object properties, you’ll see I have a closed SubD, and if I want to remove the creases from these three edges here, I just select them and use the RemoveCrease tool.
Now, we’ll come back to an object similar to this shortly, and look at an alternative to a NURBS workflow in SubD.
Why use SubD Objects in your Rhino3d workflow?
So, now we know a little about what SubD objects are, let’s get to the second part of the question, which is why do we need them?
One answer to this is that SubDivision surface modelling is really useful in situations where modelling in NURBS is difficult or problematic. A simple example of this is the Y branch. This is something that is pretty easy to model in NURBS, but becomes more difficult if the branches are, as in this example, different in diameter, or the branch arrangement is in any way unequal. There’s a number of techniques we can use in NURBS, but the distinct disadvantage of most of them, is that if we want to produce iterations or refinements of the shape, then this can be time consuming, because we have to concern ourselves not only with controlling the shape, but also matching the continuity cross different surfaces.
SubDivision surface modelling gives us an easier alternative. Here, I’ve converted the three tubes to SubD objects, so let’s take a look at a quick approach. In the NURBS example, I used SplitEdge and then BlendSurf to create the transitions at the side of the Y shape. In SubD, I can use the Bridge command to similar effect.
Now, I don’t need to split these edges, because I can pick the individual edge segments, so I’m going to go in to my Bridge command and I’m going to pick the one half of the large tube, and there are four separate sections to that and then the matching four segments of the smaller tube. And then, enter will get me in to the options for the command. I can choose the number of segments, and I’m going to say I want four segments here, and I have a slider to control how straight that geometry is and I’ll accept that value. I can control this shape later on if I want to adjust it.
Next, I’ll repeat the process on the other side of the Y branch. So, again, I go to the Bridge command, pick the four segments, pick the same four segments here and leave the options as previous.
In the NURBS example, I built this top surface before building the front surface, but I can do this the other way around in the SubD example, and again, I can use the Bridge command to create the top of the Y. Exactly the same process as previous, and I’ll accept that result.
Okay, so now we have the sides of the Y shape and all I need to do now is to close off this hole. Now I want to do this in a way which is structured and preserves some regularity to the topology. So, once again, I’m going to use the Bridge command, but I’m just now going to bridge between pairs of edges, and now I want to reduce the number of segments to just one and I can straighten these out. Okay, so I want to bridge here and here. Okay, so you see, I am left now left with four holes. I’ll repeat the process on the bottom and then all I need to do now is fill these holes and there’s a command called FillSubDHole that I can use for this. Again, if I double click on the boundary here, it will just select all of the hole. I can pick all of these at once, enter and that is the result. And you can see how it gives me a really nice topology here. I’ve missed a hole here so let’s just fill that up.
Let’s take a look at this now with the environment map. So, we can see this is smooth all over. But you can see that we’ve got a little bit of a high point here, just there. So, let’s have a look at how we might reduce that. So, what I’m going to look at, is taking this edge here and deleting it and I think that will just give me a much smoother transition from this point to that edge. I’ll repeat the process on the underside, and let’s take a look at this, with the environment map. So, we can see that high point looks better now.
Now, the big advantage now is, if I want to start playing with the shape of this, so for example, if I want to maybe push in the shape of the Y here, this now is where we get the big advantage of SubD. So, I’m going to turn on the gumball and I’m just going to push this face inwards. I’m going to disable the object snaps, just so I don’t inadvertently snap to anything, and you can see now that when I push this face in, or this pair of edges in now, how the adjacent edges and faces are moving with it.
So, the whole idea behind the SubD surface is that intrinsically, it’s smooth. So, it’s analogous in some ways to a degree 3 surface. So, it’s intrinsically smooth unless of course we specify any creases. So, all I need to concern myself with here is the shape of these objects. I don’t need to concern myself with the smoothness unduly. And again, if we’re seeing high points here, we can use the same process as we did before in removing those little edges here, to improve the shape. So, that’s looking nice and smooth now.
Another way in which we can use the Bridge command in a similar way to blend surface, is to create a transition between these two open edges. So, I’ll use the Bridge command, double click to pick the whole loop here, double click to pick the whole loop here, enter to get in to preview. I’ll add some segmentation and just play slightly with that straightness value. So, we have a nice smooth transition between those two surfaces. And again, the big advantage here of SubD, is, this whole object here is treated as one curvature continuous surface. So, if I want to adjust the shape locally for example, to make this asymmetric, let’s say I want to push this area upwards here, is I can do this, okay, and I don’t have to worry at all about the smoothness here. I might need to look at what happens down here and insert and remove some edges, or put in another constraint here. So, to avoid the shape changing too much here, I could maybe insert an edge here, double click for a whole edge loop and put some more control in here, and this will mean that this change in shape drops down a little more quickly and doesn’t affect this area.
Okay, so you can see that in this example, that SubD gives us a means to an end to create a smooth set of transitions between these various branches. That would be difficult to model and certainly difficult to adjust if we looked at this purely as NURBS geometry.
SubD with Accuracy! Rhino v7 game changing feature.
The SubD workflow can be very useful for developing styling surfaces. Not just fast approximations, but good quality, well topologized surfaces that can be used for final data.
In this model of a mouse, the majority of the shape was created as a SubD, prior to being converted to NURBS, where it was then split into sections before adding the smaller details.
Just as with modelling a NURBS surface, managing the topology and maintaining the simplicity is essential for creating good quality surfaces.
So, let’s start by taking a look at creating SubD friendly curves and building surfaces directly from them, with Rhino’s surface commands.
Rhino’s Surface Commands ‘Control Point Curve’
If we look first at the control point curve, then we can enable the SubD option. This fixes the degree at 3. If I visualise the control points of an open SubD curve, then I’ll see two hidden constrained control points, that sit between the first two and the last two live picked points.
If we look next at the interpolated curve, there’s a much more straightforward relationship with edit points in SubD friendly curves, and if I create an interpolated curve through the edit points of my first curve, we’ll see that the two curves are identical.
So, going back to the upper surface of the mouse, the surface on the left is what I’d like the initial SubD surface to look like, before I fill in the sides to achieve the surface on the right.
In the Simply Rhino Intermediate / Advanced class, there is a lot of discussion about the importance of topology when creating NURBS surfaces to the effect that if the topology is correct, then the shape will almost sort itself out and can be adjusted correctly. So, here just as with NURBS, the curve layout is important. I drew the large blue curve first, as a SubD friendly control point curve, and then the smaller blue curve is a scaled and adjusted version of this. The red cross section curves are then created with an interpolated SubD friendly curve that passes through the end points of the blue curves. This gives me a curve layout that I can loft with either the blue or the red curves and achieve a SubD surface which is effectively the same as the curve layout.
At this stage, the sides of the shape are still open and we have a number of ways of closing these off that takes full advantage of the fact that SubD surfaces are inherently smooth or curvature continuous.
Rhino’s Surface Commands ‘Bridge’
First of all, I can use the Bridge command, with an appropriate straightness and number of segments and I can then use a command called stitch to close up the two remaining edge pairs.
So, let’s take a quick look at this. I’m going to use Bridge first of all to bridge between this edge and this edge, but I’m using this in a way very similar to how we would use BlendSurf if I was using a NURBS shape. So, I’m going to set two segments and just play with the straightness a little bit here, and then to close up these two edges here and these two edges here, I’m going to use Stitch. Going to pick the first two pairs of edges, the second two pairs of edges. This will close these up. I can slide up either to the top or the bottom of these edges. I can pick first or second here. First would be here, second would be here, and average would be the mid-point of these. So, I’ll just pull this up to the top and then this gives me a crease which I can remove using RemoveCrease and now I have a nice smooth sided shape which maintains the regular topology that I initiated with my curve layout.
An alternative to this approach would be to close off the side of the shape with one or more SubD faces. This is difficult to visualise with the SubD in its smooth form. So, I’m going to use a command called SubDDisplayToggle, which visualises flat faces through the control points, rather than the smooth form interpolated through the edit points. Now, there’s no icon for this at the moment, so this is my homemade icon here. So, if you’re watching this video with a later release of version 7, beta or work in progress, you most certainly won’t see this icon.
Okay, so I’m now going to use a command called SingleSubDFace and I’m going to snap to the vertex point here and then I can join the single face to the rest of the SubD. There’s a smooth or a creased option here. I’m going to select smooth, and then toggle the display back and we’ll see the result. So, this gives me slightly different topology than I had previously, and a straighter section across here.
An advantage to working in this boxy mode is that the shape is expressed very simply as straight lines between vertex points. So, if I wanted to create two faces in the side of the shape here, I can very simply draw a couple of lines here that give me if you like, a target for where to place my SubD faces. So, again, I can snap to vertex points here and now I can create two separate faces that I can join in to the rest of the SubD. As before, I’ll use the smooth option for joining and then I can toggle the display back to smooth. I’ll remove these curves and then we can see the shape.
So, just as with NURBS objects, I can actually use the control points themselves to edit the shape, and here, I just want to pull out this bottom point slightly to add a little bit of curvature to this bottom edge. So, I’ll do this constraining to the C-plane, Y direction and I’ll just pull this out very slightly, just to give me a little bit of curvature on this bottom edge. Again, just like NURBS, it helps if this point, this point and this point are aligned because it maintains the regularity of the shape. So, if we have a look at this shape now, with our environment map, particularly if we use the fluorescent tube, we can see that we have a really nice progression of the shape here and this is really due to the simple topology or layout of the SubD faces.
Now, with SubD, we’re not limited to using four sided faces and the limitation here is my choice because I know that the downstream workflow will involve a conversion to NURBS and NURBS does of course have a four sided topology.
I’m just going to modify the shape slightly by adjusting the SubD and I’m going to use the gumball manipulator to do this. Now, if I’m editing faces, it’s a good idea to set the gumball to align to object, because then if I sub-object select a face, the blue direction here is pointing in the normal direction of that surface and if I pick a couple of surfaces, then it will be the average normal direction of those surfaces.
If I’m going to edit edges, sometimes I find it better to constrain the manipulator, in this case to a C-plane, so I can be sure that I’m moving these edges in line, in this case with the Y axis of the C-plane, and I’m going to use the scale icon here and just push these edges inwards slightly and then push these two edges outwards, just to give me the indent in the side of the mouse shape. Something like this. And then I just want to make the back slightly more rounded when I see this from above, so I should be able to do that by picking these two faces here. Sorry, these two edges here, and pulling these forwards. So, again, I’ll choose to move these in the C-plane X axis. So, I’ll just pull these forward. You can see how it’s rounding that back off.
Now, this should maintain the topology and the shape, but again, it’s a good idea just to check with the environment map, to make sure that we’ve still got the nice delineation of the shape here. So, when I’m happy with the shape, I can convert this to a NURBS polysurface using the ConvertToNurbs tool and when I do this, I have the option of deleting the input object, i.e. the SubD, or not and in this case, I’m going to select no, so I can compare the NURBS and the poly-surface with each other. So, I’ll just use my filter here, to filter out the poly-surface, so I can pick the SubD and move this out the way, and now we can see the poly-surface on the left and the SubD on the right.
Now, at the moment, when we use the NURBS conversion, each face on the SubD becomes a surface patch on the poly-surface. But the continuity between them and the overall shape should be the same. So, here you can see that we have the same resolution of the shape on the NURBS and the SubD.
So, moving onwards, I extruded the SubD lower half of the mouse by duplicating the boundary of the poly-surface, then I joined the extrusion to the poly-surface and created a blend edge between them, and then a fillet along the bottom of the mouse. At this stage, I had a solid poly-surface which I could then in the usual way start to split out until I got most of the major components that I could then apply the materials and textures to.
Another strategy to develop a shape in SubD is to consider using the control point or vertex positions and start with the metaphor of the boxy rather than the smooth SubD object. This is a workflow that you may be familiar with if you’ve had experience of Clayoo or T-Splines.
So, here for example, I could start by creating a series of lines that define the control point layout of my desired shape. Then I can go to my mesh tools and use a tool called mesh from lines. Here I can set that I want to consider only a maximum of four sides per face, and I can select all of these lines in one go and press enter, and I’ll have a closed mesh object. Now, this closed mesh object now will be the same as the boxy version of the SubD that I want to create. So, I can now pick the mesh and run this tool, ConvertToSubD. I’ll just for now, select delete input, yes. It’s important here that the interpolate points option says no, because I don’t want to interpolate the points. I want to use a control point layout here, and creases and corners are also going to say no. This is my boxy display now of the SubD and if I smooth this off, we’ll see the shape.
Earlier in the video, I looked at building a sharp edged poly-surface equivalent as a single SubD object / creased object. Very often in NURBS modelling, starting with controlled sharp edges, is the correct way of creating fillets, blends or transitional surfaces, and very often, this geometry is better suited to a NURBS workflow. However, iterating through and adjusting the results can be time consuming.
Rhino3d v7 introduces an improvement in the blend edge command that allows for set back corners in difficult circumstances, as for example if I wanted three different nominal radii on these blended edges.
So, let’s first of all look at the NURBS workflow. So, I’ll go to Solid, FilletEdge and BlendEdge and I’ll choose my first radius which I want to be 20mm, then my next radius which is going to be 60mm and then finally the vertical corner which I want to be 50mm. You’ll see in the preview now that the BlendEdge command now creates these setback corners, which is a big improvement on the standard way in which corners are produced in Rhino v6.
The problem still arises however if we want to iterate through these corners and play with the radii, because at the moment, we would need to keep rerunning the command and undoing and redoing the previous result. So, we can simulate this type of corner as a SubD. So, if we start with this same or similar topology, then what I’m going to do here is just to mark with a point object where the blends start and stop, and also a reference point for this corner, and then I’m going to move these points and snap them on to the SubD. Then, what I can do with my SubD here, to simulate this corner, which is going to give me something which is much easier to play with and adjust, then I can remove the crease in this edge, this edge and this edge, and then I can use the slide edge command, to slide these edges and snap to these points. Now, when I’m doing this and snapping to points, this is the control point layout that I’m actually moving here, that I’m snapping to that edge. So, if you look at the boxy object, you will see that is where those edges are, whereas this is the interpolation of the shape, the smooth interpolation. So, I’ll just keep sliding these edges and these are pretty close but I’ll move them anyway. If I look at both of these with the environment map, you’ll see that the results are similar. In fact, the SubD equivalent here might be slightly better in the way that it’s controlling that edge.
So, this is an example of where we can use SubD to create quick design iterations, even though we may model the final result as NURBS surfaces.