Approximate Catmull-Clark Subdivision Surfaces

Ideas, enhancements, feature requests and development related discussion.

Approximate Catmull-Clark Subdivision Surfaces

Postby dcuny » Tue May 11, 2010 9:25 am

I can't remember if I've already asked this, but have you looked at Approximating Catmull-Clark Subdivision Surfaces with Bicubic Patches?

As you know, quads without extraordinary vertices can be directly converted into bicubic patches. Approximate Catmull-Clark (ACC) converts all quads into bicubic patches. To make the patches appear smooth, two sets of tangent patches are created, from which the dot product can be used to provide an approximate smooth surface normal.

The advantage of this approach is that patches can be tessellated directly, without having to subdivide them recursively. This is how Valve implemented it, including creases. This paper addresses how to create crack-free surfaces. This can be implemented on the GPU, so you end up with real-time rendering of Catmull-Clark surfaces, which is very cool.
dcuny
 
Posts: 2902
Joined: Fri May 21, 2004 6:07 am

Re: Approximate Catmull-Clark Subdivision Surfaces

Postby sascha » Tue May 11, 2010 10:19 am

I didn't know these particular two papers, thanks!

Right now I've got two sets of code that deal with Catmull-Clark SDS:
I've designed the first one to dice SDS "patches" up to level 6 in realtime, and the algorithm is designed to (theoretically) run on the GPU.
It works fine and can even deal with corners and creases. Theoretically it would also be possible to add hierarchical "displacements", but the code grew too complex (and I doubt that I can convert it to a working fragment shader with all that complexity involved).

The second code is currently used by JPatch and uses the standard, recursive subdivision approach. It deals with corners, creases and hierarchical displacement and is rock stable. It won't run on a GPU though.

So, for the modeler I'll stick with what I've got for the time being. With the advent of geometry shaders, I think I'll abandon my "dicer" and wait until GPUs directly support SDS. The purely CPU based recursive approach is simple, clean and fast enough to be used in JPatch's modeler/animator.
sascha
Site Admin
 
Posts: 2792
Joined: Thu May 20, 2004 9:16 am
Location: Austria

Re: Approximate Catmull-Clark Subdivision Surfaces

Postby dcuny » Wed May 12, 2010 7:52 am

OK, thanks! :)
dcuny
 
Posts: 2902
Joined: Fri May 21, 2004 6:07 am

Re: Approximate Catmull-Clark Subdivision Surfaces

Postby John VanSickle » Sat May 29, 2010 3:18 pm

I had already seen the first paper referenced. An earlier version of LionSnake (1.6) used biquartic Beziers to represent the faces (working out the math took a few days), and I worked ACC into v1.7 when I implemented faces with more than four sides.

I didn't bother worrying about the normals for extraordinary vertices. There is distinct artifacting, but it didn't bother me too much, although I might toss something in when I get around to finding a new host site, getting rid of a stubborn crash bug, and releasing the next version.
John VanSickle
 
Posts: 189
Joined: Sat Feb 16, 2008 2:17 am

Re: Approximate Catmull-Clark Subdivision Surfaces

Postby dcuny » Sat May 29, 2010 4:06 pm

I like the "ignore the problem for now" approach. :)

I've can always fall back on Sascha's SDS tessllator (which is probably the best plan anyway).

Good luck tracking down the bug!
dcuny
 
Posts: 2902
Joined: Fri May 21, 2004 6:07 am


Return to Development

Who is online

Users browsing this forum: No registered users and 1 guest

cron