CuMesh is a GPU-accelerated library for high-performance 3D geometry processing within the PyTorch ecosystem. It provides efficient CUDA implementations for mesh cleaning, decimation, remeshing, and UV unwrapping. The library centers around the CuMesh class which manages mesh data on GPU and exposes operations through PyTorch tensor interfaces. Key components include a QEM-based mesh simplification algorithm, narrow-band dual contouring remeshing, accelerated mesh clustering for UV unwrapping, and comprehensive mesh connectivity queries. The implementation demonstrates strong GPU programming practices with proper memory management, error checking, and efficient use of primitives like CUB for parallel operations.
This repository implements an automatic texture atlas generation library for 3D meshes. Its primary function is to take an arbitrary triangle mesh (typically loaded from an OBJ file) and produce a UV-mapped mesh with a compact, packed texture atlas. The algorithm segments the mesh into charts based on geometric and topological criteria, parameterizes each chart using least-squares conformal mapping (LSCM) or orthogonal projection, and packs the charts into a single bitmap using a brute-force or random bin-packing strategy. The library is designed to handle non-manifold meshes, supports colocal vertices, and provides quality metrics such as stretch and conformal distortion. The architecture is modular, with separate libraries for core utilities (nvcore), mathematics (nvmath), mesh data structures (nvmesh), and image handling (nvimage). The public API is a single C-linkage function `atlas_generate` with options for quality, texel density, and packing alignment. The codebase was originally developed for use in the video game 'The Witness' and is released under the MIT license. It includes a test harness that loads an OBJ file and prints atlas results. The repository is functionally complete but shows its age: it predates C++11, uses custom containers instead of STL, and relies on vendored dependencies (tinyobj, stb_image, poshlib) with known limitations. The packing algorithm can be slow for large meshes, and there are numerous TODO comments and dead code paths. Despite this, the underlying algorithms are sound and the half-edge mesh, sparse solver, and rasterization components are well-implemented and could be extracted for use in other 3D projects.