通行証 · HALL PASS DOCS · PLAY

3D generation: Tripo vs the Meshy pipeline

Investigated 2026-08-31 at Chris's ask, while he playtested the waves.

What the game does today

Three tiers, three different techniques — this matters because "switch to Tripo" means different things per tier:

tier source technique
swarm enemies (9 types) actors.js hand-built primitives + ink outline, instanced, ~1KB each
special-grade bosses boss3d.js Meshy multi_image_to_3d GLB → bake-models.mjs (strip clips, 1024 WebP textures) → re-skinned in-engine with MeshToonMaterial
students actors.js primitive rigs

The Meshy baseline (2026-08-25 experiment, docs/SESSION-LOG.md): 30cr per boss with texture at 20K tris → 4.4MB raw GLB → ~1.1-2.5MB after bake. The generated texture is largely DISCARDED — boss3d.js re-skins with the house toon ramp, so what the pipeline actually consumes is geometry.

The finding that reframes the question

Tripo is already in the tooling. The same MCP that ran the Meshy bosses exposes tripo_h3_1_image_to_3d, tripo_h3_1_multiview_to_3d and a Tripo text-to-3D — alongside Meshy 6/7, Hunyuan3D v3/v3.1 and Meta SAM-3. No new account, no new key, same credit pool. "Compare Tripo" is a 9-credit same-input bake-off, not a vendor migration.

Costs measured/preflighted on our account (2026-08-31):

model config credits
Tripo H3.1 image→3D 20K faces, textured, no PBR 9
Meshy multi-image→3D 20K tris, textured (8/25 actual) 30

Native Tripo API (for reference, if ever direct): 100 credits = $1, image→3D 20-30 credits ($0.20-0.30/gen), with quad remesh, smart low-poly, auto-rig (25cr) and animation retarget (10cr/clip) as add-ons. Higher-fidelity H3.1 via resellers runs ~$0.075-0.15/gen. No free tier documented.

Head-to-head: same input (janitor.png)

Both asked for ~20K faces, textured, from the identical source PNG.

Meshy multi_image_to_3d (8/25) Tripo H3.1 (2026-08-31)
credits 30 9
raw GLB 4.4MB 907KB
triangles 20,809 19,254
vertices 22,845 12,174 (welded ~2x better)
texture large (bake squeezed it to 173KB WebP) one 278KB JPEG
animation via Meshy auto-rig + 678-clip library none exposed via MCP

The raw file is 4.8x smaller before bake-models.mjs even touches it, with the same on-target face count and half the vertex data. Visual fidelity is Chris's call — the model is at assets-src/incoming/models-tripo/ and a copy went to Downloads for Windows 3D Viewer.

Verdict

Tripo H3.1 for static geometry (bosses' base meshes, props, showroom subjects): a third of the credits for a cleaner, lighter mesh. Meshy stays for motion: its auto-rig plus the 678-clip retarget library is what made the boss walk/attack cycles, and the MCP's Tripo surface has no rigging. The mixed pipeline costs one extra call — Meshy 3d_rigging accepts any GLB URL, including a Tripo output.

Not investigated (would need Tripo's own account/API, not in scope): their quad remesh, smart low-poly and native auto-rig add-ons.

What Tripo does NOT change

Tripo API direct (2026-10-13)

Chris added a Tripo API key (~/.secrets/tripo-api-key.txt). Unlike the Higgsfield route it reaches rigging and preset animation. The first trial was Detention, which shipped with only Meshy's walk.

Pipeline (all three steps are in the repo): node scripts/tripo-boss.mjs prep <boss> (the shipping mesh with its skin removed, turned to +X, PNG texture) → python tools/tripo/tripo.py <boss> import | check | rig | anim walk,slash,hurt,fall | get → node scripts/tripo-boss.mjs bake <boss> ... into assets/ladder/ → reviewed on /boss-rig.html beside the shipping rig, both through boss3d's real toon and ink treatment. Task ids and raw downloads are in ../_hallpass-archive/tripo/.

Facts learned (credits are the Tripo account's own; 100 ≈ $1 per August notes):

step cost note
import an external GLB 50 GLB upload goes through STS, so the SDK needs boto3
prerig check 0 said riggable, biped
rig (Tripo skeleton, server picked v2.5) 75 41 bones; mesh normalised to height 1, still facing +X
rig with spec: 'mixamo' 25-75 25 at completion, and 50 more left before the next call (unclear whether that was ours); every preset retarget on it then failed with error 1004, so use Tripo's own skeleton
retarget 10 per clip several clips in one task come back as one GLB

Preset clips are generic (idle, walk, run, jump, slash, shoot, hurt, fall, turn, dive, climb, plus walks for quadruped, hexapod, octopod, serpentine and aquatic rigs). Clips come with root travel; boss-rig.js pins the channel that travels furthest.

Verdict on Detention: fall is good (topples back, lies flat, 3.0s, an exorcism beat). Slash is a big overhead swing that would fit the cage throw, but the auto-skin tears the desk pieces at the raised shoulder and the clip idles for its back half (6.6s). Hurt is a 13.9s cower to the floor, not a flinch. The walk is stiffer and more generic than Meshy's Slow_Orc_Walk. From the gameplay camera the Tripo body also carries a heavier ink rim. A junk- furniture golem is the hardest case for auto-skinning, so the next fair test is a human-shaped boss (Parent, Monitor). The four shikigami are the case Tripo alone covers: quadruped and avian rigs, which Meshy's MCP surface does not offer.

Same day, follow-up: Tripo motion on the shipping skeleton. Meshy's own clip library was the first choice for Detention's missing clips, but the Higgsfield workspace now reads 0 credits on a free plan (the "Web Royal" team workspace with 1,715 credits in September no longer lists), and there is no Meshy key. So boss-rig.js retargets Tripo's slash, hurt and fall onto the 24-bone Meshy rig at load time: a bone-name map (Hip→Hips, Waist→Spine02, Spine02→Spine, NeckTwist01→neck, L_Upperarm→LeftArm, L_Thigh→LeftUpLeg ...; Tripo's twist bones are skipped), world-space rotation deltas from rest turned from Tripo's +X front to +Z, and the hips' travel scaled by height. retarget-character-clip.mjs cannot do this: it only re-bakes between binds of the same skeleton. Result: the motion carries over closely, his own walk stays, and Meshy's skin holds the raised arm better than Tripo's auto-skin did.

Shipped 2026-10-15: Detention keeps his body, gains four clips. Chris wanted his walk kept, with Tripo's walk as an occasional alternate and Tripo's motion for the rest. Two bodies could carry that, and a frame-by-frame check settled it: retargeted onto the Tripo rig, his walk's bones match the original to the degree, but Tripo's auto-skin attaches the desk pieces differently, so the same motion bends the body differently. Only his own Meshy skin keeps the walk he knows. So the game loads his Meshy body with Tripo's walk, slash, hurt and fall retargeted onto it (node scripts/tripo-boss.mjs game detention, then node scripts/pack-models.mjs detention). The Tripo-body set still bakes with game detention tripo <dir> from the raw downloads in the archive. How the clips map to the fight: docs/MECHANICS.md, "Detention's clips".

What the tooling learned:

If cost were no object, Claude's recommendation (2026-10-15): keep each boss's own Meshy body, but choose the clips from Meshy's 678-clip library rather than Tripo's 11 generic presets. That gives a true half-second hit reaction and a heavy death collapse at about 8 Higgsfield credits each, once the Higgsfield workspace is topped up. Keyframed or video-captured clips would cover the signature attacks. Either drops into the same file slots.

Same day: the hurt and fall reach every rigged boss, free. All seven Meshy boss rigs share one 24-bone layout, so Detention's retargeted hurt and fall were shared onto the other six with share (rests aligned, height scaled), packed with pack-models.mjs <name>-hurt / -fall, and checked on each body in /boss-rig.html?boss=<art>&solo=1 and in the game renderer. Cost: nothing beyond the Detention trial.

HALL PASS by Very Bad Games · Solo Developer Chris Sands · All documentation