Stage the Blender character/gear/prop library

Commit the finished generator output from the parallel Blender pass:
8 skinned NPC variants, 18 gear pieces, and 20 props under
assets/models/blender/, editable sources (gdignored), manifest, review sheets,
and the integration notes in docs/blender-assets.md.

- audit: all 46 assets clean (characters 3,788-4,640 tris, under 6000/4000)
- tests: Python manifest/audit contract and Godot import/bone/slot/ground checks
- docs: README library section, architecture/plan references, TODO Phase 3.5
  status, MEMORY integration rules
- .gitignore: per-asset preview PNGs, extracted GLB textures, blend1 backups

Nothing in the game loads the library yet; integration follows." && git log --oneline -1
This commit is contained in:
zwitschi committed 2026-11-01 14:33:30 +01:00
1 parent 7efb5024ec
commit d513e0b82c
109 files changed
+1916 -114

No files matched your search

+24 -18
View File
@@ -1,19 +1,18 @@
# TODO
Godot 4.3 prototype. Latest release **v0.5.0** (NPC characters and player movement). Headless
suite **212/212** plus **60** Python tooling tests; the session, PLAN-verb, crowd, emergency,
suite **218/218** plus **68** Python tooling tests; the session, PLAN-verb, crowd, emergency,
timeline, audio, scenario-content, props, NPC-budget, movement, and windowed focus/radial smokes
pass. Anonymous downloads are enabled on the host.
The scheduled presentation pass is complete (see `DONE.md`). The next scheduled pass is the
graphics-quality work in [`docs/plan-graphics-v0.6.md`](docs/plan-graphics-v0.6.md).
> **Asset build in progress:** `tools/blender_assets.py` is being run separately (flatpak
> Blender) to generate a larger library: 8 NPC character variants, 18 gear pieces, and 22
> street/venue props under `assets/models/blender/`, with a manifest and preview renders.
> Do not edit the generator while that process is running. Treat
> `assets/models/blender/manifest.json` as the integration source of truth, and audit the
> finished outputs before wiring anything into the game.
> **Blender asset library built (2026-11-01):** `tools/blender_assets.py` generated 8 NPC
> character variants, 18 gear pieces, and 20 street/venue props under `assets/models/blender/`
> (audit clean, Godot import clean, see [`docs/blender-assets.md`](docs/blender-assets.md)).
> Treat `assets/models/blender/manifest.json` as the integration source of truth; nothing is
> wired into the game yet.
## Graphics quality — Blender-authored NPC characters (v0.6.0)
@@ -65,24 +64,31 @@ Detailed plan: [`docs/plan-graphics-v0.6.md`](docs/plan-graphics-v0.6.md) · [AD
- [x] Re-measure `smoke_npc_budget.gd`; tune `LOD_TIERS` if the skinned rig is heavier up close.
- [x] Re-verify the focus-cone smoke (`smoke_focus_radial.gd`) and the movement smoke.
### Phase 3.5 — Blender asset library integration (generator running)
### Phase 3.5 — Blender asset library integration
Contract and outputs: [`assets/models/blender/manifest.json`](assets/models/blender/manifest.json),
generator `tools/blender_assets.py`, previews `docs/blender_previews/` (the generator's
integration notes are being written to `docs/blender-assets.md`). The library currently targets
8 `npc` variants, 18 `npc_gear` pieces, and 22 `props`; each entry records path, triangle/vertex
generator `tools/blender_assets.py`, review sheets `docs/blender_previews/sheet_*.jpg`,
integration notes [`docs/blender-assets.md`](docs/blender-assets.md). The library has
8 `npc` variants, 18 `npc_gear` pieces, and 20 `props`; each entry records path, triangle/vertex
count, bounds, material slots, and (for gear) its attach point.
- [ ] Wait for the running build to finish, then run `python3 tools/blender_assets.py audit` and
reconcile every failure. The first `npc_casual` build is over the 6,000-triangle contract
(7,756 tris / 5,616 verts): reduce the mesh or raise/annotate the character budget in the
plan before integrating.
- [ ] Run `python3 tools/blender_assets.py sheet` and review the contact sheets; reject assets
- [x] Wait for the running build to finish, then run `python3 tools/blender_assets.py audit` and
reconcile every failure. Characters were reduced to fit the unchanged 6,000/4,000 contract
(now 3,788–4,640 tris / 3,195–3,962 verts); the audit also rejects zero-area triangles.
- [x] Run `python3 tools/blender_assets.py sheet` and review the contact sheets; reject assets
whose silhouette, grounded origin, or face direction (+Z in Godot) is wrong.
- [ ] Commit the finished library with the generator, `.blend` sources, manifest, previews, and
`docs/blender-assets.md`; add generated/preview folders to `.gitignore` only where CI can
rebuild them offline. Keep the audit runnable without Blender.
- [ ] Add `tools/test_blender_assets.py` for the manifest contract (all catalogue entries present,
rebuild them offline. Keep the audit runnable without Blender. (`.gitignore` already
excludes the per-asset preview PNGs, Godot-extracted GLB textures, and `*.blend1`.)
- [x] Add `src/test/tests/test_blender_assets.gd`: library imports as scenes, characters keep
bones/slots, joints match `npc_base`, bones accept the avatar pose math, props grounded.
- [ ] Tint only the five contract slots in `_apply_outfit_materials()` (fixed-colour detail
materials such as `hivis`/`reflective`/`leather` must keep their colour), and skip the
`vest` cloth→yellow override for `npc_vest` (its vest is the fixed `hivis` material).
- [ ] Bake AO/ORM for the Blender characters and props (they currently reuse tiling slot maps
or plain PBR factors).
- [x] Add `tools/test_blender_assets.py` for the manifest contract (all catalogue entries present,
audit clean, attach points known, paths inside `assets/models/blender/`).
- [ ] Let `NpcAvatar` choose a character model from the manifest by the profile's role/layer
(`npc_casual` / `npc_jacket` / `npc_coat` / `npc_vest` / `npc_dress` / `npc_hoodie` /