The nurbs thread was closed for some reason, so I have to post in a new thread. This isn’t a flame or silly rant, just an explaination of how subdivs and nurbs came to be, and how they apply today.
Nurbs, some quick theory
vertex pusher mentioned nurbs are more ‘accurate’, which is true. nurbs are parametric, meaning you have an equation that lets you find out exactly where any point is on a nurbs surface. So in a simplistic example, you could think of a nurbs surface as an equation like
x+y=p
x is some distance across a nurbs surface, y is a distance up the surface. given those 2 values you can find the 3d point p on the surface. this isn’t something you can easily do with a subdiv surface. In fact, that ‘across-and-up’ thinking implies other important properties of nurbs surfaces:
-because you can only go along and up, nurbs are only 4-sided
-because you can always calculate a point on the surface given the distance along and up, they have built in uv’s.
But there’s more! again, because a clear equation exists, programmers were able to optimise that eqation, find shortcuts, so that they can be rendered quickly in open-gl, and rendered smoothly in the final render. Moreso, they can do this without using too much cpu or memory. And finally, once more due to those calculations, its easy to calculate where 2 nurbs surfaces intersect, or a surface and a curve, or a curve and a curve. All this stuff is handy for automotive and industrial design.
Subdivs, some more theory
Subdivs on the other hand, don’t have a lot of the parametric qualities of nurbs. And more importantly, there’s less shortcuts for rendering surfaces. This means that subdivs for the most part are rendered ‘brute force’, ie you take your polygon cage, divide it, then divide it again, and again, until it looks smooth. This can take a substantial amount of CPU and memory. However that 4-sided property of nurbs isn’t a problem with subdivs, hence they can be easier to build organic shapes, like human faces and whatnot.
Tv and Film
Now, switch focus to cg in terms of tv and film. When pixar first started out, they needed a way to render smooth surfaces, using the computing power available to them. This meant it couldn’t use too much memory, nor too much cpu. The answer was nurbs. To try and render a whole film with subdivs, even as recent as the mid 90s, just wouldn’t be possible.
But computers increase in speed at an exponential rate, and pixar realised it might be possible to use subdivs in production. They tested this in 1997 with geri’s game, then ‘a bugs life’, 1998 and every movie since.
Subdivision surfaces vs smoothed polygons
Keep in mind though that they achieved this with clever programming. To render a subdiv surface in renderman isn’t just brute-force, and its not like the render td’s at pixar say ‘oh, i’ll polysmooth this twice’. renderman renders ‘true’ subdivs, in that you only see and render the ideal, perfectly smooth surface. No facets, no polygons. Keep that in mind:
subdiv surfaces ARE NOT smoothed polygons.
This is important to know, to give context on where we are today. If you render a subdiv surface in renderman, you can get as close as you want, it will always look smooth. However if you divide polygons, you can always get close enough to see it faceted, at which point you need to divide again, which takes up more cpu and memory. A subdiv surface is the true ultimate smooth surface. Dividing polygons will only ever give you an approximation, and will eat up loads of cpu and memory.
Subdivs and smoothed polygons, lets hug
That said, in the real world an approximation can look just fine, and nowadays cpu’s are fast enough and memory so cheap that you CAN get by with just dividing polys by brute force. Thats how elephants dream was rendered, and is how ‘subdivs’ work in blender, xsi, max, lightwave, silo, modo, zbrush… basically every animation and modelling package. In terms of 3d animation/modelling software, only maya has true subdivs (but the implementation is so poor they’re rarely used).
On the rendering side, there’s several render engines that do true subdiv surfaces. It started with prman, and now you have mentalray, vray, finalrender, and probably a few more. So, in terms of real-world use today, thats where we are; using approximations for modelling and animation, and for rendering somtimes approximations, other times true subdiv surfaces. Either way, they look just as smooth as nurbs, and are easier to work with for organic shapes.
Subdivs and nurbs… a happy future together?
Remember when I said nurbs let you calculate the intersection of surfaces, curves and all that? These let you do operations like trims, fillets, chamfers, which are still important for mechanical design. Intersecting a cylinder into a car side to make a hole for the wheel, adding text to the side of a mobile phone, things that will never be accurate enough if you use booleans.
And thats why industrial design doesn’t use subdivs, because everyone knows ‘you can’t do trims on subdivs’. Or can you?
http://www.research.ibm.com/people/i/imartin/subdiv-sharp.html
That page, now a few years old, shows that you CAN have your cake and eat it; the freeform modelling of subdiv surfaces, with the trims and fillets of nurbs.
Unfortunately, no widely available 3d modelling tool, commercial or otherwise, has this functionality. So until (a) true subdiv surfaces appear in more software, and (b) tools to manipulate them like nurbs get written, mechanical modelling will still be done with nurbs.
Maybe blender could be the first to incorporate true subdiv surfaces with trimming…
-matt