mesh-forge

One photo in — a rigged, textured, animatable 3D character out. All of it runs locally on the Mac mini, no API needed.

The character

the finished character
Round two. The shape now comes from the 3.0B Hunyuan3D-DiT-v2-1 model at a 384³ voxel field, conditioned on a tight crop of the subject — 253k faces, textured by projecting the photo. Expression keys and a 706-bone Rigify skeleton ride on top.

The rig

the rig over the body
The Rigify skeleton over the x-rayed body. The auto-fit stands the metarig on the mesh's feet and aims the arms at its hands; the arm chains still hover above her arms — that is now the weakest part of the pipeline, not the mesh.

The face

expressions: neutral, jaw open, smile, brows up, blink
Left to right: neutral, jawOpen, mouthSmile + cheekPuff, brows up, blink — driven in real time from video via forge speak. Rebuilding these after the mesh upgrade also flushed out a real bug: the face detector's landmark-to-photo mapping multiplied by the upscaled crop size instead of the original crop, planting the "face" on her chest — in the first build the shape keys had been animating the blouse. Fixed; the keys now move ~7,000 face vertices and nothing else.

What changed since the first build

The first mesh (Hunyuan3D-2, 1.1B shape model, 256³ voxels) was pillow-soft: merged legs, mitten hands, no facial detail. Three things fixed the foundation:

1. The 3.0B v2-1 shape model — a real mouth, a real nose, limb separation and crisper cloth folds wherever the budget went;
2. Octree 384 instead of 256 — 2.3× the faces, and the head detail survives;
3. Tight-crop conditioning — the subject fills the conditioning frame instead of a padded canvas.

How the texture works

Hunyuan3D's own paint stage needs a CUDA rasteriser, so it can't run on Apple silicon. Instead the pipeline projects the photo onto the mesh: every vertex is mapped through a front orthographic camera aligned with the subject in the image, and the photo itself is used as the texture — no atlas, no resampling, so the face keeps every pixel it had. The back of the mesh inherits the front's colours; that is the honest limit of a single-view reconstruction.

State of play

StageStatus
Cutoutworking (rembg)
Image → meshworking — Hunyuan3D v2-1 (3.0B) local at octree 384; TripoSR for drafts
Textureworking — photo projection
Body rigbody fit good; arm chains mid-air — needs a per-limb aim pass
Face rigworking — 19 ARKit keys on the real face, driven by forge speak
Hosted textured runsheld off for now per your call — fal top-up whenever you want one