pyquadwild

Python bindings for QuadWild BiMDF — quad-dominant remeshing

pip install pyquadwild --find-links https://github.com/PozzettiAndrea/pyquadwild/releases/latest/download/

Quad-Dominant Remeshing

Feature-line driven quad remeshing via QuadWild with Bi-MDF solver

import pyquadwild
import trimesh

mesh = trimesh.load("bunny.stl")
v_quad, f_quad = pyquadwild.quadwild_remesh(
    mesh.vertices, mesh.faces,
)

28.2s — 35,947 → 9,221 verts, 69,451 tris → 9,120 quads

Before Input (tris)
After Quad Remeshed
# Finer quads (smaller scale factor)
v, f = pyquadwild.quadwild_remesh(
    mesh.vertices, mesh.faces,
    scale_factor=0.5,
)

34.1s — 35,947 → 30,291 verts, 69,451 tris → 30,135 quads

Before Input (tris)
After Fine Quads
# Coarser quads (larger scale factor)
v, f = pyquadwild.quadwild_remesh(
    mesh.vertices, mesh.faces,
    scale_factor=2.0,
)

27.2s — 35,947 → 3,820 verts, 69,451 tris → 3,737 quads

Before Input (tris)
After Coarse Quads

Sharp Feature Preservation

Control edge flow alignment with sharp angle threshold

# Aggressive sharp detection (15 degrees)
v, f = pyquadwild.quadwild_remesh(
    mesh.vertices, mesh.faces,
    sharp_angle=15.0,
)

35.4s — 35,947 → 18,000 verts, 69,451 tris → 17,896 quads

Before Input (tris)
After Sharp 15
# Relaxed sharp detection (60 degrees)
v, f = pyquadwild.quadwild_remesh(
    mesh.vertices, mesh.faces,
    sharp_angle=60.0,
)

27.6s — 35,947 → 8,841 verts, 69,451 tris → 8,725 quads

Before Input (tris)
After Sharp 60

Regularity vs Isometry

Alpha controls the balance between regular quad shapes and feature alignment

# More regular quads (low alpha)
v, f = pyquadwild.quadwild_remesh(
    mesh.vertices, mesh.faces,
    alpha=0.005,
)

28.1s — 35,947 → 10,236 verts, 69,451 tris → 10,131 quads

Before Input (tris)
After Regular (alpha=0.005)
# Better feature alignment (high alpha)
v, f = pyquadwild.quadwild_remesh(
    mesh.vertices, mesh.faces,
    alpha=0.1,
)

27.3s — 35,947 → 8,351 verts, 69,451 tris → 8,262 quads

Before Input (tris)
After Isometric (alpha=0.1)