Integrate the Blender character, gear and prop library
NpcAvatar - select one of 8 library character variants by role/seed (with npc_base and the procedural rig as fallbacks), keep Rig/Head and the existing bone animation - tint only skin/cloth/pants/accessory/hair; fixed detail materials keep their colour, npc_vest keeps its hi-vis vest, firefighter/guard use dark uniform tints - attach caps, hoods, helmets, backpacks, SCBA tanks, lanyards and hand items at the documented head/back/chest/hand points (primitive fallbacks retained) WorldBuilder - prefer assets/models/blender/props/ for the six replacements and the new street dressing (street lamp/tree, palms, planters, A-frame, cone, barrier, stanchion, podium, handrail, wall lantern, double door, marquee, sedan) - fit the same colliders/navigation obstacles and keep the placement validator; collect library emissives (bulbs, marquee face, wall lanterns, door LED, sedan lights) for set_night_mode() - add a library triangle counter + 60k budget check (current ~27,986); toggle prop gallery to the library models; fix the marquee label placement Tests/smoke - character selection/gear attach/fixed-material tint tests; library prop load, emissive and triangle-budget tests; smoke_props routes a guest around a stanchion in open sidewalk (the old bench route is now crowded by trees) - headless 222/222, Python 68/68, all smokes pass, compare 11 good / 0 bad Docs: TODO Phase 3.5 moved to DONE, README/architecture/blender-assets/plan describe the integrated runtime, MEMORY records the integration rules.
No files matched your search
@@ -80,7 +80,7 @@ The player interacts with NPCs, venue entrances, access artifacts, equipment, st
|
||||
- `WorldBuilder` assembles the procedural venue and instantiates the generated prop models from `assets/models/generated/` with a procedural fallback.
|
||||
- `tools/model_pipeline.py` builds and audits the street-prop `.glb` models and packs their colour atlases.
|
||||
- `tools/npc_pipeline.py` builds and audits the skinned NPC base model (`assets/models/generated/npc_base.glb`) and its per-slot material maps, with an optional AI fabric override (ADR-0013).
|
||||
- `tools/blender_assets.py` builds, renders and audits the staged Blender asset library (`assets/models/blender/{npc,npc_gear,props}/` + `manifest.json`): NPC character variants that are drop-in for `npc_base`, attach-point gear, and street/venue props. Not loaded at runtime yet (see `docs/blender-assets.md`).
|
||||
- `tools/blender_assets.py` builds, renders and audits the Blender asset library (`assets/models/blender/{npc,npc_gear,props}/` + `manifest.json`): NPC character variants that are drop-in for `npc_base`, attach-point gear, and street/venue props. `NpcAvatar` selects variants/gear by role/seed and `WorldBuilder` loads the prop replacements and new street dressing, with procedural fallbacks (see `docs/blender-assets.md`).
|
||||
- `tools/asset_pipeline.py` generates and audits role-aware textures; `tools/screen_designs.py` generates screen references and judges captures.
|
||||
|
||||
Confirmed game assets live in `assets/textures/ai/game_ready/` (audited surface, UI, and card textures), `assets/models/generated/` (prop and NPC `.glb` models plus their texture atlases), and `assets/textures/npc/` (NPC material maps and `palette.json`). Development-only outputs — AI concept sheets, Blender sources, raw AI fabrics — are gitignored and regenerated by the tools.
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# Blender asset library
|
||||
|
||||
Status: built and audited (2026-11-01). Nothing in the game loads these assets yet.
|
||||
They are staged for the Phase 3.5 integration in
|
||||
Status: built, audited, and integrated (2026-11-01). `NpcAvatar` selects the
|
||||
character variants and attaches the gear; `WorldBuilder` loads the prop library
|
||||
with colliders and phase-driven emissives. See the Phase 3.5 integration in
|
||||
[`plan-graphics-v0.6.md`](plan-graphics-v0.6.md).
|
||||
|
||||
Generator: [`tools/blender_assets.py`](../tools/blender_assets.py). Manifest (the
|
||||
@@ -109,11 +110,11 @@ colour texture. The current `_apply_outfit_materials()` sets
|
||||
`albedo_color = WHITE` on any slot it does not recognise, and these keep their
|
||||
colour through that. When integrating, tint only the five contract slots.
|
||||
|
||||
**Runtime tint notes.** `_build_skinned_body()` currently paints `cloth`
|
||||
hi-vis yellow for the `vest` layer. On `npc_vest` the vest is already the fixed
|
||||
`hivis` material and `cloth` is the undershirt, so skip that override for this
|
||||
model. For `npc_firefighter` and `npc_guard`, tint `cloth`/`pants` dark (turnout /
|
||||
uniform navy) and not with the role's `TYPE_COLORS`.
|
||||
**Runtime tint notes (implemented).** Only the five contract slots are tinted;
|
||||
fixed detail materials keep their authored colour. On `npc_vest` the vest is the
|
||||
fixed `hivis` material and `cloth` is the undershirt, so the yellow override is
|
||||
skipped. `npc_firefighter`/`npc_guard` use dark turnout/uniform tints instead of
|
||||
the role's `TYPE_COLORS`.
|
||||
|
||||
## Gear attach points
|
||||
|
||||
|
||||
@@ -167,8 +167,10 @@ Outputs land under `assets/textures/ai/game_ready/` (or a new
|
||||
### Phase 3.5 — Blender asset library (characters, gear, props)
|
||||
|
||||
The library generator is `tools/blender_assets.py` (flatpak Blender, headless).
|
||||
It stages outputs for integration; nothing is wired into the game until the
|
||||
audit and manifest are clean. Integration notes: [`blender-assets.md`](blender-assets.md).
|
||||
**Status: integrated** — `NpcAvatar` selects characters/gear and `WorldBuilder`
|
||||
loads the replacement/new props plus phase-driven emissives; the procedural rig
|
||||
and primitive props remain fallbacks. Integration notes:
|
||||
[`blender-assets.md`](blender-assets.md).
|
||||
|
||||
**Outputs and contract**
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 845 KiB After Width: | Height: | Size: 864 KiB |
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 534 KiB After Width: | Height: | Size: 530 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 56 KiB |