Meshing

Everything related to the processing and generation of 3D meshes.


  Old - Some content is 10+ years old, not representing my current thoughts  

Index


Machine Learning

Gopher
Image Recognition

Some of my code is available on my GitHub Account


N-Patches


I wanted a fast and simple method that can create smoother surfaces and better silhouettes from a normal triangle mesh. N-Patches operate on each triangle individually and derive the surface continuity from the normals. They are well-suited to a hardware implementation. ATI has an extension called ATI_pn_triangles (N-Patches are also called PN triangles), but it is discontinued. ATI released a paper (Curved PN Triangles) explaining the math behind the extension. Also Real-Time Rendering has a great chapter on curves & surfaces. I implemented quad and triangle patches based on these two sources.

The first 8 subdivision levels for a bicubic triangle N-Patch. The normals of the base triangle are bent away to make the surface curved.
Bicubic quad N-Patches using the same method as the triangle patches.
The 602 triangle tiger model from the DirectX April 2005 SDK tessellated to subdivision level 9. The model is rendered with a GLSL Gooch shader.

Geometry Images


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. This is a heavy work in progress.

For more information visit the Geometry Image Library project site.

A very early version of a demo application using the Geometry Image Library. It is doing the cut refinement in the screenshot.
A finished cut solution for two Genus-0 meshes.
A web based debugging tool for inspecting the mesh graph. This is running on a small web server developed by my friend Stefan.
The Killeroo mesh by Headus. The image shows the mesh, a cut solution for it, the geometry image and the associated normal map. Credits for fixing up and exporting the mesh go to my friend Carsten.

Progressive Meshes


A basic VIPM implementation that I wrote for my geometry image code. It uses Garland's quadric error metric and has additional code to prevent face flips. There's also an implementation of the metric without the quadrics. It's slightly more accurate but has an unreasonable large performance hit.

A head model in various LOD levels. There are smoothing errors visible in the 5000 triangle LOD because this VIPM implementation doesn't try to preserve any surface attributes like normals. This wasn't necessary for the intended use in surface parametrization code.
Another model. This one was done by my friend Wouter using the free modelling program Wings3D.

Surface Parametrization


Parametrizing a 3D surface onto a 2D plane is a challenging task. I became interested in it because it is the basis for many interesting mesh compression and reconstruction / remeshing algorithms. The work of Floater, Hoppe and Hormann is among the most impressive in this field. I implemented a simple iterative approximation of Tutte's barycentric mapping. I plan on using this code as the basis for various projects like surface smoothing, compression, tesselation and LOD generation. This survey by Floater / Hormann is a very good introduction to the field.

The test surface (modelled in MAX4) from which the parametrization in the next picture is created. The boundary to the hole in the bottom is used as outline for the parametrization.
The parametrization. The boundary of the mesh was mapped on a circle. A circle is simpler to handle than most other shapes. The colors are the normals of the mesh rasterized with my software rasterizer.
Same parametrization mapped on the square. Here we have to deal with degenerate triangles in parametrization space because some edges might be mapped around corners. A triangle might also have 2 of its edges mapped on a single border, which would turn it into a line in the parametrization.

 © 2002 - 2017 Tim C. Schröder Disclaimer