Skip to content

kvanhoey/ParallelHalfedgeSubdivision

Repository files navigation

Build Status Build status

This repository provides a library for fast subdivision of polygonal surfaces. Currently it supports Catmull-Clark and Loop subdivision, and has both CPU and GPU backends with parallel implementations. For most use cases, subdivision is real-time. It is the implementation of the paper

and an alternate implementation (for the official reference see here) of

Example of Loop subdivision

Setup

License

Apart from the submodules folder, the code from this repository is released with the CC-BY licence. If you use this work, please cite:

@inproceedings {10.2312:egs.20221028,
  booktitle = {Eurographics 2022 - Short Papers},
  editor = {Pelechano, Nuria and Vanderhaeghe, David},
  title = {{A Halfedge Refinement Rule for Parallel Loop Subdivision}},
  author = {Vanhoey, Kenneth and Dupuy, Jonathan},
  year = {2022},
  publisher = {The Eurographics Association},
  ISSN = {1017-4656},
  ISBN = {978-3-03868-169-4},
  DOI = {10.2312/egs.20221028}
}

Cloning

Clone the repository and all its submodules using the following command:

git clone --recursive git@github.com/kvanhoey/ParallelHalfedgeSubdivision.git

If you accidentally omitted the --recursive flag when cloning the repository you can retrieve the submodules like so:

git submodule update --init --recursive

Compilation

This is a CMake project. The root folder contains the main CMakeLists.txt file. Tested on Window 10 (Visual Studio 2019) and Linux Ubuntu 18.04 (see config file for dependencies).

To compile manually:

mkdir build/  # create compilation folder
cd build/     # move into it
cmake ..      # Call cmake on the folder containing CMakeLists.txt
make [<name_of_executable>]  # Compile one or all of the executables

Optional

By default, documentation is not compiled. Please set the CMake variable BUILD_DOC to ON using ccmake or by directly editing CMakeLists.txt before hitting cmake and make doc, which will generate the html/index.html file.

Content

Organization

The lib/ folder contains the library files: see lib/README.md

The root folder contains several usage examples that do the following:

  • catmull-clark_cpu Catmull-Clark subdivision using the CPU backend
  • catmull-clark_gpu Catmull-Clark subdivision using the GPU backend
  • loop_cpu Loop subdivision using the CPU backend
  • loop_gpu Loop subdivision using the GPU backend
  • stats provide statistics of a loaded Mesh.

Notes:

  • The CPU backend relies on OpenMP for parallelization. By default, it uses as many threads as there are CPU cores available. This can be altered by setting the environment variable OMP_NUM_THREADS to another value. For example: export OMP_NUM_THREADS=2
  • The GPU backend relies on OpenGL (library provided under lib/gpu_dependencies). Shader files are loaded using relative paths, so the executable has to be launched from a subfolder of the root folder, e.g., build/.
  • All executables take for input an OBJ file (note: for Loop subdivision, the mesh should be triangle-only) and a subdivision depth.
  • The resulting subdivision is written to disk as an OBJ file. It is triangular for Loop subdivision, and quad-only for Catmull-Clark subdivision.

The meshes folder contains example meshes that can be used as inputs.

The doc folder contains a doxygen file to generate documentation.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published