Bézier patch (NURBS) culling

Does somebody known how bézier patch culling is done ? How efficient is it ? For a lot of objects 50% of the patches are not visible. See www.microcan.nl for a free modeler.

You may probably use the convex hull property of Bezier and NURBS patches, which means that the patch is entirely contained within the convex hull of its control points. This will allow you to build for example an axis alligned bounding box for a given patch using only its control points.

Hope this helps

I already know about the convex hull properties but I like to know if there is a hardware accelerated culling mechanism for bézier patches in OpenGL. When I use




is the mesh first evaluated and than culled
is the mesh culled first ?

Thanks anyway.

I can only guess, but probably not… I think that patches are first tesselated, then sent to the rest of the pipeline as triangles/quads and then culled… Maybe I’m wrong however.

[This message has been edited by martin_marinov (edited 05-28-2001).]

I think you should write your own tesslator and do clipping using quatrees.
What I do is storing each patch (or nurbs) in a quadtree, both for fast LOD determination and for fast scene culling.

I also put all patchs/quadtrees in a big quadtree (of quadree ), to do a first brutal culling.

The only probleme is making good choice for memory management, since LOD managing needs a lot …

does anyone knows about a better technic ?

I agree with Nikopol.

I use a medium resultion version of the patches for a corse culling (I use that also for physic and AI) in a quadtree.

But my mind is open if someone has a better aproach



I understand there is not a hardware optimized solution for bézier patch culling.

So there are some problems to solve:

  • bézier patch completely outside the viewing frustum
  • bézier patch partly outside the viewing frustum
  • bézier patch back side is visible

LOD determination and culling in one go seems a good solution.

Can you use the convex hull property for view frustum culling?

Can you use the bézier patch control polyhedra for front/back face culling or is this only possible when the tangent controls are near the surface (after sufficient sub division).

What about LOD and cracks for joining bézier patches. I use one level of detail for all bézier patches of an object at the momemt

Is a LOD test, view frustum culling, front face culling and subdivision in a recursive algorithm a good idea. Or is it better to do separate tests and use glEvalMesh2() to do the rendering.

[This message has been edited by MicroCAN (edited 05-28-2001).]

It would be interesting to know if NV_evaluators solves the aforementionend clipping problem without triangulating [if possible, i.e. convex hull is completely outside] (at least it solves the cracking problem). BTW has anyone else found it quite disappointing that we still have to set the tessellation level by ourselves in those GF3 days? Seems strange that though we have hardware T&L, we have to use software T&L to calculate the tessellation level.