Catmark vertex subdivision rules

222 views
Skip to first unread message

darkhorse64

unread,
Nov 17, 2013, 6:58:07 AM11/17/13
to opens...@googlegroups.com

Hi,

while browsing the source code for catmark vertex subdivision, I found that it is significantly different from what is described in Section 3.1 of the "Feature Adaptive GPU Rendering of Catmull-Clark Subdivision Surfaces" paper. If my understanding is correct, Hbr detects transitions between vertex subdivision rules applied at one level and at the next. If so, it computes a weight and performs a linear blend between the results of the two rules.

The GPU paper considers the number of sharp incident edges and the average of all incident edge sharpnesses at the current level. It models only transitions corner -> smooth and crease -> smooth leaving potential transitions corner -> crease aside.

Therefore, it looks this change is related to a greater accuracy of the subdivision process. Is it correct ?

Also, in <halfedge.h>, I have a doubt on the implementation of IsSharp

    // Returns whether the edge is sharp at the current level of
    // subdivision (next = false) or at the next level of subdivision
    // (next = true).
    bool IsSharp(bool next) const { return (next ? (sharpness > 0.0f) : (sharpness >= 1.0f)); }

Shouldn't the sharpness at the next level depend on the Chaikin rule (when this option is selected) ?

       Regards

manuelk

unread,
Nov 18, 2013, 2:20:34 PM11/18/13
to opens...@googlegroups.com
Hello


On Sunday, November 17, 2013 3:58:07 AM UTC-8, darkhorse64 wrote:

while browsing the source code for catmark vertex subdivision, I found that it is significantly different from what is described in Section 3.1 of the "Feature Adaptive GPU Rendering of Catmull-Clark Subdivision Surfaces" paper.

You are indeed correct: we have deviated from what is described in several papers to match PRman's implementation which fixes some tricky spots that occur around semi-sharp creases. There are several other similar modifications (ex: smooth triangle rule.) - we believe these to be small improvements on the original publications.

  
Also, in <halfedge.h>, I have a doubt on the implementation of IsSharp
    bool IsSharp(bool next) const { return (next ? (sharpness > 0.0f) : (sharpness >= 1.0f)); }

Guilty as charged: the wording of this function is ambiguously incorrect. I believe that the code uses the function  with the correct true / false arguments (or at least i have not found evidence that it produces incorrect results yet...). This is legacy code from PRman, so I try to tread lightly so as not to wake sleeping dragons... ;)
 

Reply all
Reply to author
Forward
0 new messages