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
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
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.
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
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
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.
The paper Consistent Mesh Parameterizations and Its Application in Mesh Morphing
presented a mesh morphing technique utilizing a geometry image like parametrization.
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.
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
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.