Public code release for Surface Multigrid via Intrinsic Prolongation. For more details, please refer to:
Surface Multigrid via Intrinsic Prolongation
Hsueh-Ti Derek Liu, Jiayi Eris Zhang, Mirela Ben-Chen, and Alec Jacobson
ACM Transaction on Graphics (Proceedings of SIGGRAPH 2021)
[Paper] [ArXiv] [Project Page]
To get started, clone this repository recursively
git clone --recursive https://github.com/HTDerekLiu/surface_multigrid_code.git
On all platforms, we assume you have installed cmake and a modern c++ compiler on Mac OS X, Linux, or Windows.
The main folder contains 6 separate examples that demonstrate some core functionalities and typical usage of our code. All of them have a similar directory and file layout:
cmake/
CMakeLists.txt
README.md
main.cpp
01_single_SSP/
: visualize our prolongation operator by mapping the fine mesh vertices onto the coarse mesh.02_mg_hierarchy/
: show the construction of our multigrid hierarchy and visualize the corresponding prolongation operators between different levels.03_mg_solver/
: show the usage of our multigrid solver on surface meshes with boundaries.04_mg_solver_nobd/
: show the usage of our multigrid solver on surface meshes without boundaries.05_example_mean_curvature_flow/
: show the usage of our multigrid solver in mean curvature flow.06_example_balloon_sim/
: show the usage of our multigrid solver in balloon simulation.07_coarse_to_fine/
: show how to use our successive parameterization to map points on the coarse mesh to the input fine mesh.
And they share a common src
folder for source code and a meshes
folder for input meshes.
Inside each subfolder, for example 01_single_SSP
, compile in release mode using the following typical cmake/make build routine:
cd 01_single_SSP
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j8
If all goes well, you should be able to find and run the executable main_bin
directly with no arguments.
We aim to make our multigrid solver as easy to use as possible. To use our multigrid solver for linear systems defined on a fixed surface mesh i.e. typically for solving Ax = b
, first call mg_precompute
to construct the multigrid hierarchy. Then, similar to libigl's style of calling direct solvers min_quad_with_fixed, our multigrid solver can be used by calling min_quad_with_fixed_mg_precompute
given a left-hand-side system matrix A
and then calling min_quad_with_fixed_mg_solve
to solve the system with the right-hand-side b
. Please refer to the above examples for more details.
If any issues or questions, please do not hesitate to contact hsuehtil@cs.toronto.edu or jiayieris.zhang@mail.utoronto.ca.