PIPE_CHARACTER_MODELS_2026-08-06.md

npcs/PIPE_CHARACTER_MODELS_2026-08-06.md

PIPE_CHARACTER_MODELS — the photoreal-character model survey

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."*

---

DERIVATION

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.

---

0. THE HEADLINE — four findings, and the fourth is the one that changes the route

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.

---

1. THE BAR, AND WHAT THE INCUMBENT'S OWN RECORD ALREADY SAYS

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:

projection — judged unpolishable because a projection has nothing under it to polish."*

texture-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 gapWhat closes it
no FACS rigtemplate 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 grooma 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.

---

2. THE BENCH — MEASURED ON THIS BOX

Method. The strongest open-weight textured image-to-3D model (Hunyuan3D-2.1) was run on the

byte-identical conditioning image the incumbent consumedCHAR_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.

quantitymeasured
generation26.41 s (+30.0 s one-time pipeline load)
peak VRAM7.63 GiB allocated / 8.41 GiB reserved — shares a 32 GiB card comfortably
mesh1,040,922 v / 2,082,468 f, not watertight
matting0.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.

2.1 THE METHODOLOGICAL CORRECTION — the first read of this bench said the opposite

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."*

strips 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.

---

3. SURVEY — OPEN-SOURCE IMAGE-TO-3D GEOMETRY

3.1 The class finding, which outranks every row in the table

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.

3.2 The table

CandidateI/OFace evidenceLicence (face value)HW fitMaturity
TripoSG *(incumbent)*img → meshMIT~5.3 GiB measuredstale — 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 charactersMIT; NOTICE lists only MIT/Apache depsflash-attn optional (SDPA fallback)active, 2026-06-23, weights ungated
TRELLIS.2 (geometry only)img → mesh + voxel PBR66.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 strandsMIT. Geometry path verified to import no nvdiffrast; the texturing path does24 GB; nvdiffrast/nvdiffrec/flash-attn are opt-in flagsactive, 2026-06-05
Hunyuan3D 2.1img → mesh + PBR§2: best face measured hereDISQUALIFIED — §97.63 GiB measuredlast open Tencent 3D shape model; 2.5/3.0/3.1 never opened
AniGen (VAST, SIGGRAPH 2026)img → rigged mesh + skeleton + skinninggallery is stylised (Mario, robots, horses)MIT; CUBVH not on the inference path18 GBweights MIT, ungated
Step1X-3Dimg → GLB geo + texnoneApache-2.0, verified clean, no riders27–29 GB, ~152 sstale since 2025-05; texture stage borrows Tencent code
Direct3D-S2img → meshv1.2's *"enhanced character generation"* never shippedMITflash-attn hard-requiredweights a year old; our install still blocked
Hi3DGenimg → geometryMITinstalled herelast push 2025-07-02
LATO.2img → meshnoneMIT8 GB, 5 svertex cap 5,000 — unusable for a head
UltraShape 1.0img → geometrynonetagged Apache-2.0 but base model is Hunyuan3D-2.1 → inherits §9Dec 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.

---

4. SURVEY — NVIDIA

**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:

LicenceCommercial?Applies to
NVIDIA Source Code License (1-Way Commercial)NOnvdiffrast, XCube, LLaMA-Mesh
NVIDIA Open Model LicenseYESAudio2Face-3D, ARDY, MotionBricks weights
Apache-2.0YESA2F-3D code, ARDY code, GEN3C code
CC BY-NC-SA 4.0NOGOHA

---

5. SURVEY — GAUSSIAN-SPLAT / NeRF AVATARS

**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.

---

6. SURVEY — TEXTURE AND SKIN SYNTHESIS

**MV-Adapter has been surpassed for props — and the honest finding is that none of it is

skin-evidenced.**

CandidateEmitsLicenceNote
MV-Adapter ig2mv *(ours)*6-view RGB, no PBR, no de-lightApache-2.0 adapter / OpenRAIL++-M SDXLratified here; ~14 GB
Hunyuan3D-Paint 2.1albedo + metallic + roughness, illumination-invariantDISQUALIFIED — §9absorbed RomanTex + MaterialMVP
LumiTex (ICLR 2026)albedo + MR with an illumination-context branchApache repo, but FLUX.1-dev non-commercial weightsbest quality measured (FID 160.8 vs 196.6)
MaterialAnythingalbedo + roughness + metallic + bumpMIT — cleanest in the fieldPyTorch3D + Blender, no nvdiffrast
Paint3Dalbedo, "lighting-less" by designApache-2.0the origin of the de-light idea; weakest quality
TEXGenalbedo only, direct UV diffusionno LICENSE file at repo root24 GB
NaTex / MV2UV / MatLatvariousno code releasedthe 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.

---

7. SURVEY — PARAMETRIC TEMPLATES: THE LICENCE LANDSCAPE INVERTED

This is where the survey's real answer lives, and the ground moved in our favour within the last nine

months.

7.1 Bodies

SystemWhat you getChild?LicenceMaturity
Anny (NAVER Labs Europe)common topology + parameter space, phenotype params, texture coords, blendshapes, multiple topology backendsYES — 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 scansApache-2.0 code; assets *"adapted from MPFB2"* under CC0 1.0. ⚠ the optional smplx topology variant is non-commercial — do not select itv0.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 backendApache-2.0; HF card states *"ready for commercial use"*; native shape backend fitted on commercially licensed scans2026
MHR (Meta)7 LODs (73,639 → 595 v), 127 joints, 72 artist-sculpted FACS expressionsNO — hard blocker. Dataset built *"removing unsuitable subjects (e.g. underage…)"*; 7,110 adult scansApache-2.0Nov 2025; highest-fidelity mesh of the three
SMPL / SMPL-X / SUPRthe field's reference bodiesBLOCKED: *"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 / MPFBbase mesh, targets, skins, UVs, rig; age is a first-class sliderYESprogram AGPL; core assets CC0; MPFB FAQ answers "closed-source commercial game?" with *"Yes."* ⚠ community-library assets carry their own licencesmature; artist mesh, not scan-derived

7.2 Heads

SystemWhat you getLicenceNote
Google GNM Head253 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 policypublished 2026-07-28, nine days old. Blender importer exists. Lane-reported; not independently re-verified this pass — §11 owes that
FLAME 2023 Openhead model, ~100 expression componentsCC-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-FaceKit26,719 v / 26,384 f, 100 PCA identity modes, 53 ARKit blendshapes, UVs, teeth, eyeballs, tongueMITLight version ships no albedo/displacement
FaceVersedetail-controllable 3DMMBLOCKED — prohibition names our exact use: *"production of artifacts for commercial purposes including… video games"*
BFM 2019classic 3DMMBLOCKED — *"strictly prohibited"* for for-profit
MetaHumanfull rigged photoreal human; devkit/OpenRigLogic now MIT; free under $1 M revenue; usable in any engineSTILL CHILDLESS at 5.8 (Jun 2026) — no child/age announcement; our METAHUMAN_ROUTE_EVIDENCE.md §3 finding stands5.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

7.3 The elven ear and the child, per candidate — the two canon constraints

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.

RoutePointed earChild
Anny / MakeHuman lineagecleanest — author a target on a CC0-descended mesh, no licence frictionnative
GNM Head / ICT-FaceKitlegally free to sculpt (Apache/MIT), but outside the PCA space → hand correctiveGNM child coverage unverified — §11
MHR / SOMA-Xmesh Apache-2.0, but the shape space is adult-scan-derived; correctives fight pose correctivesno
MetaHumanworst — the conform pipeline resists non-human morphology, and it compounds with childlessnessno

---

8. THE SHORTLIST

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.

---

9. THE HUNYUAN DISQUALIFICATION — the clause, verified in the pinned file

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.

---

10. THE RECOMMENDATION

**Route the CHARACTER class to a THREE-LAYER stack, and take the character face off the general

image-to-3D path permanently.**

LayerRouteLicenceCloses
Body + ageAnny, driven through SOMA-XApache-2.0 / CC0 assetsthe child band; the 7→24 continuous identity
Face + FACSGNM Head (fallback: ICT-FaceKit MIT, or FLAME 2023 Open CC-BY)Apache-2.0*"no FACS rig"*
Haira groom/card system — never an image-to-3D modeln/a*"no strand groom"*
Skinplate-conditioned bake + de-light (Paint3D / IC-Light) + a skin-detail passApache-2.0*"no texture-synthesis skin stack"* — partially; see the objection
Accessories / non-humankeep TripoSG; Pixal3D and TRELLIS.2 are untested upgrade leadsMIT

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.

The strongest objection

**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."

---

11. WHAT THIS LEAVES OWED

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.

shipped 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.

Reproduce it

# 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

Generated by harness/site/structure_site.py — the URL path is the repo path. review root