a01 — Concept-Match Candidate (candidate, not admitted)

The a01 mech's part drivers were forged in the wrong palette (solid construction-yellow) while the concept is gunmetal grey + rust-orange, grey-dominant. This candidate is a two-region CPU recolor of the clean rigged+animated a01 core (white→gunmetal, yellow→rust-orange), which matches the concept's colour story far better than either the original build or a GPU re-paint. It is a reviewable candidate for palette direction — not an admitted component-composed deliverable, and the head region still diverges from the concept.

overall match 0.782perceptual 0.908silhouette IoU 0.657backend clip-vit-large

v2 — assembly defect cleared (acceptance candidate) 2026-09-19

a01 component assembly: v1 with two floating hand-shell fragments (left) vs v2 defect cleared (right)

Left (v1): the component assembly had two floating "wispy spray" fragments beside the body — root-caused to the two component articulated-hand shells (a recovery-artifact source) bone-parented at the wrist bones; they did not fit the rest rig and floated outboard of the arms. Right (v2): the misfitting hand shells are dropped and the region falls back to the preserved rigged/animated core body's own gunmetal clawed hands (which also read closer to the concept's dark clawed hands). Fragments gone across all four canonical views (own-vision verified). Concept-match (CLIP, front vs concept) 0.716→0.725, silhouette IoU steady, no region regression. Fix lives in the assembler (assemble_a01_components.py --drop-components hand), not an in-place mesh edit — Blender re-export of the assembled glb explodes the bone-parented shells and is a verified dead-end. Still a review candidate (authored mating sockets, palette weathering toward rust-orange, and animation/runtime validation remain before freeze).

Palette — ACCEPTED path: codex grey-dominant driver + GPU paint 2026-09-19

a01 thorax re-painted grey-dominant gunmetal + rust-orange accents from a codex grey-dominant driver

The concept is grey-dominant gunmetal + rust-orange accents, not a solid accent colour. Codex (image_gen edit-mode) regenerated the a01 part drivers grey-dominant; re-painting the shape with a grey-dominant driver transfers correctly (thorax shown — gunmetal with rust-orange striping/weathering). This is the accepted palette path, superseding the whole-part CPU recolor below (which still read as a solid accent). Note: an earlier paint from a saturated rust-orange driver failed (yellow + blue) — the driver must be grey-dominant. Full-mech re-assembly (v4) is in progress; a mirrored-shell re-import bug (right side reverts to yellow) is being fixed before v4 is promoted.

Full-assembly grey-DOMINANT + PBR surface — v3 (passes the full-PBR gate)

Surface now passes the hard full-PBR gate (art-gen/aaa_surface_gate.py, exit 0): the v3 build was albedo-only (the flat/washed-out cause) — added a spatial metallic-roughness map derived from the albedo (exposed gunmetal → metallic/reflective; painted → dielectric) on all 12/12 materials, so metal now reflects the IBL environment instead of reading flat. Honest residual: reads a touch bright/light-chrome vs the concept's dark weathered gunmetal (a darken + higher-roughness pass is the next refinement); normal + AO maps are warnings (the ~147k shells have no separate high-poly to bake from). Renders below are under the king_tier_render ProceduralSky IBL.

a01 v3 full assembly, grey/white gunmetal, in-engine a01 v3 head close-up, grey gunmetal (no residual yellow) a01 v3 grey-dominant three-quarter view

v3 re-aligns the a01 palette to the concept's grey-dominant gunmetal (in-engine, king_tier_render). Pipeline: codex grey-dominant drivers → GPU paint → recolor_shell_palette.py (residual-yellow → rust, then a --desaturate pass pulling the warm panels to grey) → assembler metallic clamp (0.15; painted armour is near-dielectric, so full metallic bloomed warm texels to a chrome sheen) → base-body core desaturate (the last yellow source, on the chest-centre + thigh accents showing between shells). Construction-yellow is gone across ALL views incl. the head close-up (an earlier pass over-claimed this — the full-body front had hidden residual yellow; verified close-up now). CLIP concept-match is hue-insensitive (~0.72), so the metric can't score the palette; this is the user-directed accepted direction. Honest residual: reads a touch cleaner / less-weathered than the concept — the desaturation removed most rust-accent weathering; a light accent pass could restore it. Supersedes v2.

Palette fork — yellow vs rust-orange (superseded by the codex grey-rust path above)

a01 v2 yellow (left) vs v3 rust-orange CPU-recolor (right)

Left: v2 as committed (construction-yellow shells). Right (v3): a CPU texture-recolor of the shell base-colours (yellow→weathered rust-orange, gunmetal untouched) via art-gen/recolor_shell_palette.py + re-assembly — closer to the concept's rust-orange story. Measured concept-match is identical (0.725 vs 0.723; CLIP can't tell the hues apart), so this is a taste / art-direction fork, not a measured win. Pick a direction and the shoulder-cowl band (which shifted less than the torso) gets a harder pass. v3 held in scratch pending the call.

Palette method — why paint fails, recolor works

thorax: GPU paint result (left, wrong colours) vs CPU recolor (right, correct)

Left: re-painting the thorax with a correct rust-orange driver via Hunyuan3D-Paint → wrong: bright yellow armor + blue-tinted internals. Paint does not transfer a driver/concept palette. Right: the CPU texture recolor → correct rust-orange armor, gunmetal preserved. Palette must come from a correct driver or a CPU recolor, confirmed on real pixels.

Interactive candidate (rotate / zoom)

Loaded: a01_core_concept_web.glb (3.8 MB, KTX2, Godot-loadable, godot_compress.sh). Drag to orbit, scroll to zoom.

Method comparison — concept vs CPU recolor vs GPU paint

a01 concept vs CPU recolor vs GPU paint

Left: concept (grey + rust-orange). Centre: CPU recolor (rigged) — this candidate, palette matched. Right: GPU re-paint from the concept — Hunyuan3D-Paint does not transfer a specific concept palette, so it comes back yellow. Palette must come from correct drivers or a CPU recolor, not from paint.

Where the earlier build stood

a01 concept vs earlier white+yellow build

The earlier component build (right two panels) was white + bright yellow with a detached hand — rejected on palette and assembly. The recolor above supersedes it for colour direction.

Concept-match, per region

regionsilhouette IoUperceptualscore
head0.8550.8170.836 ← worst
shoulders0.8530.8490.851
torso1.0000.9250.962
arms0.9270.9170.922
legs0.9990.9260.962
feet0.9070.9320.919

Scored with art-gen/concept_match.py (candidate front render vs a01_coherent_fullbody.png). The silhouette IoU is partly depressed because the concept is a posed hero shot while the render is a rest pose. The head is the clearest remaining divergence and is the next correction target.