Model Fidelity — Full Pipeline

How a forged Void Horizon character becomes a clean, riggable, mo-cap-driven model: take a known-excellent open-source base (CC0, commercially usable), decompose it into parts, and apply our forged identity onto those parts — scaled to fit — so the mesh that actually deforms is a proven, animation-grade body, not the raw forge output. Every stage is measured, not eyeballed.

The pipeline, stage by stage

1

Source — a known-excellent base stable

A MakeHuman CC0 body (14,738 verts, uniform UV) plus a commercially-usable mo-cap library. The base is anatomically clean and rigs/retargets reliably — the properties the raw forge mesh lacks.

assets: MPFB2 v2.0.17 MakeHuman CC0 · mo-cap retarget sidecars
2

Decompose & map parts stable

The reference is split into parts (body, head, hands). Our forged geometry supplies identity (silhouette + texture); the CC0 golden mesh supplies the deforming body + skeleton. Parts are scaled to align the forged proportions onto the golden topology — identity is carried entirely by the texture, so one clean mesh deforms for everyone.

Path B — golden body (task-590)
3

Golden body + bulk/size stable

One shared golden mesh, morphed per character for stature and build (small/medium/large × lean→heavy) as a fast macro-morph — no re-forge, no GPU.

art-gen/golden_rig.py --bulk · bulk & height tuner →
4

Transplant the forged texture stable

The forged per-character skin is baked onto the golden body's UV atlas, so the proven mesh wears the character's identity.

art-gen/apply_texture.py · golden bake + verify
5

Better-resolution face — head-map verified · face

The hi-res forged head is cloned into the body atlas with a Poisson seamless-clone: boundary tone matches by construction, so the face-to-scalp seam disappears — and, decisively, the real eyes, brows, nose and lips are restored instead of the old moment-match's featureless pale mask with empty black eye-holes. Measured on ariel_sorin: seam tone-step ΔE 5.0 → 2.5 (halved), facial-feature pixels up 4.3×. (The pale-face and hair-through-scalp code paths didn't trigger on this character — no blowout existed to pull down — so those are situational, not the headline win.)

head map before vs after: old washed-out pale face vs new with restored eyes/nose/lips
Head map + on-model, OLD (moment-match) vs NEW (Poisson clone): the featureless pale mask + black eye-holes becomes a real face. Seam ΔE 5.0→2.5.
art-gen/uv_headmap.py (cv2 seamless-clone) — committed & verified (face-fidelity)
6

Eyes shipped cast-wide

Four measured bugs fixed — ball-center, oversized eyeballs, bug-eyed flat faces (per-character eyelid-surface recession), and cache staleness — plus per-character/species iris colors.

art-gen/eye_refine.py · eye refinement study →
7

Rig + mo-cap retarget ⚠ skin weights failing gate

The golden skeleton drives the mesh; mo-cap clips retarget onto it via per-clip sidecars, producing the required animation set (23 humanoid motions: locomotion, melee, ranged, reactions).

163-bone golden rig · *_mocap.retarget.json · processed cast → · motion lab — 23 required motions live →
8

Measure — the acceptance gate measuring

"Perfected" is not a vibe. Every clip is run through the fixed surface-deformation harness — per-region stretch, shear, inversion, and Green strain, a pass/fail VERDICT gate, and a shred_index. The rest pose self-tests to ~1.0 to prove the harness is calibrated. A model ships only when it clears the gate under animation.

art-gen/surface_metrics.py · deformation measurements →

Live measurements — current run

Measured just now with the fixed harness. The rest-pose self-test reads a clean 1.000 (0 strain, 0 flips) — the harness is calibrated, so every number below is real deformation, not an artifact. Result: 0 of 9 clips clear the gate. The eyes and face texture are solved; the skin weights are not — the golden body tears at the shoulder and self-intersects at the pelvis under motion. This is the next fix, and it is measured, not assumed.

measurementresult
Rest-pose self-test (calibration, must ≈ 1.0)1.000 — clean (0 strain, 0 flips)
Clips passing the deformation gate (p95 strain ≤ 0.50)0 / 9
Worst region across all clipsshoulder_L (deltoid) — strain p95 1.914 on dodge, 3.8× gate; + inverted tris & self-int
2nd hot spotpelvis / inner-thigh — self-intersects on every locomotion clip
shred_index range (idle → run)2.0% → 16.6% (scales with motion intensity)
Head-map seam ΔE — before → after (ariel_sorin)5.0 → 2.5 (halved); facial features +4.3×

Next: reweight / corrective-fix the shoulder deltoid, then the pelvis/inner-thigh, and re-run this gate until clips pass. Fix path uses corrective_blendshape.py / blender_corrective_rig.py.

Composition pipeline — data-driven mechs & walkers new · live in gameplay

The humanoid pipeline above proved the lesson: don't rig a raw forge — it self-intersects and won't deform. The mech/walker track applies the same lesson a different way. Instead of one baked mesh, a character is a recipe: a known-good CC0 golden body + grafted identity parts + a material preset + equipment slots, which the engine assembles at load time. This is now live in gameplay — the player avatar and the body-picker read the manifest and compose the model, not a pre-baked glb.

The golden-body family

humanoid

MakeHuman (CC0)

14,738-vert body, uniform UV, 163-bone rig. Skin/graft a forged identity onto it — the stages above.

mech / walker

Quaternius (CC0)

Animated Mech Pack — Stan (biped), Mike (heavy), George (chicken-walker). 43-bone biped rig, 18+ baked clips.

creature

creature-composition

The same recipe for non-humanoid frames — graft signature shells onto a riggable creature base.

Each is a known-good, riggable base we skin identity onto — the opposite of a raw forge that won't rig.

A

Manifest — the recipe data-driven

Per-character record: base_model + composed_parts (id → bone mount + xform) + material_preset + equipment_slots. The composition lanes emit this manifest instead of baking a glb — mount_rigid_auto derives each part's mount & transform.

species_data.json composition block · gear_compose.mount_rigid_auto
B

Assembler — engine builds the node tree runtime

On load the Godot assembler instances the base_model (its Skeleton3D + baked anims), BoneAttachment3Ds each grafted part at its mount (mirrored for .L/.R), applies the material preset to semantic slots, and fills equipment slots from the loadout. One assembler drives NPCs, the player, and the customizer preview — same code, same data.

Godot runtime composer · rigid bone-mount (identity + gear), skinned garments to skeleton
C

In-game live: avatar + body picker

The composed mech is assembled at runtime in gameplay — player avatar and the body picker read the recipe. Made editable, the same manifest is the character customizer (mix & match base + parts + colors + equipment on a live render doll).

player avatar · body picker · manifest → customizer

a01 — mis-forged humanoid → composed mech

a01 is canonically a salvage-mech, but it had been mis-forged onto the humanoid body — so its forged mech-face smeared across a human head (below left). Redone as a composed mech: Quaternius Mike base + grafted shoulder domes / chest plate / claw hands + a salvage recolor. 🤖 How close can composition alone get to the concept? — the convergence study → (six iterations toward the concept art, with the method's measured limits).

✕ before — mis-forged
a01 in the character browser: a forged mech texture smeared over a humanoid head, garbled yellow forehead and empty face
The salvage-mech forged onto a humanoid body: a garbled face, no clean silhouette, won't rig as a mech.
✓ after — composed mech
a01 rebuilt as a composed mech: Quaternius Mike golden body with grafted domes, chest plate and claws, salvage recolor
Mike golden body + grafted domes/chest/claws + salvage recolor — a real mech silhouette that rides the rig.
a01 composition steps: concept art, prior flat-recolor PoC, then composed idle/walk/run/punch/kick riding the rig, plus a cannon graft
Composition, step by step: concept art (identity target) → prior flat-recolor PoC → grafted domes/claws onto Mike → the grafts ride every baked clip (idle / walk / run / punch / kick), and a cannon grafts onto the claw for Shoot.
a01 composed mech wielding a cannon in idle, walk and shoot poses, with a rocket pack augment
Weapons & augments are the same composition tech, one layer up: a01 wields a cannon (grip → hand bone) and rides a rocket pack — attached last, riding the animations, never baked in.
three composed walkers: r01 navy/yellow combat bot on Mike, r02 white/teal medic on Stan, spurs brass drone on George
The walker lineup — same golden bases, different recipes: r01 navy/steel combat (Mike), r02 off-white + teal medic (Stan), spurs brass/gold scout drone (George chicken-walker). Recolor + parts only.
Quaternius Animated Mech Pack CC0 validation: Stan, Mike, George, Leela mech bases with tri/bone counts and a shared walk animation
The CC0 golden mech bases we compose onto — Stan (6,190 tri / 43 bones), Mike (heavy), George (chicken-walker), Leela (armless, reject) — sharing a universal biped rig and 18+ baked clips.
Update (Sep 5) — composition superseded for r01 / r02 / spurs. The Quaternius-composed walker lineup above (r01 on Mike, r02 on Stan, spurs on George) has been replaced by the coherent single-mesh forge below — grafting forged fragments onto a low-poly Quaternius base read as fragmented up close; a full coherent forged mesh does not. See the current versions in the next section.

Hard-surface single-mesh forge — the mech-overhaul new · task-748

The composition method above still stands for the golden-body humanoid/organic track (skin identity onto a proven deforming body). For rigid hard-surface combat robots it hit a ceiling: bolting forged armor fragments onto a low-poly Quaternius base reads as a fragmented, low-detail bot up close. The fix is the same lesson applied differently — forge the WHOLE robot as one coherent high-poly textured mesh (the welded plates ARE the geometry, not separate grafted parts), then rig it onto a clean biped skeleton with rigid per-plate skinning (no organic deformation needed for rigid armor).

1

Concept driver (provider-selected) 1-2 candidates, no sweep

A single clean plain-background full-body A-pose concept per character — the armor plating IS baked into the driver image (the deliberate exception to the base-body rule: a mech's armor is the model). Codex/GPT agents use the directly exposed OpenAI image-generation tool or gpt-image-2 API; agy is a secondary remote provider, while FLUX/SD3.5/SDXL remain local fallbacks. Every cached driver records provider, image model, prompt, input hashes, output hash, and selection.

2

Image → 3D, image-driven no humanoid rig

Hunyuan3D-2 shape (octree 512) → Hunyuan3D-Paint → normalize (height 1.8, feet at 0) → one coherent textured master mesh, ~1-1.3M source tris.

art-gen/forge_character.sh · HY_OCTREE=512
3

Repair + rig static accepted · motion gated

Before the unchanged decimation collapse, identical exported positions are reconnected. That fixes the export-split/decimation fractures on the verified non-Warhound static candidates without distance welding, smoothing, or deleting geometry. The old custom 17-bone animation still shears at the thighs; the richer Rigify path must clear sole contact, posture, transition, and export-fidelity gates before it replaces any animated model.

exact-position reconnect → COLLAPSE · static surface ≠ accepted animation
4

Store + promote binaries LFS + R2

Forged sources and game-loaded GLBs are versioned through the private R2-backed Git LFS endpoint. A curated web model is copied to public R2 by scripts/publish-web-models.ts and served through the same-origin /models proxy. Heavy review media also goes to public R2; only small thumbnails remain ordinary Pages Git blobs.

a01 — three generations of the same character

a01 shows the whole arc: mis-forged onto the humanoid body (Aug 31, above) → composed onto a Quaternius base (Aug 31, also now superseded) → this coherent forge (Sep 5, current). Clean, no seam between "parts" because there are no parts — one mesh.

a01 reforged as one coherent hard-surface mesh: gunmetal-grey and rust-orange salvage mech, front, rear, and side views, clean silhouette with no visible part seams
a01, current: one coherent forged mesh (front / rear / side). No grafted-part seams — the armor plates are the geometry.

r01 — the walker-lineup character, redone

superseded — composed
r01 as a composed low-poly combat bot on a Quaternius Mike base, navy and yellow
Aug 31: r01 as a Quaternius-Mike composition (navy/yellow) — the walker-lineup shot above.
current — coherent forge
r01 reforged as one coherent hard-surface heavy combat robot, chunky gunmetal-grey armor plates with amber accents, front, rear, side
Sep 5: r01 as one coherent hard-surface mesh — chunkier, higher-detail armor plates.
historical r01 custom-rig walk cycle shown across five frames
Historical r01 custom-rig walk clip, 5 frames. This contact sheet predates the current Rigify work and does not pass the motion bar: thigh shear and the weak stride still require replacement backed by deformation and contact measurements.

More of the 23-strong coherent cast

23 characters have gone through this forge so far: a01, a02, aegis_7, android_king, aura_net, chronosync, daemon_enforcer, dharma_unit_7, doc_holliday_7, echo_chrome, nexus_prime, null_pointer, r01, r02_service_bot, rev9_preacher, shadow_null_bruiser, shadow_signal_jammer, spurs_scout_drone, synthetix_primus, the_synthetic_analyst, vex_7, vite_01, zig_combat_android.

aegis_7 coherent hard-surface jaeger-style mech, dark grey plating with teal accents, front, rear, side
aegis_7 — a jaeger-style heavy frame, same method: one coherent mesh, rigid-skinned.
historical shadow_null_bruiser render before the cast-wide albedo despeckle proof
shadow_null_bruiser — this historical source render shows the original paint noise. The cast-wide med5 albedo despeckle proof removes the pinpricks while preserving panel lines and accents; the public model still needs promotion from that repaired texture path.
Current acceptance gaps:

Part of the model-fidelity effort. Pushed to the preview branch for on-the-go review — steer any stage and it re-runs. · 🤖 a01 convergence study → · ← back to console