Python bindings for QuadWild BiMDF — 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
Input (tris)
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
Input (tris)
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
Input (tris)
Coarse Quads
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
Input (tris)
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
Input (tris)
Sharp 60
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
Input (tris)
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
Input (tris)
Isometric (alpha=0.1)