One submesh per material group
Every usemtl group arrives as its own paintable part with its own layer stack and its own texture from the MTL, matched by name.
The simplest 3D file there is, read by a native reader built for speed, with quads kept all the way through.
OBJ files open through a native reader I wrote for it, so even a scan with millions of triangles loads in moments. Each usemtl group becomes its own paintable submesh with the material the .mtl names for it, and the face sizes the file carries are remembered so OBJ export writes quads as quads.
Every usemtl group arrives as its own paintable part with its own layer stack and its own texture from the MTL, matched by name.
The importer records each face's size, and every OBJ door out of the app rebuilds the polygons the way they came in. Your clean quad model stays a clean quad model.
Photogrammetry scans, Meshy and Tripo exports, and sculpts with no UVs at all open fine. Rebuild UVs gives them a layout, then paint.
Export writes OBJ plus MTL with the painted textures, rebuilt or combined UV maps, true-scale sizing, and orientation presets for Roblox, Unity, Unreal, and Polytoria.
Drag it on. The .mtl and its textures are read from beside the file.
Layers, masks, symmetry, the clone stamp, Mecha Lines, decals, and the full PBR channel set, painted straight on the model.
File > Export, OBJ in the Mesh row. Quads, UVs, MTL, and PNG textures land together.
Buying unlocks watermark-free exports.