[Bf-committers] Support for creases in subdivision surfaces
Matthew H. Plough
bf-committers@blender.org
Fri, 07 May 2004 12:28:50 -0400
Chris McFarlen wrote:
>I added support for creases in the Catmull-Clark subdivision surfaces. You can read about it and download the patch here:
>
Well Chris, congratulations! You have officially scooped the work that
I was planning to do! This is an excellent addition to Blender, and
should greatly increase the capabilities of subdivision surfaces.
Chris McFarlen's website wrote:
> I extended the blender implementation to include creases, but my
> implementation only defines a binary sharpness; no weight factors. An
> edge is either sharp, or it isn't. This isn't as much of a limitation
> as it might seem. No, really :)
This really is a limitation, and one that shouldn't be there. The
implementation that I had been working on includes weight factors; they
are relatively easy to implement. You are using a flag to set the
subdivision level; seeing as Blender only subdivides out to level 6,
using three bits (for a total of seven possible levels, as well as an
off level) would allow you to implement weight factors. Let's say that
those are bits 31, 30, and 29 of a standard int.
(1) bit 31 -> 111* **** **** **** **** **** **** **** <-bit 0 would
indicate an infinite crease edge,
(2) bit 31 -> 000* **** **** **** **** **** **** **** <-bit 0 would
indicate a normal edge, and
(3) bit 31 -> 010* **** **** **** **** **** **** **** <-bit 0 would
indicate an edge with sharp subdivision level 2.
Since endian-ness is not an issue at runtime, it is a simple matter to
shift the bits right, to
bit 31 -> 0000 0000 0000 0000 0000 0000 0000 0111 <-bit 0 (the result
for an infinite crease edge)
Now, if the result is 0, then a smooth subdivision should be used.
Otherwise, use a sharp subdivision, and decrement. Then, shift the
result back to
bit 31 -> 0010 0000 0000 0000 0000 0000 0000 0111 <-bit 0 (the result
for a decremented (3), above)
and bitwise OR it into the flag integer for the resulting edge.
I hope this is clear -- if not, say so, and I will try to explain it better.
Matt