Remesh PMP Uniform (backend)
Remesh PMP uniform — one target edge length, everywhere, done well
- trimesh
- remeshed_mesh
- info
Uniform remeshing is the most boring, dependable operation in the whole remesh family, and that's precisely why it's so useful. PMP's uniform mode rebuilds your mesh so every edge is roughly the same target length - no adaptive tricks, no curvature games, just a clean, even triangulation. When you want to hand a mesh to a UV unwrapper, a displacer, or a subdivider without worrying about a 1mm triangle hiding next to a 10cm one, this is the quiet workhorse you want.
It's the pmp_uniform backend of the main Remesh dispatcher node, dev-only in the schema like all the backends - pick it from the dropdown.
How it works
PMP's uniform remesher iteratively splits edges that are too long, collapses edges that are too short, and flips edges that make bad angles, pushing the whole mesh toward a single target edge length across pmp_iterations passes. The "uniform" part is exactly that target: one number, applied everywhere. If projection is on (the default), each pass snaps vertices back onto the original surface, which keeps the remesh from shrinking or ballooning away from your actual shape - the classic failure mode of naive remeshers.
Inputs and outputs
- trimesh (TRIMESH) - the mesh to remesh.
- pmp_edge_length (default 1) - the target edge length, relative to mesh scale. The only real control. Halve it and you get roughly 4× the faces; double it and you get a quarter.
- pmp_iterations (default 10) - passes. More = more converged to the target length, slower. 10 is a good default; you rarely need more.
- pmp_use_projection (default true) - snap vertices back onto the input surface after each iteration. Leave it on; turning it off is how meshes drift.
Outputs: remeshed_mesh (TRIMESH) and info (STRING) with before/after counts.
Installing
ComfyUI Manager → GeometryPack, or:
cd ComfyUI/custom_nodes
git clone https://github.com/PozzettiAndrea/ComfyUI-GeometryPack.git
cd ComfyUI-GeometryPack
pip install -r requirements.txt --upgrade
python install.py
Restart after. PMP lives in the pack's isolated comfy-env environment built by install.py.
When to reach for it
Reach for uniform when predictability beats efficiency: texturing, because an even edge length means even UV density; subdivision, because subdiv surfaces hate skinny triangles; or as the "calm down this garbage mesh" step before something more opinionated. If you instead want triangles spent on detail - dense where it's curvy, sparse where it's flat - its sibling PMPAdaptive is the one, and PyMeshLab's isotropic is the same idea with a friendlier default. For pure evenness, though, this is the backend.
Troubleshooting
- Edge count not what you expected -
pmp_edge_lengthis relative to your mesh's scale, so a unit-scaled mesh and a 10×-scaled mesh need wildly different values. Match it to your units. - Mesh shrinking - projection got turned off, or the iterations are too few to converge. Re-enable projection.
- Slow on big meshes - drop
pmp_iterationsto 5; the extra passes buy less than you'd think. - Stale-workflow validation errors are the pack-wide gotcha - if the Remesh node throws on a saved graph, delete and re-add it, re-pick
pmp_uniform.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| trimesh | TRIMESH | — | |
| pmp_edge_length | FLOAT | 1.000.001–100 | Target edge length for uniform remeshing. |
| pmp_iterations | INT | 101–100 | Number of remeshing iterations. |
| pmp_use_projection | COMBO | true | Project vertices back onto the input surface after each iteration. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| remeshed_mesh | TRIMESH | — |
| info | STRING | — |