We approximate the lowest part of the eigenvalues and eigenfunctions of Laplace-Beltrami operator, to have a faster speed, less storage, and quicker mapping to world coordinates. Our general idea is to construct a subspace (from the original space) that can approximate the low frequency (smooth) functions on the manifold. Then we will solve the eigenproblem restricted to such subspace.
Here is main component of our approximation scheme:
- Construct a subspace
- sampling
- radial basis functions
- partition of unity
- Solve the eigenproblem in subpace
- low-dim eigenproblem
- lift the eigenfunction (only when necessary/as requested since it's expensive for memory)
Please note that this program requires Eigen, LibIGL, and an eigensolver (e.g. CUDA's cuSOLVER function).
We use CMake for easy installation/deployment on your machine, by creating a CMakeFiles.txt that hopefully do (almost) everything to make our code runs in your machine. Here are the steps to get our program runs:
- Clone our repository recursively using
git clone https://github.com/a-nasikun/FastSpectrum --recursive
. - Ensure that you have CUDA set-up on your machine. You can download from here if you haven't done so.
- Update dependency submodule(s). Among many external libraries in LibIGL, we'll be using eigen, glfw, glad, and imgui only. During our test, the commit version of eigen in libIGL is an old one and doesn't support
Eigen::SparseMatrix.
We can solve this by simply updating the eigen, usinggit submodule update --remote external\eigen
. - Run the Cmake command and it should be working and running without any problem.
If some headers/libraries are missing (perhaps because you locate the wrong folder), you could specify it directly in your application. For example, in Visual Studio you could go to
Project
>Properties
>C/C++
>General
>Additional Include Directories
.
Having followed those steps, our program should compile and run as expected. This program is still under continuous development, so please expect some errors/bugs/mistakes while exploring it it. If you have any problem compiling it or having some nice suggestion(s) or question(s), please drop me an email at a.nasikun[at]tudelft.nl
.
Note: parameter support in ConstructBasis() function controls the sparsity of the basis matrix U, approximating the number of non-zero entries per row. It is currently hard-coded to have approximately 8-15 non-zero entries on each row. If a user prefers to have a different support number, s/he is welcomed to do so. We are a bit conservative (as as the effect of Euclidean distance), so that actual value would be higher than the input value.
This work was presented at SGP 2018 at Paris TelecomTech, organized by EuroGraphics and ACM SIGGRAPH, and will be published at Computer Graphics Forum (CGF) Vol.37(5). You can read the paper from our website for a more detailed explation of our approximation algorithm.
If you use our application in your work, please kindly cite our work.
@article{nasikun2018fastspectrum,
title={Fast Approximation of Laplace-–Beltrami Eigenproblems},
author={Nasikun, Ahmad and Brandt, Christopher and Hildebrandt, Klaus},
journal={Computer Graphics Forum},
volume={37},
number={5},
year={2018},
publisher={Wiley}
}