Morphidae Inlumino / 553 Project

The name says it all ... in Latin ... I hope. Morphidae is a family of butterfly, and inlumino means something like 'to bring light to', according to several internet latin dictionaries. The program I wrote used radiosity to bring light to butterfly subdivision surfaces. This was the final project for CPSC 553, the advanced computer graphics class at the University of Calgary. A copy of my final presentation is available here.

Modified Butterfly Subdivision

The Modified Butterfly Subdivision scheme is an extension to Dyn's original Butterfly Subdivision scheme, which was an interpolatory subdivision scheme. Modified Butterfly Subdivision (MBS) guarantees smooth interpolation of vertices with valence 3 or >6, Dyn's Butterfly scheme did not. In some respects Butterfly subdivision is more intuitive than non-interpolatory schemes. It is pretty simple to imagine what the output surface will look like. In the image below, the middle 'frog head' is generated by subdividing the mesh on the left. The right image is the same surface textured using a spherical projection texture mapping algorithm. (To anyone who has to paint spherical projection textures using a paint program: I feel your pain).

There are lots of subdivision resources on the net. The SIGGRAPH 2000 Subdivision for Modeling and Animation Course Notes are extremely helpful. There is a technical report available for modified butterfly subdivision called Interpolating Subdivision for Meshes of Arbitrary Topology. Denis Zorin also published a paper with the same name at SIGGRAPH 96, that can be downloaded from this page.

I wrote a very hacky radiosity engine that seems to work well enough. The basic idea behind radiosity is to simulate the physical transfer of diffuse light reflection in a scene. You do this by breaking all the surfaces into a bunch of patches and calculating how much light is transferred from each patch to each other patch. These light transfer quantities are called Form Factors. Diffuse light reflects evenly in all directions, so you don't need to know anything about the actual surface materials. It's all just based on geometry. I implemented 'shooting' radiosity, which means the user can watch as the rendering thread 'lights up' the scene. Unfortunately I used OpenGL's Z-buffer to calculate form factors, and the drivers do not always play nicely with threads.

I didn't have any really good scenes, so there are lots of artifacts in my images due to low patch count (especially low light patch count). You can see the patches in the wireframe image below, the final radiosity solution is shown on the right (hemicube resolution was 200x200). The four red steps show the most obvious artifacts.

These images are all screenshots taken directly from my program. Unfortunately they have undergone several rounds of JPEG compression, so there are visible artifacts (especially around the edges of the red subdivision objects in the radiosity pictures). Click the thumbnails for larger versions.

This butterfly subdivision surface shows two things. First, it shows that my boundary subdivision rules work (there is no 'bottom' to the mesh). Second, it shows that there are bugs in my normal calculations - that's why there are some dark spots near the outer corners.

Another interesting subdivision surface, I call this one 'starfish'. The pointy bit in the middle of the 5 spokes is interesting, it has a really high valence (10 or 12 I think). This makes the spokes really pointy at the ends - but they are still smooth (no discontinuity).

Radiosity on my standard 'box and torus' scene. The image on the left has a hemicube resolution of 20x20 - obviously too low. The effect of the errors is interesting though. I've been told that it looks like venetian blinds. The image on the right is (more) correct, with a hemicube resolution of 200x200. Unfortunately there are not enough light patches, that's why the red boxes have dark bands.

Finally, radiosity on some of my subdivision surfaces. I really like the starfish. There are not nearly enough light patches for the model resolution, so there are lots of blotchy patches. IMHO, it looks better that way than the correct image would. The head is smoother but it really needed another light in front of the mouth.

Got milk? mail