Curved Surfaces

hmm… I’ve known that some video cards are supposed to have hardware support for curved surfaces… so like you give it a curved surfaces, and it tesselates it for you so that it runs at a decent frame rate… where can I read about implementing this stuff?

I don’t think there’s any (consumer level) cards that supports that.

Curved surfaces are not one in hardware?!

there is no one absolute way, the best way, to create curved surfaces, it is something that heavily dependent on your app, so i think that might be the reason.

from PC World Feb 2001 pg 127:

“Curved-surface support: This technique allows developers to model 3D objects using curves, rather than a fixed number of polygons. Graphics hardware then breaks the curves into a more manageable number of polygons to render the objects. Curved-survace support reduces the amount of information that passes from the CPU to the graphics card, and it permits more-realistic 3D models-although portraying complex objects, such as a human form, can be very difficult using curves.”

Curved Surfaces are represented by an array of points (Some are handles as controllers) -
but Curved Surfaces ARE finally just a bunch of faces, when it passed into the geometry pipeline.

Of course it IS possible to add a function to the Graphic Cards that, given a LOD and some points that represent a Curved Surface, will draw it (The ideal thing was if it could just return the vertices to you, but it can’t).

But this function can be quite expensive for calling it on per frame base. If YOU do the calculations you can store the vertices, update them whenever you want, and send it down the geometry pipeline whenever you want.
Sounds better, isn’t?

then what the heck is curved surfaces support?!

sort of like “Mp3 ready” speakers gag?!?!

I can’t answer your question as to what curved surface support is, but I think I can give a reason for wanting it…

A static poly mesh has massive drawbacks in terms of data storage and level of detail. When in the distance, its fairly pointless to use anything more than just a couple of polygon’s if the model only uses a couple of pixels to represent the object.

You could use a set of models with differing polycounts and swap them, or use some kind of roam type algorithm, but all this increases the quantity of data you need to store.

By using Nurbs or bezier patches you could vary the lod on the fly without storing any extra data. The drawback is that this is going to be slower than just sending the same polygonal data to render each frame, but the overall memory consumption would be vastly reduced.

To go one stage further:

If you animate a skeleton and bind a weighted polygonal skin to that skeleton, then you’d have to manipulate each vertex via some equation’s to give you the final mesh you send to the renderer.

Once you start doing this, varying the lod on the fly becomes harder, because you’d have to calculate the weighting values on the fly also.

Here’s where I enter fantasy land…

Imagine that you bind a nurbs skin instead. Only the control points would require weighting values. For each frame you could, calulate the skeleton position, calculate the control point positions, work out the lod required, and render it.

This doesn’t work currently because :

  • Nurbs take a hell of a lot of processing power to tesselate them.
  • Surface continuity would have to be maintained.
  • Research in this area tends to have patents attached to it.


today we may use 1000-2000 polys per character in the latest games etc, but what about when you start using 10,000+ ?

How high would the polycount have to be, before the memory consumption required for a given poly mesh, and the associated processing required to deform its verticies, would be deemed greater than using an equivalent Nurbs skin?

In terms of memory consumption, This would certainly hold true. I don’t know whether the processing part would be an issue.

In this very sort of situation, hardware accelerated curved surfaces would surely be of benefit. If I’m wrong please let me know…

[This message has been edited by Rob The Bloke (edited 01-22-2001).]