PixarAnimationStudios / OpenSubdiv

An Open-Source subdivision surface library.
graphics.pixar.com/opensubdiv
Other
2.89k stars 561 forks source link

Will Subdivison limit surface match Bezier surface? #1166

Closed VadiMysore closed 4 years ago

VadiMysore commented 4 years ago

Hi there! Since subdivision is a generalization of that for b-splines, if I get the convex hull of a Bezier surface as the control cage and subdivide it, will I get a closer approximation to the original Bezier surface?

It does not seem to be the case. I used adaptive subdivision and tried up to level 4. But the difference between the original Bezier surface and the limit surface obtained by subdividing its convex hull appears to be considerable.

Any comments on it?

jilliene commented 4 years ago

Filed as internal issue #OSD-307

barfowl commented 4 years ago

No. Catmull-Clark subdivision is a generalization of UNIFORM B-splines. Bezier patches are not uniform B-splines.

The control hull (not the "convex hull") of a Bezier patch defines a different limit surface when interpreted as a uniform B-spline patch. When you declare a mesh containing that control hull as a "Catmark" surface in OpenSubdiv, you are effectively interpreting it as a uniform B-spline surface. So the subdivided control cage will converge to the uniform B-spline limit surface, not that of the Bezier patch.

VadiMysore commented 4 years ago

@barfowl - Hi Barry! Thanks for the clarification. It is helpful.

So, if I were to extract the "convex hull" of a uniform b-spline patch, submit that as the initial control cage for Subdivision, will the resulting limit surface "contain" the original patch? I think that the resulting limit surface will have more than a uniform, b-spline patch and the original patch will be one of them.

barfowl commented 4 years ago

(Aside: Please refrain from using the term "convex hull" unless you understand it and know when it is appropriate. As mentioned in my previous message, it is not the same as the collection of points defining the patch and is not relevant here.)

If you take the 16-point control hull of a single uniform B-spline patch and define the face topology appropriately (a 3x3 grid of quads), the complete limit surface for the Catmull-Clark mesh is additionally determined by the "boundary interpolation" option that is chosen. This particular 16-point case is illustrated in the "Boundary Interpolation Rules" sub-section in the introductory documentation of OpenSubdiv options.

Leaving boundary interpolation set to its default of VTX_BOUNDARY_NONE will produce a single uniform B-spline patch for the limit surface. Setting the option to anything else will produce additional patches for the 8 quads surrounding the interior face, as you have observed. In all cases, the limit surface corresponding to the interior face will be the uniform B-spline patch we expect from the original set of 16 control points that defines it.

VadiMysore commented 4 years ago

@barfowl - Hi Barry! Thanks for the detailed explanation and how to get back the original patch from its control hull, with appropriate boundary interpolation options.

I used the "convex hull" in quotes and loosely. The stricter definition I am aware of through computational geometry. Interestingly, I found that a vast amount of b-spline related literature from prestigious sources, tend to use the two phrases interchangeably. As you mentioned, the control hulls of b-splines, in general, need not be convex.

Thanks again for the responses. Wish you a very happy new year!