64 lines
3.1 KiB
Markdown
64 lines
3.1 KiB
Markdown
# 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 **~14–17¢/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.28–0.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)
|
||
|
||
```bash
|
||
# 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.
|