{
 "note": "Hand-authored inputs for scripts/gen-model-requests.mjs (ADR-033): polygon budgets, size ranges, Tripo settings, the turnaround sheet layouts and the roadmap need of each kind. The request list itself is generated from bestiary, mounts, items, cosmetics and world data; edit this file or that data, then run pnpm data:build.",
 "tripo": {
  "mode": "image-to-3D",
  "views": "multi-view with the request's views if your plan offers it, otherwise front.png only",
  "texture": "on, PBR",
  "autoRig": false,
  "animation": "none",
  "pose": "unchanged (keep the reference pose)",
  "faceLimit": "the request's polygon budget, if the site offers a face limit or low-poly option; otherwise export as is (agents retopologise)",
  "export": "GLB"
 },
 "budgets": {
  "monster_small": { "tris": 4000, "source": "docs/tech/PERFORMANCE.md#asset-budgets (Monster small, LOD0)" },
  "monster_medium": { "tris": 8000, "source": "docs/tech/PERFORMANCE.md#asset-budgets (Monster medium, LOD0)" },
  "monster_large": { "tris": 14000, "source": "docs/tech/PERFORMANCE.md#asset-budgets (Monster large, LOD0)" },
  "monster_large_plus": { "tris": 14000, "proposed": true, "note": "Elites are one weight class heavier than their base (bestiary.json); 'large+' has no row in PERFORMANCE.md, so large elites keep the large budget until profiled on the Low references." },
  "boss": { "tris": 40000, "source": "docs/tech/PERFORMANCE.md#asset-budgets (Boss, LOD0)" },
  "mount": { "tris": 14000, "proposed": true, "note": "PERFORMANCE.md has no mount row. A ridden mount is drawn next to its 22k rider, so it takes the large-monster budget until profiled." },
  "armour_helmet": { "tris": 2000, "proposed": true, "note": "Split of the 22k player budget (body + armour, PERFORMANCE.md) with the <= 15k undersuit body (CHARACTERS.md stage 2); covered body parts are hidden by masks. Check in the M3 armour fit." },
  "armour_armour": { "tris": 6000, "proposed": true, "note": "Body armour or robe; same split of the 22k player budget as armour_helmet." },
  "armour_gloves": { "tris": 1500, "proposed": true, "note": "A pair of gloves; same split of the 22k player budget as armour_helmet." },
  "armour_boots": { "tris": 1500, "proposed": true, "note": "A pair of boots; same split of the 22k player budget as armour_helmet." },
  "armour_belt": { "tris": 800, "proposed": true, "note": "Belt with pouches; same split of the 22k player budget as armour_helmet." },
  "clothing_costume": { "tris": 11000, "proposed": true, "note": "A costume overrides the visible helmet, armour, gloves and boots, so it gets the sum of those four slot budgets." },
  "prop_set_piece": { "tris": 5000, "source": "docs/tech/PERFORMANCE.md#asset-budgets (Prop 0.3–5k, LOD0)", "note": "Set pieces are the largest props and take the top of the prop range; larger landmarks are split into kit pieces in Blender." }
 },
 "sizeM": {
  "note": "Plausible size after the Blender rescale, in metres (height for creatures and costumes, longest side for pieces and props). Tripo exports are normalised, so the inbox checker reports the rescale factor and rejects only broken units outside rawAccept.",
  "rawAccept": { "range": [0.01, 100], "proposed": true, "note": "Exports outside this longest side are treated as broken units." },
  "monster_small": { "range": [0.4, 0.8], "source": "ART-MON-053 prompt (art-requests.manual.json): scale bars by height" },
  "monster_medium": { "range": [0.9, 1.4], "source": "ART-MON-053 prompt (art-requests.manual.json)" },
  "monster_large": { "range": [1.6, 2.4], "source": "ART-MON-053 prompt (art-requests.manual.json)" },
  "monster_large_plus": { "range": [1.6, 3.0], "proposed": true, "note": "Large elites: up to 25% above the large range." },
  "monster_humanoid": { "range": [1.6, 2.0], "proposed": true, "note": "Humanoid monsters use the 1.8 m player capsule (CHARACTERS.md); bodies 1.72–1.85 m." },
  "boss": { "range": [2.5, 6.0], "proposed": true, "note": "No boss size in the data; the tortoise and the camel-beast tower over a 1.8 m player." },
  "mount": { "range": [1.6, 3.2], "proposed": true, "note": "Mount height to the top of the saddle or howdah." },
  "armour_helmet": { "range": [0.2, 0.5], "proposed": true },
  "armour_armour": { "range": [0.5, 1.0], "proposed": true },
  "armour_gloves": { "range": [0.15, 0.4], "proposed": true, "note": "One glove or the pair, longest side." },
  "armour_boots": { "range": [0.2, 0.5], "proposed": true },
  "armour_belt": { "range": [0.25, 0.6], "proposed": true },
  "clothing_costume": { "range": [1.4, 2.1], "proposed": true, "note": "Full outfit height on a 1.72–1.85 m body." },
  "prop_set_piece": { "range": [0.5, 15], "proposed": true, "note": "From a training log to a three-arch bridge section." }
 },
 "inbox": {
  "note": "Rules of tools/model-inbox.mjs (MODEL-01B). Over the budget a model is delivered with a 'needs retopo' note (TRIPO_PIPELINE: export as is, agents retopologise); above max(rejectAboveBudgetX × budget, rejectAboveTris) it is rejected and the owner re-exports with a face limit. Tripo web exports measured about 53k triangles (the Wukong test model), so the floor keeps every as-is export of that size; 250k+ is an HD export that is slow to polish headless. Size: 'height' kinds are measured on the glTF Y axis, 'longest' kinds on the longest side; outside sizeM a model is delivered with a rescale note, outside sizeM.rawAccept it is rejected.",
  "rejectAboveBudgetX": 25,
  "rejectAboveTris": 250000,
  "proposed": true,
  "measure": { "height": ["monster", "elite", "boss", "mount", "clothing"], "longest": ["armour", "prop"] }
 },
 "sheets": {
  "ART-MON-053": {
   "file": "art/source/production-sheets/ART-MON-053.png",
   "grid": [5, 4],
   "order": "bestiary.monsters",
   "views": ["side", "front", "top"],
   "cellViews": { "clayclaw_scorpion": ["side", "top"], "jadecrest_monitor": ["side", "top"], "basaltsting_scorpion": ["side", "top"], "saltway_bandit": ["side", "front", "back"], "ashroad_raider": ["side", "front", "back"] },
   "note": "One cell per base monster in bestiary order (5 columns × 4 rows). Each cell: a scale bar, then side, front and top views (no back view); the scorpions and the monitor have side and top only, the two humanoids side, front and back (checked on logs/evidence/MODEL-01/monster-views-overview.png)."
  },
  "default": {
   "views": ["front", "side", "back"],
   "note": "Layout of every turnaround requested for a model (gen-art-requests.mjs, kind model-views): three views left to right on one baseline."
  }
 },
 "neededBy": [
  { "kind": "monster", "ids": ["duneplate_beetle"], "task": "M2-06" },
  { "kind": "monster", "ids": ["dewhorn_hare", "reed_fox", "orchard_boar"], "milestone": "M4", "group": "4 monsters (hare, fox, boar, beetle)" },
  { "kind": "armour", "tiers": ["T5"], "milestone": "M3", "group": "Modular slots: helmet/body/gloves/boots" },
  { "kind": "mount", "milestone": "M5", "group": "Mount + waypoint travel" },
  { "kind": "prop", "milestone": "M5" },
  { "kind": "monster", "milestone": "M8", "group": "16 more monsters + elites" },
  { "kind": "elite", "milestone": "M8", "group": "16 more monsters + elites" },
  { "kind": "armour", "milestone": "M8", "group": "Crafting/orbs/refinement" },
  { "kind": "boss", "milestone": "M9", "group": "2 bosses with telegraphs" },
  { "kind": "clothing", "milestone": "M10", "group": "Replace every placeholder" }
 ],
 "avoid": "No rig or skeleton, no animation, no pose change (keep the reference pose), no ground plane or base, no background objects, no text, no extra or fused limbs, no lighting or shadows baked into the texture.",
 "eliteNote": "Optional: elites share the base monster's views. If you skip it, agents build the elite in Blender from the base model (one size class up, heavier plating or fur, the elite material)."
}
