Intelligent retopology in Rust. One binary, no Python, no CUDA.
Quick start · What it does · API · Blender · Roadmap
Drop a high poly GLB in. Get a clean low poly out, with the texture reprojected onto it and no visible seam.
- Field-aligned quad remeshing. A Rust port of Instant Field-Aligned Meshes (Jakob et al., SIGGRAPH Asia 2015, BSD 3-Clause). Sharp edges stay edge loops, the silhouette does not drift.
- Rebuilding and quads. Isotropic remeshing, then triangles paired into quads. On a 406k model that is 7,256 triangles in 1.2 seconds with 86 percent quad coverage. glTF has no quads, so the file stays triangles and the pairing travels alongside as an edge mask the viewer draws.
- Texture reprojection. A fresh UV atlas and cage projection back onto the high poly. Five maps: base colour with its alpha, metallic and roughness, tangent space normal, emissive, ambient occlusion. It runs on its own, so changing a map size costs a bake rather than a whole retopology.
- Clean up. Hole filling and tangential relax with reprojection, both optional stages of the same pipeline.
- Its own viewer. Hand written WebGL2 in a native window, with real metallic roughness shading. Shaded, textured, unlit, normals, UV, x-ray, wireframe, and a deviation heatmap that paints how far the surface actually moved. Undo and redo across attempts. English and French, one button to switch. Under 900 pixels the toolbar becomes a labelled sheet rather than a scrolling strip, so the window is usable from a phone width upward.
The application is a single executable with a native window and no open port: the webview talks to the same axum router through a registered URI scheme. That router is also what the optional HTTP server exposes, so Blender, Maya or Houdini drive exactly the same code.
The desktop application, a real window and no browser:
cargo run --release -p mantis-bureauDrop a .glb on it, or pass one on the command line to open with it already
loaded. Dropping a file onto the executable in a file manager does the same.
Headless, for batch work:
cargo run --release -- remesh input.glb -o output.glb --faces 8000The HTTP server exists only for Blender and other host applications, and is off unless you ask for it:
cargo run --release -- serve --port 7420Usable. Retopology, clean up and texture reprojection all work end to end, from the window, the API or the command line.
Not built yet, and not pretended otherwise: polygroups, the field-aligned quad remesher, painted guide curves, and the Blender add-on. See ROADMAP.md, which also records the known weaknesses rather than leaving them to be discovered.
POST /api/v1/jobs raw GLB body, params in the query string
GET /api/v1/jobs/:id {"ok":true,"stage":"decimate","pct":63}
GET /api/v1/jobs/:id/result.glb the result
POST /api/v1/bake reproject onto a mesh without touching topology
GET /api/v1/health
WS /ws/progress live progress events
Plain HTTP and JSON. No MCP, no custom protocol, ten lines to drive it from any DCC.
Not written yet. The API above is what it will use: plain HTTP and JSON, no MCP and no custom protocol, so driving Mantis from Blender, Maya or Houdini is ten lines of whatever scripting that host speaks. Until the add-on exists, the CLI does the same job from a shell.
| Content | State |
|---|---|
| Mesh core, BVH, glTF in and out, QEM decimation, native shell, i18n | done |
| Hole filling, relax with reprojection, isotropic remeshing, quad pairing | done |
| UV atlas and texture reprojection, five maps, baking on its own | done |
| WebGL2 viewer with metallic roughness shading, and the interface | done |
| Headless command line | done |
| Real-time polygroups: SDF, concavity, merge tree, sliders, per group export | planned |
| Field-aligned quad remeshing: 4-RoSy and 4-PoSy fields, extraction | planned |
| Painted guide curves, density brush, per vertex cage | planned |
| Blender add-on | planned |
| Symmetry, OBJ export, material extension maps | planned |
Mantis is MIT.