Git Product home page Git Product logo

isosurfacing's Introduction

Feature-preserving Isosurface Extraction

This code is accompanied with the following work for extracting the iso surface of a given implicit surface:

Hao-Xiang Guo, Yang Liu, Hao Pan, Baining Guo. Implicit Conversion of Manifold B-Rep Solids by Neural Halfspace Representation, ACM Transactions on Graphics(SIGGRAPH ASIA), 2022.

[Paper] [Project Page]

Installation Guide (64-bits system)

The code was tested under both Linux (Ubuntu 18.04, 20.04) and Windows (Windows 10+), with and without GPU support (Cuda 10+). The following guide is for Linux system with Cuda GPU support.

  • Step 1: download essential packages LibTorch 1.7.1+cu101 and [CuDNN 8.0.5+cu101](https://developer.nvidia.com/rdp/cudnn-archive). Extract the above packages into two folders libtorch and cudnn under the folder IsoSurfacing.

    Higher versions of LibTorch, CuDNN and CUDA can be used here, but you may need to install additional packages like intel-mkl, and specify CMake path.

  • Step 2: Compile the code. You need cmake (ver >= 3.9) and g++ (>= 8.0).

    cd IsoSurfacing && mkdir build && ./build.sh

Usage: Isosurface extraction from neural implicits

Run the following command to see the guidance.

    cd .IsoSurfacing/build/App/console-pytorch
    ./ISG_console_pytorch -h

The following message is printed on screen.

    --- Usage:
    ISG_pytorch [OPTION...]

    -i, --input arg      input model(*.pt)
    -d, --depth arg      octree depth (2-10)(default: 7)
    -b, --box arg        bounding box size (default: 2)
    -a, --angle arg      feature angle threshold for EMC  (default: 30 degree)
    -m, --method arg     Method: EMC, DC, MC (default: EMC)
    -o, --output arg     output mesh (ply format)
    -t, --threshold arg  threshold value for computing intersection. (default:
                        1e-7)
    -n, --maxiter arg    max iteration number for computing intersection.
                        (default: 50)
    -g, --gpu            use GPU model (default: true)
    -s, --setbuf arg     set buffer size (default: 131072)
    -x, --type arg       set model type (2dim or 3dim) (default: 2)
    -l, --alldepth       generate meshes for each depth layer (default, false)
    -v, --isovalue arg   isovalue (default: 0)
    -k, --vtkoput        output vtk format
    -c, --useoctree      use octree speedup (default, false)
    -y, --verbose        print progress (default, true)
    -h, --help           Print help
        --compare arg    GT mesh for SDF comparison (*.ply)
        --compres arg    resolution for for SDF comparison (default: 32)

Assume that you have a network model in pytorch (*.pt) format that takes a set of 3D coordinates as input and outputs the corresponding implicit values or signed distances, you can use ISG_console_pytorch to extract the isosurface of the implicit function, with sharp feature preserving property (see our paper).

./ISG_console_pytorch -i ./test/teaser.pt -o outputmesh.ply -v -0.01 -d 8

Here -0.01 is the specified isovalue, -d 8 is the max depth of grid volume, you may need to set it to a high value if the isosurface contains very narrow regions that needs high-resolution grids. You can set --useoctree=true to speed up the computation, but it may fail to recover small regions in some circumstances occasionally. If you want to recover very flat feature curves, you can use -a and specify a small angle like 5 degree, if EMC method is employed. You can set a large buffer size via -s integervalue if you own a GPU with much large memory. The default value 131072 is tested on a GPU with 11GB Mem.

Here EMC is the algorithm proposed by Kobbelt et al. --- Feature Sensitive Surface Extraction from Volume Data, SIGGRAPH 2001, DC corresponds to the Dual Contour algorithm proposed by Ju et al. --- Dual Contouring of Hermite Data, SIGGRAPH 2022. The authors' codes are adopted and modified.

The program will output an isosurface mesh -- outputmesh.ply. It also generates outputmesh_sharpedge.obj (sharp edges detected by checking dihedral angles) and outputmesh.mlp (MeshLab project file). You can open outputmesh.mlp from MeshLab to visualize both the mesh and sharp edges.

Usage: Isosurface extraction for customized implicit functions

Please check the small project App\console and modify App\console\MyImplicitFunc.h to define your implicit function. You only need to implement is_inside, scalar_value and gradient functions. I also integrated other marching cube variants for testing, including MC -- classic marching cubes, MC_33 -- Marching Cubes 33, DMC -- Dual Marching Cubes. Note that App\console project uses CPUs only.

Contact

Please contact me (Yang Liu [email protected]) if you have any question about this implementation.

Third Party Code in use

isosurfacing's People

Contributors

xueyuhanlang avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.