T-Splines Tip: A different way of matching T-Splines to NURBS surfaces/VSR Analysis

Well, this has been a crazy few weeks, much to the detriment of my blog. We’ve laser scanned a classic race car. James is right now flying home from Texas after doing some scanning work on a Gulfstream 2. Tomorrow I’ll be out near Reno doing some laser scanning. Unfortunately, very little of this current work can be shared with the world at large. So, here’s something that I can share – a very cool way of matching T-Spline surfaces with NURBS surfaces, or even other T-Spline surfaces. Take for example, this guitar neck, which came about from some work we’ve been doing with Santa Cruz Guitar Company:

Now, this may look like one single surface, and it certainly could be, but it’s actually two:

There is one surface for the straight part of the neck, and another for the heel. Why? Well, if you make this as one single unified surface, the geometry of the heel will pull the surface of the main part of the neck up a bit, and the customer wanted a perfectly straight middle section. That middle section happens to be a T-Spline, but it could just as easily be a standard NURBS surface – it’s nothing but a straight loft. Now, let’s say I tried to match these up using tsMatch. That would work pretty well, but let me show you what you get:

You can see that the iso’s no longer quite match up. tsMatch is going to do the best it can to match these two up, but it’s going to do it mathematically, no topologically. It’s not smart enough to say “hey! I’ve got the same number of control points on each side of this junction, I can line up these iso’s and make it perfect.” So, how to make a perfect match between these two surfaces, with isocurves that match up? Allow me to demonstrate!

Let’s take the middle section of this neck, copy it and convert it to NURBS:

Let’s hide the heel portion for now. Now, I’ve duplicated the edge of the NURBS surface where the two meet, using DupEdge:

Now, we use the Rhino ExtendSrf command, with the type set to “Smooth” (note, Smooth or Line does not matter for this particular case since this is a straight loft, but if this was not a straight loft you’d want to use Smooth. Basically, when in doubt use Smooth, because it will work for both cases.) Extend it a bit – doesn’t have to be exact:

Now, split the surface using the edge you got from DupEdge, with the Shrink option set to “Yes”:

Now, take that extension bit, and convert it to a T-Spline, then turn on the points:

See those tangency handles on the right? You don’t need those. See the ones on the left? You DO need those. You can clear out the ones you don’t need, and watch as I deform the surface, by moving the edges on the right:

Notice the junction remains smooth. Let’s check it with Zebra:

The lines meet exactly at the junction, meaning they are tangentially continuous. Let’s say you want it to be curvature continuous instead – then leave the edge on the right alone, and just extrude off of that edge:

Boom! Curvature continuous. To finish off this little parlor trick, you simply delete the last row of faces on the heel T-Spline, and then weld on your little extension:

Cool, no?

So, is this method actually better than using tsMatch? As a matter of fact, it is. Check this out – the folks at Virtual Shape have been nice enough to let me try out their software. They have a very nice analysis suite called VSR Analysis. The problem with figuring out if something truly matches up in Rhino is that it often involves staring very closely at the Zebra analysis, which is dependent on the Rhino display mesh settings. VSR Analysis allows you to analyze mathematically the junction between adjacent surfaces. This is very, very powerful and useful. Here is VSR Analysis’ Global Matching Analysis on the surfaces that were matched using tsMatch:

Now, I have set the tolerance on this to be very strict – 0.1 for the tangency – but this is to illustrate my point. You can see the two edges in orange are above this minimum tolerance – about 0.15 each. Now let’s look at the one that was matched using my method:

The largest deviation is 0.02, which is nearly an order of magnitude smaller! What you have to understand is this – most matching commands in NURBS packages will simply modify your surfaces so that they fit to within a certain tolerance. But, if you can structure your surfaces such that they match by definition of the location of your control verts, you are always far better off. Here is the analysis of the curvature continuous junction: