Bounded biharmonic weights c++ demo for surfaces/volumes in 3d

Alec Jacobson

December 24, 2012

weblog/

By popular demand I've created a quick-and-dirty 3d C++ demo of our paper "Bounded Biharmonic Weights for Real-time Deformation" [Jacobson et al. 2011]. The demo takes a mesh (.obj or .off) and a description of a skeleton (in my own ridiculous .bf and .tgf file formats) and computes a tetrahedral volume mesh using tetgen (saved to a .mesh file) and then computed bounded biharmonic weights for each handle over this mesh (save to my not-so-ridiculous .dmat file format). This is a small program that illustrates how to compute Bounded Biharmonic Weights (BBW) for a given surface mesh and skeleton description. This only supports point handles and skeleton trees (bones). Cages are not supported. This program only computes and outputs the weight function values. You should be able to load them into matlab or maya or whatever.

COMPILE

First install the dependencies (e.g. mosek). If your on a mac, and why wouldn't you be, then you *should* with any luck and by the grace of God be able to compile with:
make

RUN

Then run an example with (e.g.):
./bbw_demo examples/brick.obj examples/brick.tgf
This will produce at least 2 files:
  examples/brick-volume.mesh  Tetrahedral mesh over which weights were computed
  examples/brick-volume.dmat  Coefficients of weights defined over .mesh

File Formats

See file-formats/index.html The dependencies are:
  igl_lib
    eigen3
    tetgen
    mosek

Igl lib

IGL_lib is our groups internal library. It will someday be publicly available, but not yet. Thus I only include here a bare minimum to get this demo to work. The library functions as an inlined header library. All the source is located in ./igl_lib/include/igl Eigen3: The igl dependencies rely on a depracted version of the Sparse Matrix suite in eigen 3. Thus you need the correct version of eigen. To make this easier I have included the necessary version of eigen here: ./eigen3 Mosek: Mosek is free for academics and has its own installation instructions. Adjust your makefile accordingly. Tetgen Tetgen is also free and easy to install. Be sure to compile the library version, i.e.:
make tetlib
To make life a little easier I include a working version of tetgen in ./igl_lib/external/tetgen/. You can go there and compile libtet.a or download the tetgen source and do that on your own. Whatever. You can try to contact me with questions. Especially regarding the algorithm described in "Bounded biharmonic weights for real-time deformation" by [Jacobson et al. 2011]. However, please please please please please please please please please please please please please please please please please please try to solve compilation troubles on your own. I didn't intend for this code to be machine independent or even necessarily easy to compile. This is a quick and dirty demo because so many people requested it. Sometime in the not too distant future I still plan to release a *nice* 3d, C++ demo. Update: I have updated this demo to use the libigl library. Please find the new version on the bbw project page.