Implicit Surface With Normal Map Extraction Using Marching Cubes

Mark Barry

CSC 570, Winter 2006


A high resolution mesh generated from volume data or an implicit surface is generally very large and hard to work with.  Many small triangles are needed to capture the fine surface details.

Normal mapping a low resolution mesh is an efficient way to convey fine surface details while maintaining a simple underlying geometry.  Here are the traditional steps required to generate a low resolution mesh and extract a associated normal map:

The motivation of this project is to short-cut the process but generating a low resolution mesh along with the corresponding normal map all in one step.  This cuts out the steps of generating and managing a cumbersome high resolution mesh, simplifying it, and then running through a normal map generator.  All these extra steps are time consuming and need to be done manually.


The goal of this project is to create a program that extracts a low resolution surface and the appropriate normal map from an implicit surface.  Then display the triangle mesh with applied normal map using OpenGL.



Using a simple sphere implicit surface is not interesting enough.  Instead, the following implicit equation makes for and interesting surface with finer detail:

equation1.jpg (6543 bytes)

Where a = 0.6, b = 7.4, and c = 20

flat_shaded_small.jpg (13001 bytes) rgb_shaded_small.jpg (15308 bytes) normal_mapped_small.jpg (11740 bytes)
Flat shaded surface Textured mapped surface with RGB values corresponding to XYZ components of the surface normal Normal mapped surface

The mesh contains 8,216 triangles.  As can be seen, the normal mapping visually smoothes the surface, correcting the normals, while still maintaining the same underlying geometry.  Generating the mesh, normal maps, and outputting the display take only a few seconds.