At left is a rendered 3D model of a small section of the hair from
Michelangelo's statue of David. The section is 75mm wide on the statue, and
the spacing between triangle vertices is 1.0mm. Although this surface was
scanned dozens of times (from many different angles), occlusions prevented
access to the deepest crevices. The hole highlighted in this rendering has a
complex shape and multiple boundary components, i.e. islands floating in the
hole. The largest boundary component contains 905 edges. (Hidden portions of
this boundary are indicated with broken lines.) This program uses an algorithm
based on volumetric diffusion to fill holes like this.

Volfill: a hole filler based on volumetric diffusion

Volfill is a program for filling in holes in
dense polygon meshes using an algorithm based on volumetric diffusion.
It was developed relatively late in the Digital Michelangelo
Project. As such, it has not been incorporated into that project's
scanalyze system for processing range data.
However, the program has been successfully used to fill holes in many of the 3D
models produced during the Digital Michelangelo Project. This software
distribution contains the source code for volfill, a binary compiled for Linux,
and several test datasets. The software is being made available for research
and commercial use, free of charge, as described at the bottom of this web
page.

Table of Contents

The volfill program takes as input a triangle mesh represented volumetrically,
as a clamped signed distance function. The required file format is a VRI file
(extension .vri) as output by VRIP [Curless96]. Using the
algorithm described in [Davis02], volfill fills all holes in the mesh. Its
output is another VRI file, which can be converted to a new triangle mesh in
PLY format using the implementation of Marching Cubes embedded in the VRIP
distribution. For more information about PLY files, look at the
file format section of the
Stanford 3D Scanning Repository web page. For more information about VRI
files, look at the source code for VRIP, or the hole filler, or talk to us. To
help you understand (and debug) your use of the hole filler, we have a tool,
"vripslicer", that allows you to display slices of VRI volumes. This tool is
included with VRIP.

The easiest way to create a VRI file is to run a triangle mesh, represented as
a PLY file, through VRIP. Unfortunately, VRIP only accepts range-grid PLY
files, a special kind of PLY file that encodes a range image as a rectangular
array of points. If your triangle mesh is a range image, but in some other
format, it is easy to write a program that will convert it to a range-grid PLY
file. From there, VRIP will convert it into a VRI file. However, if your data
is a general triangle mesh (arbitrarily connected 3D vertices), then you
cannot use VRIP. Currently, we do not have a tool to convert a general PLY
file to a VRI file. However,
Brett Allen, a student of Brian Curless at the
University of Washington, has developed such a tool, called
ply2vri. Another possibility is to look at Sean Mauch's
closest point transform algorithm. It can also be used to convert a general
triangle mesh to a volumetric representation, although not using our formats.

Volfill was written by Steve Marschner and Kurt Berglund, based on
earlier code by James Davis, Lucas Pereira, and Matt Garr.

Volfill (119K bytes compressed)
Compressed tar file containing the source code and an executable file
(volfill) compiled for Linux.
Here are
Windows executables for ply2vri and volfill, contributed by
Alexander Agathos and Ioannis Pechlivanidis.
Here is a
modernization of the source code by Alex Mansfield of ETH, for
x86_64 GNU/Linux and gcc version 4.3.2. We have not tested it.

The following links provide meshes with holes in them that can be used
as sample input to volfill. Note that these VRI files use big-endian
byte order, and may not be read correctly by software on little-endian
architectures.

A small piece of a finger of Michelangelo's David
(VRI file, 881K bytes)

For downloads beginning on August 23, 2007, this software is covered by a new
General Software License, which is based on the BSD license.

Caveat emptor

Volfill is research code. We are releasing it mainly to encourage other
researchers to compare their hole filling algorithms against ours and thereby
to improve on our algorithms. People may also find volfill useful for filling
holes in production 3D models, but it is not production-quality code. We
welcome questions, bug reports, and suggestions, but we do not guarantee timely
responses to them. In particular, the developers have long since graduated and
left Stanford. Email about volfill should be sent to: