PolyBuilder
A desktop app that turns messy AI-generated 3D models into light, clean quad meshes with artist-like topology, bakes their textures across, and prepares them for 3D printing.
Overview
CONTEXTI started PolyBuilder to solve my own problem: models generated in ComfyUI look good but are dense, messy triangle soup — useless in a game and hard to print. PolyBuilder rebuilds them as light, clean quad meshes with topology as close as possible to what an artist would make by hand, then carries the textures across by baking. It grew into a full tool with four benches — Remesh, UV, Bake and Print — and it is the biggest and hardest thing I have built: four months of work, a native geometry engine written from scratch, and a desktop app around it. Part of it already works as a Blender add-on and a ComfyUI node; the app is coming to Windows, macOS and Linux. I hope it will soon be useful to a lot of artists — and to hobbyists with 3D printers.
Technical notes
DEPTHThe engine is C++20, built with CMake. Remesh: seam welding, cross fields, a cut graph that opens every handle, mixed-integer quadrangulation and quad tracing, with anatomy-aware loops around eyes, mouth and limbs, adaptive density and symmetry. Bake: normal, base colour, roughness, metallic, ambient occlusion, height, curvature, thickness, ID, direction, gradient and more, traced on the GPU through five backends — CUDA, OptiX, DirectX Raytracing, Vulkan and Metal — with a CPU fallback. It takes several high-poly files at once and pairs parts by your own low/high suffixes; supports texture sets and UDIMs; lets you paint the cage and skew right in the viewport; and re-bakes a single map on demand, or by itself when a source file changes. Ambient occlusion can see only its own part, add a ground plane, and set a minimum distance and spread angle; the ID map takes its colour from materials, vertex colours, names or parts; curvature can come from the normal map. Output in EXR 32-bit, TGA and more, with your own channel-packing presets and tangent-space presets for the engine you target. Print: cuts a model into parts with pin connectors and closed cut faces, lays them on the plate for a chosen printer, grows tree supports and exports 3MF and STL for the slicer. The interface is React and TypeScript with a Three.js viewport — render modes, texture channels, UV islands, side-by-side compare — served by the engine and wrapped in a Tauri desktop shell. It carries the same accessibility settings as this site, and is covered by C++ tests, Vitest and Playwright.
Outcome
RESULTIn development. Parts of it already run as a Blender add-on and a ComfyUI node; the desktop app is on its way to Windows, macOS and Linux.
Gallery
MEDIARemesh — a dense triangulated input beside the clean quad mesh, with its UV islands
UV — a model re-unwrapped into islands, checked with a numbered checker, with its seams and stretch
Bake — maps chosen per channel, baked with GPU ray tracing, previewed on the low-poly model
Export — a baked low-poly goblin with its quad wireframe, and ready packs for Unreal, Unity, Godot and 3D printing
Print — a model cut into parts with pin connectors
Print — parts laid on the plate with tree supports grown, ready for the slicer
Working on something?
Open to frontend, full-stack and game-dev roles — hybrid near Cardiff or remote.