https://github.com/baptiste-genest/NESOTS
Tip revision: 54d404d6d5dc3637ec2ac16a4e12bc1ebdf0eea2 authored by Baptiste GENEST on 30 April 2024, 07:09:33 UTC
Update README.md
Update README.md
Tip revision: 54d404d
README.md
# Non Euclidean Sliced Optimal Transport Sampling
Source code of the article:
Genest, Baptiste, Nicolas Courty, and David Coeurjolly. "Non-Euclidean Sliced Optimal Transport Sampling", Computer Graphics Forum (Proceedings of Eurographics), April, 2024

Here are the instructions to generate blue noise samples on the sphere and hyperbolic spaces in any dimensions or to sample meshes of genus 0 (see spherical sampling) or genus >= 2 (see local hyperbolic sampling)
### Note that we use CLI11 to provide a clear command line API, you can use --help on any executable to see all available options.
Ref : https://github.com/CLIUtils/CLI11
## Building (Linux/macOS)
We use CMake, hence the usual building commands are required
from root folder :
```bash
mkdir build
cd build
cmake ..
make -j7
```
## Visualization
If you want to see the effects of each parameter or simply to see the algorithm in action you can use the option :
``` bash
--viz
```
to enable visualization with polyscope : https://polyscope.run/
## Blue Noise on the sphere or on the hyperbolic plane
To generate blue noise points on the sphere in dimension 3, a classical use-case would be
```bash
./spherical_bluenoise --dim 3 --sample_size 1000 --viz
```
The process is the same for the hyperbolic case with the executable.
Note that you can sample any distribution by providing samples with the option --target\_measure nu.pts
## Spherical Mesh Sampling
### CEPS Modification
We use CEPS (https://github.com/MarkGillespie/CEPS) to maps a genus zero mesh to the sphere,
To generate and output the spherical mesh, you must replace the file `CEPS/src/SphericalUniformization/SphericalUniformization.cpp`
by `this_folder/SphericalUniformization.cpp` before compiling and then launch :
```bash
CEPS_BUILD_FILE/bin/spherical_uniformize input_mesh.obj
```
to generate the mesh.
To then sample a mesh, use
```bash
./spherical_mesh_sampling --input_mesh ../data/spot.obj --sphere_mesh ../data/spherical-spot.obj --sample_size 1000
```
The command above would reproduce the top row of the figure 6.
## Local Hyperbolic Mesh Sampling
```bash
./local_hyperbolic_mesh_sampling --input_mesh ../data/macaca.obj --sample_size 1000
```
The command above would reproduce the bottom row of the figure 6.
## Visualizing results
```bash
./vizu_pc --input_mesh ../data/macaca.obj --input_points /tmp/out.pts
```
## Projective Plane Sampling
The code here only illustrates visually its use but one could export points clouds in the same way as illustrated in the code of `spherical_bluenoise.cpp` for instance.
