npcs/PIPE_CHARACTER_MODELS_2026-08-06.md
CANON SUBORDINATION — this document is PROPOSAL-TIER: it serves canon and never outranks it.
Authority order: docs/DOC_MAP.md §0. If this document disagrees with canon, CANON WINS and this
document is the defect. Nothing here is applied until the director ratifies it. Under the
pipe-dossiers-bind law it becomes lane law for the CHARACTER class if ratified, and rulings
land here as in-place supersessions.
Research date 2026-08-06. Every model, licence and figure below is either VERIFIED (fetched
live this pass, URL inline) or MEASURED (run on this box, record on disk) or LANE-REPORTED
(returned by one of four parallel research lanes and marked as such, with its corroboration named).
Licence-read-before-first-GPU-hour is honoured: the one model this pass actually ran has its licence
pinned at docs/licence_records/hunyuan3d_2_1/LICENSE (sha256 b79ac5e11ce063b6c6570dbe9686a45a03ba08bd248aa6aa82fb342a23a81c0c).
Dispatched by Josh, 2026-08-06, verbatim: *"You should probably look at more open source models
or the Nvidia ones or anything else August 2026 or upcoming because what you've shown is trash and
does not match photorealistic concept art in the slightest."*
---
DERIVED FROM:
- build/art/characters/CHAR_0001_AGE_BAND_FLOOR_JOSH_20260806.png — the ruled beauty floor
(seven age panels, 7→24; the age-7 panel is this survey's test subject)
- build/art/characters/CHAR_0001_CANON_SHEET.md §2 (age band, the internal 7→13 clock),
§5 L105 (the swept-back pointed ear as the ONE morphological elven marker), §6 L144
(this mesh is the DEFAULT PRESET of a customizable body, not a fixed hero), §8 L192-198
(poly budget routes to the Creatures line, LOD0 24k/60k/120k)
- build/3d/characters/CHAR_0001_HEAD_AUTHORED_RECORD.json /trigger, /route_taken,
/honest_tier — the incumbent's own verdict on itself
- build/3d/characters/CHAR_0001_FACE_PICK.json — pick_conditioning PLT_FACE_G2_SI_PROFILE_6,
conditioning_sha256 aac1d51f47daffe393d997e7325ee2b143e3a9099a313664f9f7ad28e4b3dca8
- build/3d/V2_ROUTING_RATIFIED.json routing.garmented_humanoid_body — status HOLD,
"NEITHER single-pass arm — the two-pass composed body remains the route"
- docs/proposals/METAHUMAN_ROUTE_EVIDENCE.md §3 — the child band measured unreachable
(no age axis; all 18 archetypes adult), §5 — the ear is authored geometry on every route
- docs/pipeline_review/tech_research/PIPE_3D_2026-07-29.md §1 (the licence law: a licence
restricting OUTPUT/USE is a ship-blocker), §10 (the ratified routing table this extends)
- _source/03_Tier_3_Characters/T3_Core_Characters [ACTIVE v1.0] L59 (elf, canon per CVD §9.1),
L563 (the Elven King's silver-white hair) — read through the canon sheet's citations
NOT DERIVED (authored judgment, and why it had no canon home):
- The class argument in §3.1 (that a single implicit iso-surface is the wrong OUTPUT SHAPE for
a hero face) — canon specifies the character, never the generator architecture. It is an
engineering finding, and it is grounded in the incumbent's own /trigger line plus this
pass's measured bench rather than asserted.
- The three-layer routing recommendation in §10 — no canon node routes the character class;
V2_ROUTING_RATIFIED leaves it explicitly on HOLD, which is the gap this document fills.
---
1. The plates are not the problem, and the record proves it. The face-route pivot generated 40
plates at 1344² and picked PLT_FACE_G2_SI_PROFILE_6. Looked at directly, the finalists are
photoreal at the floor's register — child skin with real subsurface in the ear rim, individual
hair strands, eye moisture, correct child facial proportion. **The 2D half of this pipeline
already clears the bar.** Everything Josh called trash happens downstream of a good plate.
2. The strongest open-weight alternative does NOT beat our ratified TripoSG route — measured.
Hunyuan3D-2.1 on the byte-identical conditioning image, rendered on the identical clay
instrument, loses hair decisively (flat intersecting sheets against TripoSG's strand geometry
with parting and flyaways) and does not clearly win the face. TripoSG holds. §2 — including
the methodological correction that produced this verdict, because the first read said the opposite.
3. And it could not have shipped anyway, on the licence's own words. Tencent's licence §5(c)
forbids distributing the model's Output outside a Territory that excludes the EU, UK and South
Korea. That is an explicit, triggered prohibition naming Output — not a conservative reading. So
the Hunyuan line is out twice over, on quality and on licence. §9.
4. The real unlock is not a generator at all. Two Apache-2.0 parametric models landed in the last
nine months that retire the licence traps (SMPL-X, FLAME) which have blocked this class of work
for years — Anny (a full-body model whose parameter space spans *"infants to elders"*, which
is precisely the child band MetaHuman was measured unable to reach) and Google GNM Head
(published 2026-07-28, nine days ago — 253 identity + 383 expression parameters, quad UVs,
eyes/teeth/tongue). Neither generates from an image; both give clean, riggable, commercially-clean
topology, which is the thing no generator in this survey produces.
The one-line answer to Josh's question: the survey looked, and **no surveyed image-to-3D model
beats the geometry route we already run.** The thing standing between us and the floor sheet is not
the generator's quality — it is that *any* such generator emits a single fused implicit surface,
while a hero face needs separated, riggable, animatable parts: a deforming skull, an eye aperture
with a refractive cornea, a mouth bag, and hair as a groom. §3.1. That is a different class of
tool, and §7 found that the licences on that class inverted in our favour this year.
---
The floor is CHAR_0001_AGE_BAND_FLOOR_JOSH_20260806.png — seven panels, ages 7 to 24, one
continuous identity, painterly-photoreal. The test subject for this survey is its age-7 panel.
**The incumbent was not a model choice that went wrong — it was already a retreat, and its record
says so.** CHAR_0001_HEAD_AUTHORED_RECORD.json:
/trigger — *"the landed CHAR_0001 head was an image-to-3D completion wearing a two-plateprojection — judged unpolishable because a projection has nothing under it to polish."*
/route_taken — *"FALLBACK (authored geometry through the Blender/numpy chain + hand-authored PBR/honest_tier — *"Not FF7R-grade at cinematic close-up: there is no FACS rig, notexture-synthesis skin stack, and no strand groom."*
So the image-to-3D route for this head was tried, judged unpolishable, and abandoned before Josh
saw anything. What he judged is the authored fallback, whose own record concedes three named
absences. Those three absences are the correct axes for this survey, and they are what §10 routes:
| The incumbent's own named gap | What closes it |
|---|---|
| no FACS rig | template topology with blendshapes (GNM Head / MetaHuman / ICT-FaceKit) |
| no texture-synthesis skin stack | §6 — and the honest finding there is that no mesh texturer is skin-evidenced |
| no strand groom | a groom system; never an image-to-3D model (§3.1) |
**Concurrently, the face-pivot lane re-ran the image-to-3D route on a properly picked plate and it
worked far better than the abandoned attempt** (landed 43c9a7db): TripoSG on
CHAR_0001_FACE_cond.png, judged ABOVE the authored incumbent on every blocking axis and **BELOW
the floor, with the gap in materials and hair rather than the face**
[CHAR_0001_FACE_PIVOT_RECORD.json /VERDICT_vs_the_incumbent, /VERDICT_vs_the_floor]. **That
candidate, not the authored head, is the incumbent this survey benches against** (§2) — surveying
against a route its own lane had already superseded would have measured nothing.
V2_ROUTING_RATIFIED.json already leaves this class open: garmented_humanoid_body status
HOLD, geometry *"NEITHER single-pass arm — the two-pass composed body remains the route"*, and
the texture row *"ADOPTED ON A TIE (n=1) — the one class the texture route did not move."* This
document is the evidence for closing that HOLD.
---
Method. The strongest open-weight textured image-to-3D model (Hunyuan3D-2.1) was run on the
byte-identical conditioning image the incumbent consumed — CHAR_0001_FACE_cond.png, sha256
aac1d51f47daffe393d997e7325ee2b143e3a9099a313664f9f7ad28e4b3dca8, asserted in the bench script and
recorded in its output. Only the geometry model varies.
Record: build/3d/bench/HY21_FACE_BENCH_RECORD.json. Sheet:
build/3d/bench/BENCH_HY21_vs_TRIPOSG_20260806.jpg. Tools: build/3d/bench/{hy21_shape.py,bl_clay.py},
working copies under D:/assetgen/bench/. **This lane writes only under build/3d/bench/ and
D:/assetgen/bench/** — build/art/characters/face_evidence/ and build/3d/characters/ belong to
the face-pivot lane and are read-only here.
| quantity | measured |
|---|---|
| generation | 26.41 s (+30.0 s one-time pipeline load) |
| peak VRAM | 7.63 GiB allocated / 8.41 GiB reserved — shares a 32 GiB card comfortably |
| mesh | 1,040,922 v / 2,082,468 f, not watertight |
| matting | 0.4988 of frame transparent (positive-controlled, see below) |
Comparison target. The right incumbent is not the authored head — it is the face-pivot lane's
TripoSG candidate (landed 43c9a7db), generated from the *same* conditioning image at 25.0 s /
6.40 GiB / 2,408,700 raw faces [CHAR_0001_FACE_PIVOT_RECORD.json /geometry], which that lane's own
cold judge scored **ABOVE the authored incumbent, BELOW the floor, with the gap in materials and hair
rather than the face.** So the question this bench answers is precisely: *does the strongest
open-weight alternative beat TripoSG?*
THE VERDICT: NO. TripoSG holds.
flyaways (2,558 separate strand bodies). Hunyuan3D-2.1 resolves hair as **flat intersecting
sheets** — a torn-cardboard read that is harder to salvage than strands, and unusable as a groom
source.
TripoSG's face is well-formed and its pointed ear is markedly cleaner — a correct helix and
taper, against the candidate's thin flattened ear. Given the canon sheet makes that ear the ONE
morphological elven marker [CHAR_0001_CANON_SHEET.md L105], that is the axis that matters most,
and it goes to the incumbent.
surface, no eyeball as a separate body, no eye aperture, and a ~2 M-triangle marching-cubes shell
with no edge loops — unriggable for facial animation without full retopology, against a 24 k LOD0
budget. This is the class finding of §3.1, reproduced on our own asset.
Recorded in full because it would otherwise have shipped as a false result, and because it is the
cheapest mistake in this whole survey to repeat.
The first comparison put my Workbench cavity-shaded clay render of Hunyuan3D-2.1 beside the pivot
lane's own turnaround of TripoSG — a flat, bright, low-contrast render made by a different script
for a different purpose. Cavity shading exaggerates fine relief; flat lighting suppresses it. On that
pairing the candidate appeared to win the face comfortably, and this document's first draft said so.
**Re-rendering TripoSG's raw GLB through the identical bl_clay.py at the identical camera rule
reversed the reading.** Same conclusion the ratified table already reached for a different arm: *"a
comparison rendered at a different light is not a comparison"* [bl_face_pivot_portraits.py
docstring]. The rule this bench adds: **an A/B is only an A/B when BOTH arms are re-rendered by the
instrument doing the comparing** — inheriting one arm's frames from another lane's evidence directory
is not a shortcut, it is a confound.
Two further bench defects caught, kept because both are easy to repeat:
The first run reconstructed the flat grey backdrop as a slab and carved the face into it as relief.
That is a bench-operator defect, not a model verdict, and it would have shipped as a spectacular
false negative. The script now runs the repo's own BackgroundRemover and asserts the result:
it refuses to proceed below 5 % transparent area. This is the same class as the ratified table's
arm-f mechanism — *"i2mv INHERITS THE PLATE'S STAGING… a scene cannot be reconstructed as one
object."*
bl_ortho_turnaround --flatstrips every lighting term by design, so raw geometry renders white-on-white and shows nothing.
A clay read needs Workbench with cavity shading (D:/assetgen/bench/bl_clay.py). Using the
coverage instrument for a form question produced four blank frames that looked like a broken mesh.
Honest tier: SINGLE-CELL, ONE MODEL, ONE SEED, SIGHTED. n=1 at seed 42, judged by eye and not
blind. The measured judge-noise floor for this project's blind sheets is 1.125 mean absolute
axis-score change (V2_ROUTING_RATIFIED.json texture_route_teeth.noise_floor_basis). This bench is
a LOOK, not a scored arm, and it is enrolled in no blind join. **It is sufficient to refuse a swap
and insufficient to ratify one** — which is the direction the result happens to point, so no claim
here rests on more than the evidence carries. The hair verdict is the robust half (a categorical
difference, sheets vs strands, visible at any shading); the face verdict is the soft half and is
reported as "no clear win" rather than as a measured loss.
---
No open-weight general 3D generator's own gallery shows a photoreal human face. Verified across
TRELLIS.2 (gears, flowers, translucent materials), Pixal3D (architecture and objects), Step1X-3D,
LATO.2, AniGen, Hunyuan3D-2.1 — and independently across the native-mesh field (MeshAnything V2,
DeepMesh, QuadLink, Mesh-Pro, SATO), whose evaluation sets are Objaverse, ShapeNet, Thingi10K and
Toys4k — literally toys. That silence is the finding, not an absence of evidence.
The structural reason, corroborated by this pass's own bench: these models emit **one implicit
iso-surface**. A hero face needs a skull that deforms, eyeballs that rotate, a mouth bag, lids that
blink, and hair that is a groom. One fused surface cannot become those by post-processing. **The
poly budget compounds it:** the canon sheet routes this asset to the Creatures line at LOD0 24k
triangles [CHAR_0001_CANON_SHEET.md L192-198]; every candidate here emits 1–2 M.
And the native-mesh track cannot rescue it. Face caps: MeshAnything 800, MeshAnything V2 **1,600
hard**, EdgeRunner 4,000, LATO.2 5,000 verts — against the ~24 k a head needs. Only DeepMesh (30 k)
clears it on a permissive licence; MeshAnything/V2/FastMesh are S-Lab non-commercial, EdgeRunner
is NVIDIA non-commercial, MeshFlow is FAIR Noncommercial, PolyGen was never opened.
Amended 2026-08-08 by the RC4 second reader, and the class finding SURVIVES the challenge. A
character-specific sub-field does exist and was missed here — DreamCharacter-1 (arXiv 2607.07817,
ByteDance, 2026-07-08) publishes a character-only geometry table, and StdGEN separates body,
clothes and hair as distinct components. But it does not overturn the line above, for a reason
RC4 conceded in its own counterweight: not one paper or gallery in either sweep shows a photoreal
human face. DreamCharacter-1's unified test set is the PAniC-3D AnimeRecon benchmark — "Stylized
Single-View 3D Reconstruction From Portraits of Anime Characters", CVPR 2023, built from 11.2k
VRoid models and 1k VTuber portrait illustrations — and its metrics are ULIP and Uni3D embedding
similarity, not facial identity. So the character sub-field measures stylized character
reconstruction, which is a different axis from the one Josh graded us on. The correct amendment is
narrower than the one proposed: the silence is not that nobody generates characters, it is that
nobody publishes a photoreal human face, and the benchmark that scores characters scores anime
ones with an embedding metric. A photoreal child face remains unevidenced field-wide as of
August 2026.
| Candidate | I/O | Face evidence | Licence (face value) | HW fit | Maturity |
|---|---|---|---|---|---|
| TripoSG *(incumbent)* | img → mesh | — | MIT | ~5.3 GiB measured | stale — last push 2025-04-18; placed 4th of 5 on Pixal3D's Toys4K table (IoU 73.54) |
| Pixal3D (TencentARC, SIGGRAPH 2026) | img → GLB + PBR, 1536³ | beats TripoSG/TRELLIS/HY2.1/D3D-S2 on Toys4K (IoU 93.57 vs 73.54); no humans in gallery. On DreamCharacter-1's character table Pixal3D sits BELOW TRELLIS-2.0 (0.8276 / 0.8247 vs 0.8329 / 0.8261), so its Toys4K win over TripoSG does not transfer cleanly to characters | MIT; NOTICE lists only MIT/Apache deps | flash-attn optional (SDPA fallback) | active, 2026-06-23, weights ungated |
| TRELLIS.2 (geometry only) | img → mesh + voxel PBR | 66.5 % user preference; no face in the paper. Highest-scoring OPEN model on DreamCharacter-1's character table (ULIP 0.8329 / Uni3D 0.8261, above Pixal3D and Hunyuan3D-2.1) — but that table is anime-domain and embedding-scored, and the one independent photoreal-portrait test reads the other way: "Facial features appeared more sculpted than realistic", with broken hair strands | MIT. Geometry path verified to import no nvdiffrast; the texturing path does | 24 GB; nvdiffrast/nvdiffrec/flash-attn are opt-in flags | active, 2026-06-05 |
| Hunyuan3D 2.1 | img → mesh + PBR | §2: best face measured here | DISQUALIFIED — §9 | 7.63 GiB measured | last open Tencent 3D shape model; 2.5/3.0/3.1 never opened |
| AniGen (VAST, SIGGRAPH 2026) | img → rigged mesh + skeleton + skinning | gallery is stylised (Mario, robots, horses) | MIT; CUBVH not on the inference path | 18 GB | weights MIT, ungated |
| Step1X-3D | img → GLB geo + tex | none | Apache-2.0, verified clean, no riders | 27–29 GB, ~152 s | stale since 2025-05; texture stage borrows Tencent code |
| Direct3D-S2 | img → mesh | v1.2's *"enhanced character generation"* never shipped | MIT | flash-attn hard-required | weights a year old; our install still blocked |
| Hi3DGen | img → geometry | — | MIT | installed here | last push 2025-07-02 |
| LATO.2 | img → mesh | none | MIT | 8 GB, 5 s | vertex cap 5,000 — unusable for a head |
| UltraShape 1.0 | img → geometry | none | tagged Apache-2.0 but base model is Hunyuan3D-2.1 → inherits §9 | — | Dec 2025 |
Closed SaaS, reference tier only (standing Josh ruling): Meshy, Tripo, Rodin/Hyper3D, Hitem3D —
which is where Sparc3D went; weights were never released and the demo was pulled to route users
to the paid service. Hunyuan3D 3.0/3.1 are API-only; there is no 3.0/3.1 repo in the Tencent org.
Add ByteDance's Seed3D line to this closed tier. Seed3D 1.0 (arXiv 2510.19944) and Seed3D 2.0
(2026-04-23) are both API-only on Volcano Engine; see the appended note below.
Two unreleased papers that solve exactly our problem, recorded so we stop re-deriving them:
TOPOS (arXiv 2605.14594, CVPR 2026 Findings) — single image → **MetaHuman topology, 24,049 v /
24,002 f** + relightable UV, ~1 s — *"We will release our code and trained models"*, **not
released**; and *High-Fidelity Single-Image Head Modeling with Industry-Grade Topology*
(arXiv 2605.04524), which 95 % of 22 professional technical artists ranked top, no code. Both
independently concluded that the output must be a fixed studio topology, which is §10's architecture.
SEED3D IS NOT AN OPEN CANDIDATE — verified at file level 2026-08-08, and recorded because a survey
that omits it invites the same wrong conclusion twice. Seed3D 1.0's 1.5B geometry model does beat
the 3B Hunyuan3D-2.1 in its own report, and it carries the only vendor face-likeness claim found
in this class ("baseline methods tend to lose reference fidelity, while Seed3D 1.0 accurately
generates fine details such as facial features and textile patterns"). None of that is reachable.
github.com/Seed3D/Seed3D is a three-file GitHub Pages project page — .nojekyll, README.md,
report.pdf — with no LICENSE at any path or branch, GitHub's licence endpoint 404, repo metadata
"license": null, and no push since the day it was created. No Seed3D-1.0 weights exist under
HuggingFace orgs Seed3D or ByteDance-Seed, controlled against the same API returning those orgs'
other models. The paper's own availability line is "Seed3D 1.0 is now available on Volcano
Engine", model id doubao-seed3d-1-0-250928, and 2.0 is likewise API-only. The Apache-2.0 claim
circulating on aggregators traces to the three Apache-2.0 siblings in the same GitHub org (Dora,
MagicArticulate, Puppeteer) — different models. Licence record and the full attempt log:
docs/licence_records/seed3d/. Treat Seed3D as closed SaaS, not as a download.
One install trap worth a build check: cumesh (MIT, required by the TRELLIS.2 geometry path)
vendors third_party/cubvh/, which carries NVIDIA's instant-ngp non-commercial clause. The geometry
path was verified to call only fill_holes, simplify, remove_faces and adjacency queries — no
cuBVH calls — but the code compiles into the extension. A build excluding third_party/cubvh would
settle it. Same failure class as MV-Adapter's nvdiffrast import, which this project already
solved by refusing to run if the module reaches sys.modules.
---
**Finding: NVIDIA has no local, commercially-licensed, weights-downloadable character mesh
generator. The strongest single piece of evidence is that NVIDIA's own shipping image-to-3D
blueprint uses Microsoft's TRELLIS**, not an NVIDIA model.
materials can be created with any DCC tool… The avatar should be humanoid. The avatar needs to be
in the USD format"*, plus a SkelRoot and 52 ARKit blendshapes. The 2026 ACE roster is ASR, LLMs,
TTS, Audio2Face-3D, Audio2Emotion-3D, Game Agent SDK, NVIGI — zero geometry generation.
carry the identical §3.3 clause that already excluded nvdiffrast: *"The Work and any derivative
works thereof only may be used or intended for use non-commercially… 'non-commercially' means for
research or evaluation purposes only and not for any direct or indirect monetary gain."*
animatable 3D human) — repo 404 for over a year. GAIA (SIGGRAPH 2025, generative head avatars)
— 404, *"Coming Soon!"*. GOHA — CC BY-NC-SA 4.0. Edify 3D — quad meshes with PBR,
architecturally right, weights never released and the hosted NIM preview retired.
Notified when RTX Neural Faces is Available."* It is a runtime post-process requiring per-character
training, not an asset pipeline.
What NVIDIA does give us, and it is worth taking: Audio2Face-3D — code Apache-2.0, weights
NVIDIA Open Model License, model card states *"This model is ready for commercial/non-commercial
use"* and lists the RTX 5090 as tested hardware. It closes the incumbent record's FACS-rig gap
from the animation side once a rigged head exists. ARDY / MotionBricks (Apache code + Open Model
License weights) for motion. RTX Character Rendering SDK, Linear-Swept-Spheres hair, RTX Skin for
runtime quality on Blackwell — orthogonal to producing the mesh, and genuinely valuable to it.
Licence taxonomy, because these differ enormously and get conflated:
| Licence | Commercial? | Applies to |
|---|---|---|
| NVIDIA Source Code License (1-Way Commercial) | NO | nvdiffrast, XCube, LLaMA-Mesh |
| NVIDIA Open Model License | YES | Audio2Face-3D, ARDY, MotionBricks weights |
| Apache-2.0 | YES | A2F-3D code, ARDY code, GEN3C code |
| CC BY-NC-SA 4.0 | NO | GOHA |
---
**Finding: the whole family is the wrong tool, on three independent grounds, and the licence ground
alone is fatal — of roughly twenty candidates checked, zero are commercially clean as shipped.**
1. Domain. Every candidate trains on FFHQ / VFHQ / NeRSemble / THuman — real photographs. This is
photo-*reconstruction*, not generation. A painted elf fights the anatomy prior.
2. Output shape. Nearly all emit a splat cloud or radiance field, not a UV'd riggable mesh.
3. Licence. The Inria clause is viral by design — §4.2 requires *"Your Terms provide that the use
limitation in Section 2 applies to your derivative works"*. **It has eaten the entire splat→mesh
lane**: SuGaR, 2DGS, GOF, RaDe-GS and MILo all carry byte-identical Inria non-commercial text.
Our standing ruling is confirmed and is worse than we recorded — it is not just the reference
implementation, it is every open splat→mesh method. gsplat (Apache-2.0) remains clean and is
verified to contain no diff-gaussian-rasterization, but **ns-export supports no mesh export for
splats at all**. The one clean DIY path: gsplat ships native 2DGS kernels under Apache-2.0 exposing
render_normals / surf_normals / render_median, so an Open3D TSDF fusion on top is a ~200-line
task on a clean stack. Not recommended for characters — every method here is benchmarked on DTU /
Tanks&Temples / Objaverse, and no evidence was found of any of them producing a character mesh.
The one candidate that genuinely takes illustration input: SOAP (SIGGRAPH 2025) — trained on
24 K 3D heads across *"real human, joker, anime, oil painting, and 3D cartoon"*, outputs a **rigged
FLAME-topology mesh, 20 K+ faces, eyes and teeth, skinning weights, FACS**. On paper it is exactly the
asset. It fails on four counts at once: no LICENSE file at all, an nvdiffrast requirement, a
torch==2.3.1 cu121 pin that will not run on sm_120, and no activity since 2025-08-07.
The fourth wall nobody in this literature crosses, and it is the one that matters most to us:
these are style-*preserving* reconstructors. SOAP faithfully returns a 3D version of the painting's
look. Nothing here photorealises a stylised painting, because nothing was trained on paired
painting↔photoreal-scan data. Our plates are already photoreal, so we do not need that — but it
means no candidate here can be credited with "concept art in, photoreal head out."
sm_120 is a live problem across this stack: gsplat PR #1034 (5090 support) is still open;
issue #1040 (opened 2026-08-04) reports illegal memory access ≥8 M gaussians on sm_120.
---
**MV-Adapter has been surpassed for props — and the honest finding is that none of it is
skin-evidenced.**
| Candidate | Emits | Licence | Note |
|---|---|---|---|
| MV-Adapter ig2mv *(ours)* | 6-view RGB, no PBR, no de-light | Apache-2.0 adapter / OpenRAIL++-M SDXL | ratified here; ~14 GB |
| Hunyuan3D-Paint 2.1 | albedo + metallic + roughness, illumination-invariant | DISQUALIFIED — §9 | absorbed RomanTex + MaterialMVP |
| LumiTex (ICLR 2026) | albedo + MR with an illumination-context branch | Apache repo, but FLUX.1-dev non-commercial weights | best quality measured (FID 160.8 vs 196.6) |
| MaterialAnything | albedo + roughness + metallic + bump | MIT — cleanest in the field | PyTorch3D + Blender, no nvdiffrast |
| Paint3D | albedo, "lighting-less" by design | Apache-2.0 | the origin of the de-light idea; weakest quality |
| TEXGen | albedo only, direct UV diffusion | no LICENSE file at repo root | 24 GB |
| NaTex / MV2UV / MatLat | various | no code released | the genuinely new 2026 direction |
**The skin finding, stated as a measured absence rather than a caveat: not one mesh texturer above is
skin-capable in any evidenced way.** Hunyuan3D-2.1's entire paper gallery and evaluation set is
inanimate objects — toys, calculators, rakes, fighter jets — with no human, face or skin example and
no limitations discussion of them. LumiTex likewise. The GSO/DTC benchmarks behind MV2UV and TEXGen
are scanned household objects. **A leaderboard position there predicts nothing about pores or
subsurface**, and the specific failure mode of diffusion on skin — micro-texture is statistically
noise-like and gets stripped early in denoising, producing the plastic look — is exactly what a props
benchmark cannot detect.
The skin-specialist work exists in a different, mostly unreleased family: Ubisoft LaForge's
geometry-aware head textures (4 K diffuse/normal/specular plus melanin and detail maps — no code,
and it explicitly does not model subsurface), and a 44 K-face-DB semantic asset generator
(release unconfirmed).
**Practical read: the skin register comes from the plate and a dedicated skin-detail pass, not from
the mesh texturer.** The mesh texturer's job is view-consistency, UV coverage and de-light. For
de-light specifically, Paint3D (Apache-2.0) and IC-Light (Apache-2.0) are the clean options.
---
This is where the survey's real answer lives, and the ground moved in our favour within the last nine
months.
| System | What you get | Child? | Licence | Maturity |
|---|---|---|---|---|
| Anny (NAVER Labs Europe) | common topology + parameter space, phenotype params, texture coords, blendshapes, multiple topology backends | YES — natively. README, verified: *"Anny models a large variety of human body shapes, from infants to elders, using a common topology and parameter space."* Lane-reported 2.0 mm vs SMPL-X+A's 3.2 mm on child scans | Apache-2.0 code; assets *"adapted from MPFB2"* under CC0 1.0. ⚠ the optional smplx topology variant is non-commercial — do not select it | v0.1 Nov 2025 → v0.5 Jun 2026 |
| SOMA-X (NVlabs) | canonical topology + 77-joint rig, swappable identity backends (MHR, Anny, SMPL/X) | via the Anny backend | Apache-2.0; HF card states *"ready for commercial use"*; native shape backend fitted on commercially licensed scans | 2026 |
| MHR (Meta) | 7 LODs (73,639 → 595 v), 127 joints, 72 artist-sculpted FACS expressions | NO — hard blocker. Dataset built *"removing unsuitable subjects (e.g. underage…)"*; 7,110 adult scans | Apache-2.0 | Nov 2025; highest-fidelity mesh of the three |
| SMPL / SMPL-X / SUPR | the field's reference bodies | — | BLOCKED: *"the sole purpose of performing non-commercial scientific research… Any other use, in particular any use for commercial… purposes is prohibited. This includes… incorporation in a commercial product"* | licence-dead for us |
| MakeHuman / MPFB | base mesh, targets, skins, UVs, rig; age is a first-class slider | YES | program AGPL; core assets CC0; MPFB FAQ answers "closed-source commercial game?" with *"Yes."* ⚠ community-library assets carry their own licences | mature; artist mesh, not scan-derived |
| System | What you get | Licence | Note |
|---|---|---|---|
| Google GNM Head | 253 identity params (170 head, 3 eyeball, 80 teeth) + 383 expression params, eyes/teeth/tongue, UVs for both quad [Q,4,2] and triangulated [T,3,2] | Apache-2.0 — no riders, no NC clause, no use policy | published 2026-07-28, nine days old. Blender importer exists. Lane-reported; not independently re-verified this pass — §11 owes that |
| FLAME 2023 Open | head model, ~100 expression components | CC-BY-4.0 — commercial OK. *"Max-Planck grants you the right to share and adapt the model for any purpose, including commercial use"* | the carve-out applies only to FLAME 2023 Open; all earlier FLAME remains non-commercial. Corroborated by two independent lanes |
| ICT-FaceKit | 26,719 v / 26,384 f, 100 PCA identity modes, 53 ARKit blendshapes, UVs, teeth, eyeballs, tongue | MIT | Light version ships no albedo/displacement |
| FaceVerse | detail-controllable 3DMM | BLOCKED — prohibition names our exact use: *"production of artifacts for commercial purposes including… video games"* | — |
| BFM 2019 | classic 3DMM | BLOCKED — *"strictly prohibited"* for for-profit | — |
| MetaHuman | full rigged photoreal human; devkit/OpenRigLogic now MIT; free under $1 M revenue; usable in any engine | STILL CHILDLESS at 5.8 (Jun 2026) — no child/age announcement; our METAHUMAN_ROUTE_EVIDENCE.md §3 finding stands | 5.7/5.8 improved body conforming and full-body Mesh-to-MetaHuman accepts arbitrary topology, which partly erodes the *conform-seam* half of our finding |
Canon fixes an elf [T3_Core_Characters L59] and this lane ruled the swept-back pointed ear as the
one morphological marker [CHAR_0001_CANON_SHEET.md L105], with Josh ruling 2026-08-06 for a larger
magnitude. METAHUMAN_ROUTE_EVIDENCE.md §5 already measured the decisive fact: **MetaHuman's face API
exposes no ear region and no ear control at all**, so *"the pointed ear is grafted geometry whichever
route wins."* That generalises — every PCA-over-human-scans model has the same limit.
| Route | Pointed ear | Child |
|---|---|---|
| Anny / MakeHuman lineage | cleanest — author a target on a CC0-descended mesh, no licence friction | native |
| GNM Head / ICT-FaceKit | legally free to sculpt (Apache/MIT), but outside the PCA space → hand corrective | GNM child coverage unverified — §11 |
| MHR / SOMA-X | mesh Apache-2.0, but the shape space is adult-scan-derived; correctives fight pose correctives | no |
| MetaHuman | worst — the conform pipeline resists non-human morphology, and it compounds with childlessness | no |
---
Four candidates that could beat the current stack for the CHARACTER class. Disqualifications cite the
exact clause; nothing here is disqualified on vibes.
Note what is NOT on this list: a replacement geometry generator for the face. The survey found no
image-to-3D model that beats the face-pivot's TripoSG route, and the one candidate strong enough to
be worth the GPU hour was benched and lost (§2). The shortlist is therefore layers that sit *around*
that route, not a swap for it.
1. Anny (Apache-2.0) + SOMA-X (Apache-2.0) — the body and the age axis. The only route where a
7-year-old is native rather than extrapolated, and where **one continuous identity across 7→24 is
a parameter sweep rather than seven reconciled characters**. Directly closes the gap
METAHUMAN_ROUTE_EVIDENCE.md §3 measured.
2. Google GNM Head (Apache-2.0) — the face and the FACS surface. 253 identity + 383 expression
parameters, quad UVs, eyes/teeth/tongue, no riders. Closes the incumbent record's *"no FACS rig"*.
3. TRELLIS.2 geometry-only (MIT) or Pixal3D (MIT) — the accessory/non-human lane, not the face.
Pixal3D is the only model with a published head-to-head win over our incumbent TripoSG.
4. MaterialAnything (MIT) / Paint3D (Apache-2.0) — the de-light and PBR layer, replacing the
Hunyuan paint stage that §9 disqualifies.
DISQUALIFIED, with the clause:
2.1 also §2 on measured quality — it is the one candidate this survey actually ran, and it lost.
derivative works thereof only may be used or intended for use non-commercially… for research or
evaluation purposes only and not for any direct or indirect monetary gain."*
used 'non-commercially', i.e., for research and/or evaluation purposes only"*, made viral by §4.2.
*"Any other use, in particular any use for commercial… purposes is prohibited."* FaceVerse names
*"video games"* explicitly.
---
The model this survey benched is disqualified on licence as well as on quality (§2), and the
licence reason is not a cautious reading. Licence
pinned at docs/licence_records/hunyuan3d_2_1/LICENSE, sha256 b79ac5e1…; line numbers are that file.
European Union, United Kingdom and South Korea**."*
a Model Derivative that results from operating or otherwise using…"* — i.e. our meshes.
2.1 Works, Output or results of the Tencent Hunyuan 3D 2.1 Works outside the Territory. Any
such use outside the Territory is unlicensed and unauthorized under this Agreement."*
restriction this lane was asked to check: triggered only if we ever train on outputs; we do not).
The two clauses are consistent and both bind. §6(d) disclaims *IP ownership* in the output; §5(c)
imposes a *territorial limit on distributing* it. Shipping on Steam into the EU/UK/South Korea is
distributing Output outside the Territory, which §5(c) names as *"unlicensed and unauthorized."*
This corrects an earlier read made in this same sitting. Reading §6(d) alone, this lane concluded
Hunyuan cleared the bar and queued a 14 GB download on that basis. §5(c) was found afterwards. The
standing licence law says read at face value and flag explicit triggered prohibitions — this is
one, in the licence's own words, and the earlier read was incomplete rather than the law being
conservative. The bench in §2 therefore stands as REFERENCE-TIER evidence — it tells us what a
strong generator achieves on our plate, and its mesh may not ship.
---
**Route the CHARACTER class to a THREE-LAYER stack, and take the character face off the general
image-to-3D path permanently.**
| Layer | Route | Licence | Closes |
|---|---|---|---|
| Body + age | Anny, driven through SOMA-X | Apache-2.0 / CC0 assets | the child band; the 7→24 continuous identity |
| Face + FACS | GNM Head (fallback: ICT-FaceKit MIT, or FLAME 2023 Open CC-BY) | Apache-2.0 | *"no FACS rig"* |
| Hair | a groom/card system — never an image-to-3D model | n/a | *"no strand groom"* |
| Skin | plate-conditioned bake + de-light (Paint3D / IC-Light) + a skin-detail pass | Apache-2.0 | *"no texture-synthesis skin stack"* — partially; see the objection |
| Accessories / non-human | keep TripoSG; Pixal3D and TRELLIS.2 are untested upgrade leads | MIT | — |
What this does NOT do: it does not displace the face-pivot lane's TripoSG geometry route. That
route was the one incumbent this survey actually benched, and it held (§2). The pivot's own
verdict — BELOW the floor, gap in *materials and hair*, not the face — is unchanged by anything here,
and the layers above are additive to it rather than a replacement for it. Concretely: the pivot's
named highest-value next step, converting the strand shells to hair cards with alpha (which its
record notes would close the appeal gap, the LOD floor and the texture coverage at once), is
endorsed by this survey and unaffected by any candidate in it — no surveyed generator produces a
groom, and the one that was benched produces sheets that are worse than the strands we already have.
Why this and not "swap the geometry model":
1. It is the only path where the canon child is native rather than extrapolated. Every
alternative either excludes minors from training data (MHR, explicitly), lacks child support
(MetaHuman, still, at 5.8 — our §3 finding stands), or is licence-blocked (SMPL-X).
2. One continuous identity across the floor sheet's seven panels becomes a parameter sweep, not
seven characters someone must reconcile. That is the age-progression roadmap the canon sheet
names as owed [CHAR_0001_CANON_SHEET.md §2].
3. The pointed ear is an authored target on a CC0-descended mesh — no licence conversation and no
conform fight, which METAHUMAN_ROUTE_EVIDENCE.md §5 measured as unavoidable on every route.
4. Clean quad topology, UVs and a rig arrive for free — the thing we would otherwise pay for in
retopology on a 2 M-triangle shell, and the thing that makes the 24 k LOD0 budget reachable.
5. The licence stack is Apache-2.0 / CC0 / MIT / CC-BY all the way down, with no nvdiffrast, no
Inria, no SMPL, no Tencent territorial clause.
6. It fits the box: nothing here approaches the 29 GiB the ratified MV-Adapter texture stage reserves.
This does NOT retire the v2 routing table. Weapons, props, creatures and minerals keep TripoSG
untouched and keep the ratified arm-e texture route. Scope follows the evidence, exactly as the
original ratification did.
**Every quality claim behind the texture half was measured on props, and skin is the one material
where a props benchmark actively misleads.** Hunyuan3D-2.1's paper contains no human, face or skin
example anywhere; LumiTex's too; the GSO/DTC leaderboards are scanned household objects. So "these
texturers beat MV-Adapter" is evidenced for hard-surface props and unevidenced for a child's face
— and the models that *are* skin-specialised are unreleased, with the closest one explicitly not
modelling subsurface. There is no packaged skin specialist to fall back to.
And there is a sharper edge. This plan bets the photoreal register on the texture stage while
Anny's base mesh is an artist mesh in the MakeHuman lineage, not a photogrammetric scan mesh.
MHR's 73,639-vertex LOD0 *is* scan-derived and would carry far more believable skin-surface geometry
— but MHR cannot make a child, by construction. **If scan-derived surface is what makes skin read as
real, then the child requirement and the photoreal requirement pull in opposite directions**, and the
stack needs two geometry sources with a hand-authored bridge. That is not resolvable by licence
reading or by any further survey. It needs a bake-off: the same plate through Anny and through MHR at
age 24, judged on skin at close range against character_appeal.json.
A second objection, recorded because it is the one that would most cheaply overturn this document:
GNM Head is nine days old and this pass verified it through one lane, not independently. If its
identity space turns out not to reach a 7-year-old skull, layer 2 falls back to ICT-FaceKit or FLAME
2023 Open, and the recommendation's face half weakens to "clean topology, unproven child face."
---
whether its identity space reaches a child skull. It is layer 2 of the recommendation and it
rests on a single lane's read.
against harness/qa/comparator_rubrics/character_appeal.json. This is the fork the survey cannot
settle.
but does not publish vertex count, quad/tri, or joint count; the lane-reported 13,718 v / 13,710
quads / 163 bones is uncorroborated.
cumesh excluding third_party/cubvh, before TRELLIS.2 geometry enters anyshipped path (§3.2).
wants the face result to carry routing weight rather than refusal weight, it needs arms, a blind
key and n > 1. Note the asymmetry: a sighted n=1 is enough to decline a swap, not to make one.
model in the survey with a *published* head-to-head win over TripoSG, and it is MIT with an
optional flash-attn. Benching it is cheap now that build/3d/bench/{hy21_shape.py,bl_clay.py}
exist, and it is the single highest-value follow-up in §3. Run both arms through bl_clay.py
— §2.1 is the reason.
# the bench (WSL2, /root/mv3d/venv, torch 2.9.0+cu128 on sm_120)
python /mnt/d/assetgen/bench/hy21_shape.py # → HY21_SHAPE_RECORD.json + GLB
blender --background --python D:/assetgen/bench/bl_clay.py -- \
--in <glb> --out <dir> --tag <t> # the clay/form read
python D:/assetgen/bench/final_sheet.py # the comparison sheet