propkit.py: textured-GLB writer (TEXCOORD_0, shared external textures, MIRRORED_REPEAT). prop_author.py: parametric generators — ramps, rails, furniture, trees, dressing — each with local-space grind metadata and skatemakerpro element/collider hints. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
64 lines
2.8 KiB
Markdown
64 lines
2.8 KiB
Markdown
# park_kit — GODVERSE park object library
|
||
|
||
Reusable, textured, license-clean park objects for **bookquoy** and **skatemakerpro**
|
||
(and whatever comes next). 27 props, 18 photoreal surfaces, all original: geometry
|
||
authored parametrically in `tools/prop_author.py`, textures generated on the
|
||
MODELBEAST farm (flux_local, local GPU, no cloud spend).
|
||
|
||
## The contract
|
||
|
||
**`props/` and `textures/` ship together.** GLBs are geometry-only (2–24KB) and
|
||
reference `../textures/*.jpg` by relative URI, so every prop shares one texture set
|
||
and the browser caches each surface once. Move a GLB without the textures folder
|
||
and it loads grey.
|
||
|
||
`manifest.json` is the catalog. Per prop:
|
||
|
||
| field | meaning |
|
||
|---|---|
|
||
| `src` | `props/<id>.glb` — drop straight into a skatemakerpro `props[]` entry |
|
||
| `grinds` | grindable edges in **prop-local metres** `{a:[x,z], b:[x,z], ya, yb, kind}` — rotate/translate with the prop, append to the park `rails[]` |
|
||
| `element` | matching skatemakerpro terrain kind (`quarter`/`bank`/`funbox`/`spine`/`ledge`/`mogul`) with params — place alongside ramp props for real collision from the heightfield |
|
||
| `collider` | simple blocker hint for furniture/trees (`box`/`cylinder`/`none`) |
|
||
| `size` | world-space bounding box `[x, y, z]` |
|
||
|
||
Sampler is MIRRORED_REPEAT — tileable-intent textures never show a hard seam.
|
||
UVs are world-scale (metres per tile fixed per material), so texture density
|
||
matches across every prop.
|
||
|
||
## Catalog
|
||
|
||
- **obstacles (14):** qp_24, qp_18, bank_12, kicker, funbox_ply, spine_ply,
|
||
manual_pad, ledge_concrete, grindbox_ply, rail_flat_3m, rail_flat_6m,
|
||
rail_kink, rail_rainbow, pipe_full (graffiti-bombed concrete full pipe)
|
||
- **furniture (7):** bench_park, bench_concrete, picnic_table, bin_council,
|
||
bollard_steel, railing_ped_2m, planter_box (with gum sapling)
|
||
- **vegetation (2):** tree_fig (Moreton Bay, buttress roots), tree_gum (eucalypt)
|
||
- **dressing (4):** kerb_3m (slappy central), wall_graffiti (wallride bait),
|
||
shade_sail, mound_dirt
|
||
|
||
## View it
|
||
|
||
```bash
|
||
python3 serve.py 8151 # then open http://localhost:8151
|
||
```
|
||
|
||
Dropdown per prop or the full grid; red lines = grind metadata (toggle).
|
||
`window.__view(id)` / `window.__ready()` hooks for headless checks.
|
||
|
||
## Regenerate
|
||
|
||
```bash
|
||
python3 tools/gen_textures.py # MODELBEAST textures (idempotent; --force name to redo)
|
||
python3 tools/prop_author.py # all GLBs + manifest.json
|
||
```
|
||
|
||
`tools/propkit.py` is the textured-GLB writer (UVs + external images — the
|
||
character_kit writers' upgrade). `fan(..., out=)` auto-orients windings; lathe
|
||
UVs wrap girth-first to match tube (bark ridges stay vertical).
|
||
|
||
## Provenance
|
||
|
||
Everything here is original GODVERSE work. Textures: flux2-klein-4b on the farm,
|
||
prompts in `tools/gen_textures.py`. No game assets, no trademarks, no scans.
|