PROCITY/pipeline/MESHGOD_BATCH.md
2026-07-14 20:36:12 +10:00

3.1 KiB
Raw Permalink Blame History

PROCITY bespoke hero props — MeshGod batch (Step 5)

Budget-gated. Do NOT run without John's go. Pricing corrected (2026-07-14, John): fal Hunyuan v2 is ~1417¢/gen, not 30¢. Post-R3/R4 the batch is mostly filled free on MODELBEAST; the fal remainder is only glass-case + bus-shelter (+ optionally magazine-rack) ≈ $0.280.51 one-pass, ~$1 worst case with the ≤2-attempts rule. Everything here has an in-engine primitive fallback, so the game never blocks on it. The batch spec is pipeline/meshgod_batch.json (djsim_home / thriftgod_hero pattern).

What this fills

The audit coverage table (AUDIT.md) found the sorted library has no usable source for a handful of shop-defining props. These are them — the objects that make a shop-type read instantly:

prop shop type why not from the library
listening-booth record nothing like it in the dump
cash-register all none (till is universal)
glass-case toy / pawn / milkbar audit found no glass display case
drinks-fridge milkbar none
magazine-rack milkbar / pawn none
arcade-cabinet arcade / dept none
milkshake-mixer milkbar none
novelty-record record (roof ornament) the "ooh" landmark object
bus-shelter street none (Lane B street dressing)

Run it (only after go-ahead)

# 1. FIRST check for reuse — save money. cash-register & glass-case very likely already exist
#    from thriftgod_hero.json (its street-bench/council-bin/milk-crate-stack/cashbot are already
#    live on the depot):
curl -s https://digalot.fyi/3god/api/list | grep -iE 'register|glass|display|fridge|arcade'

# 2. generate the ones not already available:
cd ~/Documents/MESHGOD   # (or meshgod)
python -m meshgod.batch manifest ~/Documents/procity/pipeline/meshgod_batch.json --out assets3d/procity

# 3. finish + publish through the SAME house pipeline as the library assets:
#    meshgod.batch already runs finish_glb (metres/base-origin/decimate). Then normalize any
#    stragglers with pipeline/normalize.py and publish with pipeline/publish.py.

The MeshGod gotcha (why some gaps are NOT here)

Thin wires and flat discs reconstruct badly in image→3D. These stay in-engine primitives (listed under _primitives_instead in the JSON) — Lane B/C build them from boxes/cylinders:

  • spinner-rack (thin wire) → extruded-cylinder primitive
  • band-poster-easel (thin A-frame) → box + canvas poster
  • vhs-rewinder (tiny box) → box primitive
  • returns-slot → a cut in the shopfront wall plane
  • escalator-prop → extruded ramp primitive
  • pegboard-wall → a plane skinned with tex-pegboard.jpg (already in web/assets/gen/)

The novelty-record is deliberately specced as a thick chunky disc on a base (not a flat disc) so it survives reconstruction.

After generation

  • Each solid → procity_fit_<name>_01.glb / procity_street_<name>_01.glb, thumbnail rendered, add to web/assets/manifest.json (re-run build_manifest.py once the results land), publish.
  • Re-run validate_manifest.py --depot to confirm they're live and the manifest stays green.