4

Can you render NURBS on the GPU with DirectX 11? I've been reading up on current trends to rendering surfaces like these, but I don't see anything on NURBS.

I found some related references, but nothing solid... like "Approximating Catmull-Clark Subdivision Surfaces with Bicubic Patches" by Charles Loop and Scott Schaefer.

    -
davidotcom
  • 51
  • 4

2 Answers2

2

The quick answer is no. NURBS are pretty complex, and it would be difficult to write an efficient shader that can render them on the GPU. I think it's possible, but it isn't usually done because there's a better way.

The better way is to render Bézier patches directly on the GPU, since any NURBS can be converted into a connected set of Bézier patches. To generate the patches, you perform knot insertion at every knot until it hits the same multiplicity as the degree; e.g. on a cubic NURBS, you would perform knot insertion at every knot until every knot is a triple knot. The control points of the NURBS can then be treated as a connected Bézier mesh.

There is a problem with this, specific to shaders: When you triangulate your Bézier patches, it's critical that patches which share a boundary also share the exact same tessellation settings, or there will be cracks in your NURBS surface due to tessellation mismatch. If you use fixed tessellation settings, this isn't a problem, but if you use view-dependent tessellation, then you need to make sure that each patch boundary has its "view dependent" tessellation calculated independently, so that adjacent patches will match.

AHelps
  • 1,782
  • 11
  • 17
2

There are 2 demos in the DirectX SDK; SubD10, SubD11 for DirectX 10/11 implemenations respectively of the techniques described in this article.

axon
  • 1,190
  • 6
  • 16