{"id":19009,"plugin_id":"plugins_6a9055d25738819198aeedb74e8360f7","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:15:08.937Z","digest":"dadbe1f7f7ad598ed311a64be8fc5134b9885f454b1869c242aaf997c9c8788d","against":null,"payload":{"description":"Recipes for producing game-ready 3D assets with Tripo and wiring them into a game project - low-poly props on a face budget, PBR hero assets, LOD chains, modular or segmented parts, and rigged characters with locomotion clips for Unity, Unreal, Godot or Three.js. Use when the user is building a game or real-time 3D scene and needs props, characters, placeholder art, LODs, part-based assets, or an animated rig, rather than a single one-off model.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":282}],"name":"tripo-game-asset","skill_md_contents":"---\nname: tripo-game-asset\ndescription: Recipes for producing game-ready 3D assets with Tripo and wiring them into a game project - low-poly props on a face budget, PBR hero assets, LOD chains, modular or segmented parts, and rigged characters with locomotion clips for Unity, Unreal, Godot or Three.js. Use when the user is building a game or real-time 3D scene and needs props, characters, placeholder art, LODs, part-based assets, or an animated rig, rather than a single one-off model.\n---\n\n# Game asset pipeline\n\nRecipes on top of the `tripo-3d` skill. Read that skill first for the shell\nrequirement, auth, the blocking behaviour of `tripo make`, exit codes, and credit\nrules. Every recipe here is a shell command: if this environment cannot execute\nshell commands, stop and tell the user this skill works in Codex. Every recipe also\nspends credits, so it goes through that skill's \"Plan first, run after the user\nconfirms\" step — list each API call the recipe makes and its estimated cost, get a\nyes, run, then report the billed total **and** the per-task breakdown.\n\nThe point of these recipes is that assets land in the project's own directory\nstructure. Always pass `-o` pointing at wherever the project keeps its art — but note\n`-o` is the parent: the files end up in `<dir>/tripo-out/<name>-<id8>/`, so move them\nto their final location afterwards if the user named a specific path.\n\n## Pick a budget first\n\n| target                        | preset              | what it does                                          |\n| ----------------------------- | ------------------- | ----------------------------------------------------- |\n| mobile, WebGL, many instances | `--for game-mobile` | P1 low-poly model, face_limit 15000, 2K textures, FBX |\n| PC / console hero asset       | `--for game-pc`     | v3.1, detailed PBR, FBX                               |\n| animated character            | `--for anim`        | rig-check, then rig (v2.5, tripo spec), then retarget idle + walk |\n\nOverride the face budget when the project has a stricter one:\n\n```bash\ntripo make \"a health potion bottle\" --for game-mobile \\\n  -p face_limit=3000 --then convert:format=FBX,texture_size=1024 \\\n  -o ./Assets/Art/Props --json --yes\n```\n\nWhich generation model fits the budget:\n\n- **P1** (`tripo-p1`, 50–20000 faces) — the default low-poly choice; clean, game-style\n  topology out of the box. The CLI picks it automatically for any `face_limit` ≤ 20000\n  or a \"low poly\" prompt.\n- **P2** (`--model tripo-p2`, 48–50000 tri / 48–25000 quad; **Preview**) — P1 with\n  quads and a bigger budget: `-p quad=true` for subdivision-friendly or\n  hand-edit-friendly low-poly. `tripo-p2` is the CLI alias; the request carries\n  `model=P2-20260801` (the API rejects the alias itself). Costs 100+ credits per\n  generation versus 30–50 for P1; never auto-selected.\n- **v3.1 + `smart_low_poly`** (`--model tripo-v3.1 -p smart_low_poly=true -p face_limit=<500–20000>`)\n  — high-fidelity detail with hand-modelled-style low-poly topology, when P1's look is\n  too simple. Without `--model`, a `face_limit` ≤ 20000 silently switches to P1.\n- **v3.1 + `decimate`** — hero-quality source, then LODs (next section). P1/P2 do not\n  support `smart_low_poly`, `generate_parts` or `geometry_quality`.\n\n## Props\n\n```bash\ntripo make \"an ornate treasure chest, fantasy style\" --for game-pc \\\n  -o ./assets/models --json --yes\n```\n\nFor a set of props, generate them one at a time and check each `preview.png` before\ncontinuing — a bad seed early is cheaper to catch than at the end of a batch. For\ngenuinely large sets use `tripo batch run manifest.yaml`, which is resumable.\n\n## LOD chain from one source\n\n```bash\ntripo make \"a stone golem\" --for game-pc --then decimate:5000 --json --yes\ntripo make @last --then decimate:1500,convert:fbx --json --yes\n```\n\n`decimate` bakes normals by default, so the low LODs keep the silhouette detail of\nthe source. Each `@last` continues from the previous task rather than regenerating.\n\n**`decimate`'s face budget is a target, not a ceiling** — a 1500-face request can come\nback at ~1900 triangles. Read the actual triangle count from the result before handing\nan LOD to a project with a hard budget, and reduce it locally if it overshoots.\nGeneration's own `face_limit` does hold as an upper bound, so this caveat is specific\nto `decimate`.\n\n`decimate` accepts 500–20000 faces (500–10000 with `quad=true`) and bakes textures onto\nthe low-poly by default. For a source above 2M faces or a budget above 20000, use\n`decimate:face_limit=<n>,model=v1.0` — the v1.0 model takes up to 2 000 000 faces but\nhas no bake. Alternatively set `face_limit` on the `convert` step, which decimates during\nexport at the complex-convert price.\n\n## Modular and destructible assets\n\n```bash\ntripo make \"a wooden cart with detachable wheels\" -p generate_parts=true \\\n  -p texture=false -p pbr=false --json --yes                    # parts at generation time\ntripo make @last --then texture --json --yes                    # texture the parts afterwards\ntripo make hero.glb --then segment:v2.0-20260430,complete --json --yes   # split an existing mesh, then close the cut faces\n```\n\n- `generate_parts` (v3.1 only, +20 credits) outputs editable parts but requires bare\n  geometry — `texture`/`pbr` must be off; re-texture as a second step.\n- `segment` splits any model; `v2.0-20260430` adds `segmentation_granularity=simple|balanced|detailed`\n  and `split_by_connectivity`. `complete` fills the holes segmentation leaves\n  (`completion_mode=quick_cap` is the cheap cap-only variant). Export single parts with\n  `tripo model convert @last --format FBX -p 'part_names=[\"wheel_l\",\"wheel_r\"]'` —\n  list values need the `-p` form, `--then` cannot carry them.\n\n## Characters with animation\n\n```bash\ntripo make \"a knight in full armor, T-pose, standing straight\" --for anim --json --yes\n```\n\n`--for anim` runs `rig-check` first, which gates the chain: if the mesh is not\nriggable it stops before spending rigging credits.\n\nExplicit control over the rig and clips:\n\n```bash\ntripo make \"a robot soldier, T-pose\" --json --yes \\\n  | tripo anim check --json \\\n  | tripo anim rig --spec mixamo --out-format fbx --json \\\n  | tripo anim retarget --animation preset:idle preset:walk preset:run --json\n```\n\n- Prompt for a **T-pose** — rigging quality depends heavily on it. From a reference\n  image that is not in T-pose, generate one first:\n  `tripo generate text-to-image \"full-body front view of <character>\" -p template=t_pose --json --yes`\n  (or `tripo generate image-to-image ref.png -p template=t_pose`), then\n  `tripo generate image-to-model @last` and rig from there.\n- `rig-check` is free and returns the body type: `biped`, `quadruped`, `hexapod`,\n  `octopod`, `avian`, `serpentine`, `aquatic`. Rig with the type it recommends —\n  `rig:rig_type=quadruped` in a chain, `--rig-type quadruped` on `tripo anim rig` — the\n  default is `biped`.\n- `--spec mixamo` produces a Unity Humanoid / Mixamo-compatible skeleton; when the\n  final format is FBX add `fbx_preset=mixamo` on the convert step so bone naming and\n  axes match.\n- Clips available with the default v2.5 rig, for every body type: `preset:idle`\n  `walk` `run` `jump` `fall` `turn` `climb` `dive` `slash` `shoot` `hurt`, plus\n  `preset:quadruped:walk`, `preset:hexapod:walk`, `preset:octopod:walk`,\n  `preset:serpentine:march`, `preset:aquatic:march`. The older `rig:model=v1.0-20240301`\n  is biped-only but has 90+ `preset:biped:*` clips (dances, emotes, sports, combat) —\n  pick it when the game needs those.\n- `--animate-in-place` for locomotion clips driven by game code rather than root motion.\n- Retarget is billed per animation (10 credits each) and accepts at most five per task.\n  `--then retarget:` carries a single clip; use the piped `tripo anim retarget\n  --animation a b c` form for several.\n- To animate a mesh the project already has:\n  `tripo make hero.glb --then rig-check,rig,retarget:preset:walk --json --yes`\n\n## Format notes\n\n- **Three.js / web**: GLB. `--for ar-web` adds the web-oriented defaults (decimate to\n  20k faces, plus a USDZ for iOS Quick Look). `-p compress=geometry` at generation\n  emits a meshopt-compressed GLB for smaller downloads.\n- **Unity / Unreal**: FBX via `--then convert:fbx`, or `--for game-mobile` which\n  already converts. Useful convert options: `fbx_preset=blender|3dsmax|mixamo`,\n  `export_orientation=+x|-x|+y|-y` (forward axis for the engine),\n  `pivot_to_center_bottom=true` (pivot at the feet), `scale_factor=<n>` (unit fix),\n  `texture_format=PNG` (lossless instead of the JPEG default), `pack_uv=true`\n  (single atlas). Any of these bills the complex convert tier (10 credits, not 5).\n- Set `export_orientation` **only on the final convert**, never at generation when\n  more steps follow: downstream steps ignore it and return a wrongly oriented model\n  that still reports success.\n- Quads (`-p quad=true`) force FBX — glTF cannot store them, so `convert:glb`\n  combined with quads is rejected. Quads are v3.1 or P2 only.\n- `texture_size` is set on the convert step, not at generation:\n  `--then convert:format=FBX,texture_size=2048`. Texture *quality* is set at\n  generation: `-p texture_quality=detailed` (HD, +10 credits) or `extreme` (8K, +20).\n- Real-world scale for physics or AR: `-p auto_size=true` at generation scales the\n  model to metres.\n\n## Wiring into the project\n\nAfter a successful run, `model_file` in the result JSON is the path to import. Do the\nintegration work the user actually asked for — add the loader call, register the\nprefab, update the asset manifest — rather than stopping at \"the file is generated\".\nCheck `preview.png` first so a wrong asset does not get wired in.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}