A collection of algorithms for iso-sufrace extraction on GPU. Supports pytorch.
Project description
isoext: Isosurface Extraction on GPU
Overview
Welcome to isoext
— a Python library designed for efficient isosurface extraction, leveraging the power of GPU computing and comes with pytorch
support. Our library attempts to implement a collection of classic isosurface extraction algorithms. Currently, only the following algorithms are supported, but more will come in the future:
- Marching cubes
lorensen
: the original marching cubes algorithm from the paper Marching cubes: A high resolution 3D surface construction algorithm.
Installation
To install isoext
, make sure CUDA Toolkit is installed and run:
pip install isoext
Quick Start
Here's a simple example to get you started:
import isoext
from isoext.sdf import *
aabb = [-1, -1, -1, 1, 1, 1]
res = 128
grid = isoext.make_grid(aabb, res)
torus_a = TorusSDF(R=0.75, r=0.15)
torus_b = RotationOp(sdf=torus_a, axis=[1, 0, 0], angle=90)
torus_c = RotationOp(sdf=torus_a, axis=[0, 1, 0], angle=90)
sphere_a = SphereSDF(radius=0.75)
sdf = IntersectionOp([
sphere_a,
NegationOp(UnionOp([
torus_a, torus_b, torus_c
]))
])
sdf_v = sdf(grid) # Only accept a gpu tensor from pytorch for now
isolevel = 0
v, f = isoext.marching_cubes(sdf_v, aabb, isolevel)
isoext.write_obj('test.obj', v, f)
Task List
- Fix docstring.
- Implement MC33.
- Add
numpy
support.
License
isoext
is released under the MIT License. Feel free to use it in your projects.
Acknowledgments
- We use Thrust for GPU computing and nanobind for Python binding.
- The LUTs for
lorensen
are borrowed from Paul Bourke (https://paulbourke.net/geometry/polygonise/).
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
isoext-0.1.1.tar.gz
(14.5 kB
view hashes)