park_kit/README.md
type-two 153e26c329 park_kit v0.1 — 27 textured park props + 18 MODELBEAST surfaces + manifest
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>
2026-08-03 19:47:34 +10:00

64 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 (224KB) 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.