parallel, Intersection-free iso-surface extraction module used in PaMO
Requirements: torch (must be compatible with CUDA version), trimesh
pip install pdmc
You can effortlessly try the following command. The generated results are saved in out/.
python test/example.py
Firstly you should build an iso-surface extractor as follows:
from pdmc import DMC
dmc = DMC(dtype=torch.float32).cuda() # or dtype=torch.float64
Then use its forward function to generate a single mesh:
verts, faces = dmc(sdf, isovalue=0.0, return_quads=False, normalize=True)
Input
sdf: queries SDF values on the grid vertices (see thetest/example.pyfor how to create the grid), ([N, N, N, 3])normalize: whether to normalize the output vertices, default=True. If set to True, the vertices are normalized to [0, 1]. When False, the vertices remain unnormalized as [0, dim-1],return_quads: whether return quad meshes; If set to True, the function returns quad meshes ([F, 4]).
Output
verts: mesh vertices within the range of [0, 1] or [0, dim-1]. ([V, 3])faces: mesh face indices (starting from 0). ([F, 3]).
Differentiable Iso-Surface Extraction Package (DISO)
If you use pdmc or PaMO in your research, please cite:
@inproceedings{oh2025pamo,
title={PaMO: Parallel Mesh Optimization for Intersection-Free Low-Poly Modeling on the GPU},
author={Oh, Seonghun and Yuan, Xiaodi and Wei, Xinyue and Shi, Ruoxi and Xiang, Fanbo and Liu, Minghua and Su, Hao},
booktitle={Computer Graphics Forum},
pages={e70267},
year={2025},
organization={Wiley Online Library}
}