https://github.com/baptiste-genest/NESOTS
Raw File
Tip revision: 54d404d6d5dc3637ec2ac16a4e12bc1ebdf0eea2 authored by Baptiste GENEST on 30 April 2024, 07:09:33 UTC
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

![Capture d’écran 2024-04-10 à 08 37 32](https://github.com/baptiste-genest/NESOTS/assets/700165/b690e08d-e999-47cc-b1b9-37cb85438906)

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.
back to top