Skip to content

JeffreyXiang/CuMesh

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CuMesh: High-Performance Geometry Processing for PyTorch

CuMesh is a GPU-accelerated library designed for high-performance 3D geometry processing directly within the PyTorch ecosystem. It provides efficient primitives for mesh cleaning, decimation, remeshing, and UV unwrapping.

Key features include:

  • CUDA-Accelerated Mesh Operations: Fast topology queries, simplification, hole filling, and cleaning.
  • Remeshing: Remesh arbitrary meshes using narrow-band UDF and Dual Contouring.
  • UV Unwrapping: Efficient UV parameterization with xatlas enhenced by a fast mesh clustering on the GPU.

Installation

Prerequisites

  • Python >= 3.8
  • PyTorch >= 2.4 (with CUDA support)
  • CUDA Toolkit >= 12.4 (matching your PyTorch version)

Build from Source

git clone https://github.com/JeffreyXiang/CuMesh.git --recursive
pip install CuMesh --no-build-isolation

Quick Start & Modules

See the examples directory for more detailed usage.

API Reference

cumesh.CuMesh

  • init(vertices, faces): Initialize mesh with [V,3] and [F,3] CUDA tensors.
  • read(): Return current (vertices, faces) tensors.
  • simplify(target_num_faces, verbose=False, options={}): Fast GPU-accelerated mesh decimation.
  • uv_unwrap(verbose=False, ...): Generate UVs using accelerated clustering and Xatlas.
  • fill_holes(max_hole_perimeter): Triangulate and close boundary loops.
  • repair_non_manifold_edges(): Split edges to resolve non-manifold geometry.
  • remove_degenerate_faces(): Remove zero-area faces or those with NaN normals.
  • remove_duplicate_faces(): Remove faces with identical vertex indices.
  • remove_small_connected_components(min_area): Delete isolated components below area threshold.
  • unify_face_orientations(): Reorient faces to have consistent winding order.
  • compute_face_normals(), compute_vertex_normals(): Trigger normal calculation (access via read_*_normals).
  • get_connected_components(): Compute connectivity (access via read_connected_components).
  • get_boundary_loops(): Detect boundaries (access via read_boundary_loops).
  • Properties: num_vertices, num_faces, num_edges, num_boundaries.

cumesh.remeshing

  • remesh_narrow_band_dc(...): Performs Dual Contouring reconstruction based on the UDF of the input mesh.

cumesh.cuBVH

NOTE: This is a wrapper around the cubvh library.

cumesh.Atlas

NOTE: This is a wrapper around the xatlas library.

  • add_mesh(vertices, faces, normals=None, uvs=None): Register mesh geometry (Must be CPU tensors).
  • compute_charts(max_chart_area, ...): Segment mesh into UV charts (parameterization).
  • pack_charts(resolution, padding, ...): Pack generated charts into a texture atlas.
  • get_mesh(index): Retrieve processed data as (vertex_map, faces, uvs).
    • vertex_map: Maps new vertex indices to original input indices.

Acknowledgements

This package builds upon and integrates code from several excellent open-source libraries. We would like to express our gratitude to the authors of:

  • cubvh: For the high-performance CUDA BVH acceleration toolkit.
  • xatlas: For the robust UV parameterization and atlas packing library.
  • pamo: For the reference implementation of the GPU parallel edge collapse algorithm used in our mesh simplification module.

License

MIT License

About

Cuda mesh utils.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5