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

Overview of the volfill program

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.


[Curless96] A Volumetric Method for Building Complex Models from Range Images
Brian Curless and Marc Levoy
Computer Graphics (SIGGRAPH 96 Proceedings)

[Davis02] Filling holes in complex surfaces using volumetric diffusion
James Davis, Steve Marschner, Matt Garr, and Marc Levoy
First International Symposium on 3D Data Processing, Visualization, Transmission, June, 2002.

Volfill software distribution

The current release of volfill is version 1.0

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.

Sample data

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)

The happy buddha (VRI file, 47.3M bytes)


Volfill Manual

Distribution notice

Copyright 2002 the Board of Trustees of The Leland Stanford Junior University. All rights reserved.

During the period 1995-2007, this software was covered by the Stanford Computer Graphics Laboratory's custom-written General Software License. This license is royalty-free, nonexclusive, and nontransferable. Click here to view its
terms and conditions. In modification of these terms and conditions, users were permitted to distribute or sell derivatives of this software without accounting to Stanford or the developers, and without payment of royalties to Stanford or the developers. However, title and copyright to the software and documentation remained with Stanford, and users were required to acknowledge the contribution of Stanford in any derivatives, as detailed in the license.

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:

volfill-question at graphics dot stanford dot edu

Last update: May 17, 2011 06:57:24 PM