nurbs and subdivs, a history

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… :slight_smile:

-matt

nice, very ineteresting!..

Thanks! That was clear and helpful!

very good topic!

I started in nurbs, and love them, but they aren’t an option when trying to do game modelling.

Rhino 3d had a fantastic nurb system, and very smooth booleans. In fact, I did almost all my modelling with nothing but booleans.

Thanks for this, interesting to know a bit about things you don’t really pay attention normaly. So if I got this right programs like proE, Solidworks,Catia… they use nurbs while drawing chamfers and stuff like that? It makes sense, methods like subdivide would not be good for mechanical design that needs accurate numbers for every point of the designed part.
Thanks again!

good article.

nurbs is till used often in CG as well but it found its niche now so did subdiv as well.

nurbs are perfect in maya when you have interactive objects. through mayas construction history you have a non destructive tool which can even be animated.

that is impossible with polygons ad subdivs.

for characters i like poly with subdivs today more than nurbs patches.
but nurbs stil have some advantage here. the different patches can
have different subdivision levels. try that with subdivs. but your 3d system
needs to support that as well.

however with good polygon modeling you can get the same. when textured
the pure 3d geometry is faded.

however in industrial design and object design nothing can beat nurbs in my opinion.
not because of precision but because of all the boolean and other tools nurbs can
provide.

simple objects are easy with polygons but not complex.

Maybe I missed something here. To me these two modes of modeling, polyhedral and NURBS should be left alone as they are. They have their own strengths and weaknesses. Their use depends on the individual’s purpose. We all know that it’s extremely difficult to do organic modeling using NURBS. Reason why pixar chose subd over nurbs. And I don’t understand why it suddenly shifted to mechanical modeling. Subd is dynamic as opposed to static NURBS. I mean at which subd level to you decide to trim, fillet, perform boolean ops? At subd level 2, 3, 4, what? Then what, perform another smoothing? Man, this is a no brainer.

All I’m saying is let’s be careful when making a distinction between the two. BOTH are powerful! You can’t describe one by underestimating the other. Again, if it’s for illustration purposes subd is just as powerful when it comes to mechanical models. C’mon. It’s as if using NURBS when modeling mechanical models is easy. IT IS NOT. People in the manufacturing industry use parametric solid modelers and not NURBS apps. The gap between the two has narrowed when it comes to functionality because of super fast computers as indicated in the first thread. Models with billions of polygons is increasingly becoming a non-issue. Bottom line is, focus on the purpose.

I don’t think the point he’s making here is about visualization. I agree, you can get good results with both. From what I gather, the big advantage with NURBS in mechanical is that you can get very acurate and precise measurements on things like distances, volume, etc. Whereas with sub-d there is a much greater margin of error when trying to get measurements.

People seems to discourage work on NURBS since blender is generally used for film type work, which is what I primarily use it for. But if there are developers interested in adding features that would make blender a good tool for mechanical and structural visualization by implementing things like NURBS, why try and discourage them? It’s not like it’s going to harm or otherwise inhibit the work of people doing animation for film or gaming.

Highly informative!

Thanks alot!

First I should point out blendDoodler is right in terms of 3d for the manufacturing industry. Poor of me to get sloppy with terminology when I was trying to point out the same with subdivs/polys. :slight_smile:

So yes, engine design, mechanical parts, etc are done with solid modellers (think booleans on steroids). But externals, anything bent out of sheet metal, tends to be done in nurbs. So car bodies, phones, exteriors of consumer electronics… anything where the exterior look is more important than whats inside it, tends to be done in nurbs packages.

If you’re talking about ‘subd levels’, then you’re actually talking about divided polygons, not subdivision surfaces. Very similar, yes, but not the same thing. Subd levels are an approximation to an ideally smooth surface (called the limit surface), whereas the subdivision surface IS the limit surface. It should be calculatable in one step, no levels, no approximating. That research URL is about is trimming on the limit surface.

What also making the terminology confusing is tools like zbrush and the new blender sculpt mode. Again, they’re not subdivision surfaces, but they’re closely related. I think research teams call them ‘multiresolution models’, or ’ hierachical subdivision’.

They all overlap a great deal, and can all equally be called shortened to ‘subdivs’, which is what I’m trying to clarify. Its like how you could take a nurbs curve, a bezier curve, a b-spline curve, and a cardinal curve, and call them all ‘curves’. Yes they are, but they do all have differences.

All subdiv apps today are really doing 2 seperate things; giving you a polygon cage to edit, and displaying a subdiv surface that matches to that cage (usually as a subivided poly object). Only maya lets you interactively see the subdiv surface directly, and furthermore, let you delete the polygon cage and actually edit the subdiv surface too, however you’re limited to simple cv tweaks, making it pretty useless.

What maya should also let you do is treat it like a nurbs surface; project curves onto it, apply trims, intersect surfaces, all that stuff. All live, no booleans being harmed. But it seems alias have given up on subdiv surfaces, they’ve not had any major features added for a few years now.

But blender could. Not saying it should, or that its needed (I think there’s plenty of other more important things to get on with), just saying that there’s still this commonly held belief that nurbs and subdivs are mutually exclusive, but they don’t have to be.

Thank you matte . That’s a very good history on the subject . Hopefully this thread won’t get locked (because I hope I didn’t cause the thread to be locked :frowning: ) . I think it’s always a good idea having some knowledge of the medium we work in (CG) and its history - I mean it is/was more helpful for me to have read through the release logs for Blender then to try follow some of the tutorials out there (a lot I found out were written with earlier versions and was hard to follow).
I think you helped some people understand a feature of Blender that isn’t that well documented or understood - which is always a good thing .
When I first started trying to learn 3D years ago (seven years ago? - yes i’m an old dude) I don’t think sub-d was implimented in most 3d packages (I kinda learned Max 2.5 ) . NURBS patch modeling was the only thing you could use for organic modelling ! - (no wonder I gave up on 3d until I found Blender and sub-d surfaces:) ) - The proliferation of CG animation - it seems they release a new one every other month - has alot to to with sub-d (and related equations of the sub-d type). Didn’t Catmill-Clark get an Oscar or something for his work ?

I don’t mean to hiajck you very informative thread but I just wanted to clarify (since the other thread is locked) a couple of things . I hope I didn’t give the impression that I thought NURBS was somehow superior to sub-d or even polygon modeling - I was only trying to explain NURBS as it is currently implimented in Blender and how you could use them and some of the terms used in my befuddling way (expository writing was a class I skipped - I think you, matte, obviously did not :wink: ) and only that you could use it for organic modeling as well (as it was the first time I tried learning CG) though the workflow is very different - and for somethings it is “better” - like if I wanted to model a violin and use that as a referance to manufacture it, not for all visualization purposes . I was playing around with NURBS and and starting to get a pretty good sense of Blender’s NURBS toolset when I saw the post and remembered others like it . I hope I didn’t confuse anybody though the last post before it got locked seemed to think NURBS was a new thing … sorry if I did confuse …

Back on topic - I think this thread should more then clarify the subject of sub-d and NURBS surfaces (notice the “and” not “vs”) . NURBS surfaces is just another option for people to think about when modeling - kinda like a “torque” setting on an electric drill - though I guess even with that some people are still going to argue … serenity now … serenity now … serenity now … serenity now … (if you get that you’re old too … or watch a lot of reruns:D )

they do not only use solids and booleans.
i would call that that an misunderstanding of what we use.

for rapid prototyping you need solid however Rhino can convert a closed nurbs
objects into a solid object so it gets a volume and is not a surface object any more.

in cad/cam you work with curves all the time. curves are extruded into a nurbs patch.
but they are still a projection of curves. the point is they are calculated through math equations. just project another curve on a patch and trim out the intersection. the intersection is calculated with math equations.

that is not possible with polygons at all and will never be because polygons are not prices at all and do not offer those calculations and possibilities.

nurbs are a dream for engineering when you 3d system offers a non destructive workflow as many do like cobalt. honestly rhino is rather weak. it does not offer even a fillet/bevel tool solidthinking has since mh 6 years!!!

however while NURBS will always be dominant in CAD/CAM I do not think they will be 100% percent replaced in CG as well. also many things there are better modeled with NURBS than polygon.

a good statement was made here:
they all have and advantage and a disadvantage! non is the 100% perfect tool.
you have to use the right tool for the right model! thats the trick.
than the fuzz about nurbs are dead and long live subdivs is over.

matte

maya has a complete different subdiv than 99% of all other systems out there.

in maya they are truly curve based. ever wondered why in maya there is no
subdiv level and in render time everything is smooth? thats why!

but it seemed to slow for rendering and animation studios did not like the few steps
you have to increase partial subdivision and model finer levels.

mayas nurbs and poly tools are just good for that.

in terms of hardware was not able to handle high poly counts i think you also
need to keep in mind the tools to move the polys with. who wanted to call a
workflow good in which you needed to move n amount of polygons. subdivs
just simplified that workflow significantly!!!

however with the advanced animation tools we have today you still do not want
to have to animate to much geometry. more is more complicated. again
subdivs are just a pain saver!

The reason is because there is no fixed resolution. There’s no such thing when it comes to NURBS. That’s why I asked at what resolution do you decide when performing trimming, filleting and booleaning operations? Probably at subd level 4-5 you’re close to getting NURBS curves projected onto polygon models, assuming you finally get your trimming features. And how do you suppose to make further editing at that resolution level? I’m not even sure if that could even be possible with perfect quads. What you need is a new modeling app that acts like it’s a NURBS app when in reality it produces models with thousands of polygons.

But blender could. Not saying it should, or that its needed (I think there’s plenty of other more important things to get on with), just saying that there’s still this commonly held belief that nurbs and subdivs are mutually exclusive, but they don’t have to be.
But they ARE mutually exclusive.

I don’t even understand why you need NURBS for architectural visualisation. AutoCAD is not a NURBS app yet it has a measuring system with a 16 decimal place accuracy. SketchUp is non-NURBS as well, but it too has its own accurate measuring system. You don’t need NURBS to have a measuring system in Blender. If you want a certain level of accuracy in Blender, then don’t apply subd, plain and simple making it behave like SketchUp. I certainly don’t discourage NURBS implementation in Blender.

An interesting fairly recent option related to this are so-called t-splines, see http://www.tsplines.com/what.php
Seeing as there is a plugin for Maya and Rhino, anyone here familiar with it?

blendDoodler : you are right in saying that in terms of “actual” resolution you cannot compare to NURBS surfaces . But I think maybe where you are mis-understanding matte’s point is that he’s talking about types of algorithems (like for example : fractels and L-system) that are closely related and discribe mathamatically a surface which are closely related under the type :“subdivision” . Not all these various types exactly discribe the samething because they were developed for different purposes . Having an “multi-res” type of algorithem (like in the new sculpt mode) doesn’t require you to “set resolution level” like Catmill-Clark or Doo-Sabin subdivision . Muli-res types of surfaces developed from subdivision but do different things . Other types derived from “classic” subdivision algorithems could/can discribe and give a “closer NURBS” type of surfaces and toolsets for development. They are doing it all the time - just look at the link at matte’s first post . Or the post above mine .

I’m not talking about Catmull-Clark or any of the subd types. I’m talking about simple subdivision, which could also be treated with levels. In any case the polygon model gets the appearance of being smoothed out depending on the level.

Well yes but the Cartmill-Clark type of subdivision also creates a “surface tension” which generates curved surfaces . I mean I just went to the link above my last post and looked that the “T-splines” stuff - it’s a type of a subdivision algorithem used and probaly closer to a “true” surface then Catmill-Clark but is still a type of a subdivisional algorithem .
And yes you can just subdivide a surface but how does that necessarily improve resolution ? Edges of a simple subdivided surface doesn’t get beveled or rounded like when a sub-d algorithem is used - and if you’re only doing that why do it at all and at levels ? A simple subdivided plane will render just like an unsubdivided one and won’t be any smoother …

serenity now … serenity now … serenity now … serenity now … have a goodnight - time for bed .