Document the larger asset set produced by the running Blender generator
(tools/blender_assets.py): 8 NPC character variants, 18 gear pieces, and 22
street/venue props with a manifest, editable sources, and preview sheets.
- TODO gains Phase 3.5 with the audit/budget reconciliation (npc_casual is
currently 7,756 tris / 5,616 verts, above the 6,000/4,000 contract), character
selection by role, gear attach points, prop replacement/placement, emissive
wiring, budgets, and screenshot gates
- PLAN's Visual Quality Direction describes the library, runtime selection, and
offline fallbacks
- docs/plan-graphics-v0.6.md adds the library contract/output table and
integration steps, and points Phase 4 at the Blender props
- MEMORY records the manifest-as-source-of-truth rule and the generator caveat
Generated library files stay untracked until the running build finishes and
passes the audit; the generator itself is committed so the plan is reproducible.
Wire the skinned model from ADR-0013 into NpcAvatar:
- _build_skinned_body() instantiates the imported npc_base.glb, binds the 14
armature bones, and keeps the procedural _build_body() as the offline
fallback (use_skinned_model can force it in tests)
- outfit_for()/layer_for() tint the five material slots through the new
SurfaceMaterials.npc_slot(); accessories and hand items attach under Rig/Head
- the existing limb pivots (Hip/Knee/Shoulder/Elbow/Hand + Head marker) keep the
old animation math; _sync_skeleton() copies their rotations to bones. Bone
pose rotation is absolute local orientation, so it is composed with the rest
basis (otherwise the whole body snaps into a broken pose)
- skinned rigs scale uniformly (non-uniform parent scale shears the skin) and
keep Rig/Head for the focus cone, nametag, and reaction tag
- commit the editable npc_base.blend plus a .gdignore: Godot's editor otherwise
tries to import the blend and hangs during --import
- npc_pipeline audit tests (contract, textures, clean GLB, committed source)
Verification: headless 212/212, Python tooling 60/60, NPC budget 16 avatars =
144 meshes at ~6.9 ms, movement/focus/props smokes pass, compare 11 good / 0 bad.
TODO Phases 0-3 checked; environment lift and release remain.