Geometry Image Library

This is the (archived) homepage of my Geometry Image Library project. You best start by reading the FAQ on this site.

  No updates for quite some time, library is not available  

View 'Geometry Images' Project ▹

What are geometry images?

Here's the abstract from the original 2002 paper:

Surface geometry is often modeled with irregular triangle meshes. The process of remeshing refers to approximating such geometry using a mesh with (semi)-regular connectivity, which has advantages for many graphics applications. However, current techniques for remeshing arbitrary surfaces create only semi-regular meshes. The original mesh is typically decomposed into a set of disk-like charts, onto which the geometry is parametrized and sampled. In this paper, we propose to remesh an arbitrary surface onto a completely regular structure we call a geometry image. It captures geometry as a simple 2D array of quantized points. Surface signals like normals and colors are stored in similar 2D arrays using the same implicit surface parametrization—texture coordinates are absent. To create a geometry image, we cut an arbitrary mesh along a network of edge paths, and parametrize the resulting single chart onto a square. Geometry images can be encoded using traditional image compression algorithms, such as wavelet-based coders.

In simple words, a geometry image is an image like 2D array which encodes a mesh and its attributes. To create it, a mesh is cut open and unfolded on a square. This new mesh representation has often advantages over classical irregular triangle meshes, and forms the basis for many interesting and useful algorithms.

What are the uses of this mesh representation?

There are plenty. Here's a short list of the applications I found to be most interesting:

  • Mesh / Animation Compression

    Geometry images can be compressed using lossy as well as lossless forms of traditional 2D image compression. Even for heavy lossy compression a crack free reconstruction can be guaranteed. The compression rates achieved with wavelet based coders are quite impressive. The natural extension of geometry images for mesh compression are geometry videos for animation compression. They can leverage well-known video compression codices such as MPEG4.

  • LOD Generation

    It is trivial to construct polygon reduced versions of a mesh once a geometry image representation is available. A mesh can also be interpolated to a higher polygon count. The process is comparable to the magnification / minification of textures through bilinear filtering and MIP mapping.

  • Full Hardware LOD

    The LOD generation step can be done fully in hardware if certain features are present. One would need the ability to render to a vertex array. The XBox as well as OpenGL with the future ARB super buffer extension can do this. nVidia's OpenGL implementation already supports this through the vendor specific NV_vertex_array_range and NV_pixel_data_range or in the future with ARB_vertex_buffer_object and ARB_pixel_buffer_object. Alternatively this could also be implemented on a GPU supporting the Direct3D's vertex shader 3.x model.

  • Normap Map Generation

    One of the most interesting features of the Doom3 engine is that it can apply normal maps to polygon reduced objects / characters to make them look like their high polygon count originals. To make this work, three things in addition to the original high polygon count model are required: A simplified version of the model, texture coordinates for that simplified version, and a normal map representing the high polygon count model's detail on the surface of the low-poly one. The normal map is usually generated by a tool, while the low-poly model as well as its texture coordinates are created by hand. Geometry images improve this process since they can not only generate the normal map - they can also automatically supply the low-poly model as well as the texture coordinates for it.

  • Mesh Morphing

    The paper Consistent Mesh Parameterizations and Its Application in Mesh Morphing presented a mesh morphing technique utilizing a geometry image like parametrization.

  • Triangle Stripping

    Any manifold (even with holes and discontinuities) can be converted to a geometry image. Any geometry image can be reconstructed into a mesh representable by a single non-degenerate triangle strip. I would not call this a major feature of geometry images, but it's an interesting side effect.

  • Adaptive Tessellation

    By warping the geometry image to enlarge regions of importance, the density of the tesselation can be adjusted. This effectively allows for adaptive tesselation done fully on the GPU. The paper "Rendering Procedural Terrain by Geometry Image Warping" described this technique for terrain rendering.

On which platforms / compilers can I use it?

The code was developed & tested entirely on VS.NET 2002/2003. I tried to keep it as ANSI and portable as possible, you should have little problems porting it to any other platform / compiler. I tested the code with SGI, STLPort and the VS.NET 2003 STL. I did my best to make it work on all implementations. I had several issues with every one, I wrote comments to indicate these places. The test application is written with Shiny and intended to be Win32 / VC++ only.

Where can I get the GIL ? What is the project's current status and final goal?

It's currently not available. A significant amount of work has been completed on it, but it's still too unfinished for a release. Writing even a simple implementation of the GI algorithm is a lot of work, as it involves a big amount of different algorithms, some pretty complex math and some tricky data structures.

My goal is not to provide a production ready implementation that handles everything from mesh compression to normal map generation. I plan on providing a stable, well-documented and free implementation that gets all the fundamental things right. With this code as a base, developers should be able to create versions for their specific needs very simply.

It'll be available whenever I feel like finishing it and have the time to do so.

Why bother putting up this project page if no library is available yet?

Because I hope I can get some people interested in the algorithm. Surprisingly little people know about geometry images, even less actually understand how powerful they are. This FAQ gives a good introduction into the subject and might encourage some people to take a deeper look.

Which papers / websites should I look at to gain a deeper understanding?

This is an incomplete list of resources I used while working on my implementation, or related material which I found interesting.

Under which license is the GIL?

It's currently LGPL. This may change before release.
 © 2002 - 2023 Tim C. Schröder Disclaimer