Skip to content

Release v0.5.8

Choose a tag to compare

@KhoiDOO KhoiDOO released this 18 Aug 23:00
· 378 commits to main since this release
de6688e

Features

  • Differentiable Dual Marching Cubes (conquer3d.ops.dual_marching_cubes / dmc): High-throughput GPU dual meshing algorithm decomposing voxel cells into variable dual vertices (1 to 4) per independent Marching Cubes polygon contour, guaranteeing strictly 2-manifold surfaces without topological pinch points.
  • Extreme Extraction Speed (~1.0 Billion faces/s): Highly optimized CUDA pipeline achieving $3.44\text{ ms}$ for $3.43\text{M}$ faces at $1024^3$ resolution on NVIDIA RTX 4090 ($4.3\times$ faster than DC and $4.8\times$ faster than MCA).
  • Newton-Raphson Level-Set Projection: Refines contour centroids directly onto implicit zero-crossings via vectorized trilinear gradient iterations.
  • Pure Quad & Triangle Output: Generates pure $(Q, 4)$ quadrilateral meshes with quad_split=False or $(F, 3)$ Delaunay max-min angle triangulations with quad_split=True.
  • PyTorch Autograd Differentiability: Analytical backward pass in DiffDualMarchingCubes propagating gradients directly into sdf and colors.

Refactors & Build

  • Modular Data Constants (dmc_data.h): Dedicated header containing polygon contour definitions (dmc_r_pattern), asymptotic ambiguity table (dmc_ambig_table), and topological quadrant mappings.
  • Deterministic Sort-and-Gather Pipeline: Replaced dynamic GPU hash tables with 64-bit integer edge keys (g_min << 32) | g_max and Thrust radix sort.
  • Documentation & PyPI Release: Bumped version to 0.5.8, updated README.md, resolved GitHub Issue #3, and published package conquer3d-0.5.8.tar.gz to PyPI.

Examples

import torch
from conquer3d.data_structure import create_voxel_grid
from conquer3d.ops import dual_marching_cubes, dmc

# 1. Create 3D Voxel Grid
grid_vertices, voxels, _ = create_voxel_grid(
    grid_min=[-1.0, -1.0, -1.0],
    grid_max=[1.0, 1.0, 1.0],
    res=[64, 64, 64],
    device="cuda"
)

# 2. Evaluate scalar SDF and optional colors
sdf = (torch.norm(grid_vertices, dim=-1) - 0.6).requires_grad_(True)
colors = torch.rand((grid_vertices.shape[0], 3), device="cuda", requires_grad=True)

# 3. Extract Triangle Mesh with Newton-Raphson level-set projection
verts_tri, faces_tri, out_colors = dmc(
    grid_vertices, voxels, sdf, colors=colors, iso=0.0, quad_split=True, project_iters=5
)
print(f"DMC Triangles: {verts_tri.shape[0]:,} vertices, {faces_tri.shape[0]:,} faces")

# 4. Extract Pure Quadrilateral Mesh
verts_quad, faces_quad = dmc(
    grid_vertices, voxels, sdf, iso=0.0, quad_split=False
)
print(f"DMC Quads: {verts_quad.shape[0]:,} vertices, {faces_quad.shape[0]:,} quads")

# 5. Differentiable Autograd Backward Pass
loss = verts_tri.sum() + out_colors.sum()
loss.backward()
print(f"SDF Gradient Norm: {sdf.grad.norm().item():.4f}")